我相信在基本上是 python 的 Sage 中工作。我给出了以下代码。
def lfsr_1(regs,tabs):
I=regs
leng=len(I)
count=0
while True:
FB=0
print "Before"
print I
print regs
print temp
for i in range(0,leng):
FB=FB+tabs[i]*I[i] //Calculating the feedback value
for i in range(0,leng):
regs[leng-(i+1)]=regs[leng-(i+1)-1] //Shifting regs one bit to the right
I[0]=FB //Adding the feedback at the end
count=count+1 //Incrementing count value which will contain the periodicity
print "After"
print I
print regs
print temp
if (I==regs): //End when the initial state is repeated again. Now, count will contain the periodicity
break
输入变量初始化如下
tabs=[GF(2)(1),0,0,1,1,1]
regs=[GF(2)(0),1,1,0,1,1]
temp=regs
但是,我得到的输出为:
Before
[0, 0, 1, 1, 0, 1]
[0, 0, 1, 1, 0, 1]
[0, 0, 1, 1, 0, 1]
After
[0, 0, 0, 1, 1, 0]
[0, 0, 0, 1, 1, 0]
[0, 0, 0, 1, 1, 0]
不知道这是如何发生的,因为“我”随着“regs”的变化而变化。“我”在代码中永远不会改变。我的作业有问题吗?
附录:尝试实现一个线性反馈移位寄存器。该代码用于计算 LFSR 的周期性。regs 是初始状态,I 用于检查 regs 何时再次返回初始状态(以计算周期性),而 temp 只是一个测试变量,以查看另一个初始化变量是否也会被移动。