In [ ]:
# LFSR example
def LFSR(seed, taps):
while True:
nxt = sum([seed[x] for x in taps]) % 2
yield nxt
seed = ([nxt] + seed)[:max(taps) + 1]
count = 0
for x in LFSR([1,1,0,0,1,0,0,1,0], [1,6,7,8]):
if (count <= 20):
#print x
count += 1
else:
count = 0
break
def LFSR2(seed, taps):
sr = seed
nbits = 8
while 1:
xor = 1
for t in taps:
if (sr & (1 << (t - 1))) != 0:
xor ^= 1
sr = (xor << nbits - 1) + (sr >> 1)
yield xor, sr
if sr == seed:
break
nbits = 25
for xor, sr in LFSR2(0b0000000100010000000100001, (25,20,12,8)):
if (count <= 20):
print xor, bin(2**nbits + sr)[3:]
count += 1
else:
count = 0
break
'''
def LFSR3(seed, mask):
result = seed
nbits = mask.bit_length() - 1
while True:
result = result << 1
xor = result >> nbits
if xor != 0:
result ^= mask
yield xor, result
for xor, pattern in LFSR3(0b110010010, 0b111000010):
if (count <= 20):
print xor, bin(2**nbits + pattern)[3:]
count += 1
else:
count = 0
break
'''