P2 LFSR
This commit is contained in:
65
P2/main.py
Normal file
65
P2/main.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Linear Feedback Shift Register
|
||||
class LFSR:
|
||||
def __init__(self, poly):
|
||||
self.g = [] # mapping von g g[x] == g_x
|
||||
self.reg = [] # Register mit dem Zustand
|
||||
|
||||
for ziffer in poly:
|
||||
self.reg.append(0)
|
||||
self.g.append(int(ziffer))
|
||||
|
||||
# poly = str(n, n-1, ..., 0) => g = [0, ..., n-1, n]
|
||||
self.g.reverse()
|
||||
self.reg.reverse()
|
||||
|
||||
# Entferne den letzten Eintrag, da dieser den Grad darstellt => Anzahl der Register = len(g) - 1
|
||||
self.g.pop()
|
||||
self.reg.pop()
|
||||
|
||||
|
||||
def get_reg_as_string(self):
|
||||
reg_string = ""
|
||||
|
||||
for i in self.reg:
|
||||
reg_string = reg_string + str(i)
|
||||
|
||||
return reg_string
|
||||
|
||||
def shift(self, s_i):
|
||||
reg_old = self.reg.copy() # alter Zustand, um überschreibungen zu vermeiden
|
||||
|
||||
feedback = reg_old[-1] ^ int(s_i)
|
||||
|
||||
for i, value in enumerate(self.g):
|
||||
if i == 0:
|
||||
self.reg[i] = feedback
|
||||
else:
|
||||
if value == 1:
|
||||
self.reg[i] = reg_old[i - 1] ^ feedback
|
||||
else:
|
||||
self.reg[i] = reg_old[i - 1]
|
||||
|
||||
|
||||
def CRC_Parity(daten, g):
|
||||
schiebe_reg = LFSR(g)
|
||||
|
||||
for s in daten:
|
||||
schiebe_reg.shift(s)
|
||||
|
||||
return schiebe_reg.get_reg_as_string()
|
||||
|
||||
|
||||
def channel_bsc(p, n):
|
||||
F = 0b0
|
||||
'''
|
||||
berechne Fehlersequenz F
|
||||
Achte auf Bedingung
|
||||
'''
|
||||
return F
|
||||
|
||||
|
||||
def p_k_Fehler(p):
|
||||
n = 1000
|
||||
|
||||
|
||||
def main():
|
||||
Reference in New Issue
Block a user