LFSR代码给出了错误的结果

2024-05-29 05:55:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有LFSR的代码,得到了错误的结果,前8位应该是0110100,但我得到的是0101111001。在

我说的是Galois LSFR:en.wikipedia.org/wiki/Linear-反馈移位寄存器

有人知道这个代码有什么问题吗?在

def lfsr(seed, taps):
  for i in range(10):
      nxt = sum([ seed[x] for x in taps]) % 2
      yield nxt
      seed = ([nxt] + seed)[:max(taps)+1]



for x in lfsr([0,0,1,1,1,0,0,1],[6,5,1]) :
  print x

Tags: 代码inorgfor错误wikiwikipediaen
1条回答
网友
1楼 · 发布于 2024-05-29 05:55:20

我对这个问题的回答是:“有人知道这个代码有什么问题吗?”,不是。该代码是可操作的,实现了LFSR(硬件中常用的伪随机信号类型,也是流行的CRC函数的基础)。让我来猜猜为什么你不这么认为

这种类型的LFSR可视为带抽头的移位寄存器:

pos   0 1 2 3 4 5 6 7
reg   0 0 1 1 1 0 0 1
    ^-  +       + +

每次迭代,从抽头计算一个值,并将其插入一端,移动其他值。在这种情况下,新位变成LSB。让我们运行LFSR几个周期:

^{pr2}$

注意,在c1列中,我们从c1列中读取。顺便说一句,位置7不需要存在,因为在那么远的地方没有tap;代码中的片段会删除这些列。在

我已经成功地复制了你所说的通过反转八个周期的输入和输出得到的值。你能解释一下你是如何得出你所说的价值的吗?在

我可以想象得到一个相似的值的一种方法是通过另一种方式进行移位,并在一个周期后观察移位寄存器的状态。这需要保持其宽度超过活动抽头(在CRC使用中并不罕见)。在

taps    +       + +  -v
pos   0 1 2 3 4 5 6 7
reg   0 0 1 1 1 0 0 1
c1    0 1 1 1 0 0 1 0
c2    1 1 1 0 0 1 0 0
c3    1 1 0 0 1 0 0 0
c4    1 0 0 1 0 0 0 1

但即便如此,输出还是0001010111(这次读到第7列)。在

相关问题 更多 >

    热门问题