最近,我多次遇到LFSR的概念,我发现它与不同领域有联系,本身也很有趣。我花了一些力气才理解,最终帮助我的是这个真正好的页面,比起一开始晦涩难懂的维基百科条目好多了。因此,我想为一个像LFSR一样工作的程序编写一些小代码。更准确地说,它应该以某种方式展示LFSR的工作原理。在一些尝试之后,这是我能够想出的最简洁的东西(Python):
def lfsr(seed, taps):
sr, xor = seed, 0
while 1:
for t in taps:
xor += int(sr[t-1])
if xor%2 == 0.0:
xor = 0
else:
xor = 1
print(xor)
sr, xor = str(xor) + sr[:-1], 0
print(sr)
if sr == seed:
break
lfsr('11001001', (8,7,6,1)) #example
我将“xor”命名为XOR函数的输出,这并不是非常正确的。然而,这只是为了展示它如何在可能的状态中循环,实际上您注意到寄存器由字符串表示。逻辑上并不十分连贯。
这可以很容易地变成一个有趣的玩具,您可以观看数小时(至少我可以 :-)。
def lfsr(seed, taps):
import time
sr, xor = seed, 0
while 1:
for t in taps:
xor += int(sr[t-1])
if xor%2 == 0.0:
xor = 0
else:
xor = 1
print(xor)
print('')
time.sleep(0.75)
sr, xor = str(xor) + sr[:-1], 0
print(sr)
print('')
time.sleep(0.75)
然后我想到,这在编写软件中有什么用处?我听说它可以生成随机数;这是真的吗?如何实现?
因此,如果有人能:
- 解释如何在软件开发中使用这样的设备 - 提供一些代码,支持上述观点或类似于我的代码以展示不同的实现方式(任何语言)
由于关于这个逻辑和数字电路的教学材料不多,所以对于像我这样的新手来说,这可能是一个更好地了解这个“东西”的地方,或者更好地理解它是什么以及在编写软件时如何有用。这是否应该成为社区wiki?
话虽如此,如果有人想要挑战高尔夫......欢迎。