基本的に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]
「I」が「regs」とともに変更されると、これがどのように起こるかわかりません。「I」はコード内で変更されることはありません。私の課題に何か問題がありますか?
補遺: リニア フィードバック シフト レジスタを実装しようとしています。コードは、LFSR の周期性を計算することです。regs は初期状態です。I は、regs が再び初期状態に戻るタイミングをチェックするために使用され (周期性を計算するため)、temp は、別の初期化された変数もシフトされるかどうかを確認するための単なるテスト変数です。