【发布时间】:2022-05-20 03:46:59
【问题描述】:
最近我反复接触到 LFSR 的概念,我觉得这很有趣,因为它与不同的领域有联系,而且本身也很吸引人。我花了一些力气才明白,最后的帮助是这真的很好page,比(起初)神秘的wikipedia entry好多了。所以我想为一个像 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)
然后我就想到了,这在写软件有什么用?听说可以生成随机数;是真的吗?如何? 所以,如果有人可以,那就太好了:
- 解释如何在软件开发中使用这种设备
- 想出一些代码来支持上面的观点,或者就像我的一样以任何语言展示不同的方法
此外,由于没有太多关于这块逻辑和数字电路的教学内容,如果这可以成为新手(如我)更好地理解这件事的地方,那就太好了 em>,或者更好的是,了解它是什么以及在编写软件时它如何有用。应该让它成为一个社区 wiki 吗?
也就是说,如果有人喜欢打高尔夫球……不客气。
【问题讨论】:
-
如果你在 SO 中搜索 lfsr 你会发现很多...
-
我做到了,不是我想要的
-
为什么这被标记为代码高尔夫?
-
@Landei:因为我(也)希望看到它打高尔夫球。如果这对标签来说还不够,对不起。
-
就在 2 天前,我使用 LFSR 将整数序列转换为半随机序列,然后将其转换回来:stackoverflow.com/questions/9804100/…
标签: python language-agnostic digital-logic