1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
|
__bit=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] #Eingabe
g1=[16,5,3,1,0] #g1-g4 sind die Feedbackpolynome mit den entsprechenden Exponenten
g2=[16,0]
g3=[16,7,0]
g4=[16,14,13,11,0]
def LFSR(g):
biterg=__bit[:]
i=0 #Zyklenzaehler
ausg=''
run=True
while run:
k=biterg[g[0]]^biterg[g[1]] #rechnet XOR mit den ersten beiden Stellen
for j in range(2,len(g)):
k=k^biterg[g[j]] #verrechnet die weiteren Stellen XOR
ausg=ausg+str(biterg[len(biterg)-1])
biterg.insert(0,k) #fuegt neues Bit an erster Stelle ein
biterg.pop(len(biterg)-1) # nimmt letztes Bit weg
i+=1
if biterg==__bit:
run=False
return i,ausg
def main():
print('Zyklenlaenge | Zyklus')
print('a: ',LFSR(g1))
print('b: ',LFSR(g2))
print('c: ',LFSR(g3))
print('d: ',LFSR(g4))
main()
|