对于联结多项式 p(x) = 1 + x + x7编程实现一个简单的线性反馈移位寄存器并输出序列与周期,避免无限循环
时间: 2024-01-20 16:02:17 浏览: 114
线性反馈移位寄存器(LFSR):通常由移位寄存器和异或门逻辑组成
5星 · 资源好评率100%
好的,以下是一个简单的Python代码实现:
```python
def lfsr(polynomial):
# 初始化寄存器
register = [1] + [0] * (len(polynomial) - 1)
# 记录出现过的状态
states = set()
# 计算周期
period = 0
while True:
# 计算输出值
output = register[-1]
for i in range(len(polynomial) - 1):
output ^= register[i] & polynomial[i+1]
# 移位操作
register = [output] + register[:-1]
# 记录状态
state = tuple(register)
if state in states:
break
states.add(state)
period += 1
return list(states), period
polynomial = [1, 1, 0, 0, 0, 0, 0, 1]
states, period = lfsr(polynomial)
print("序列:", [state[0] for state in states])
print("周期:", period)
```
在这个代码中,我们定义了一个 `lfsr` 函数来计算给定联结多项式的序列和周期。函数接受一个联结多项式的列表作为参数,返回一个包含所有状态的列表和周期的整数。
在函数内部,我们首先初始化寄存器为 $[1, 0, 0, 0, 0, 0, 0]$,表示初始状态为 $1000000$。我们使用一个集合 `states` 来记录出现过的状态,并使用一个整数 `period` 来记录周期。在每个循环中,我们计算当前的输出值,并将寄存器进行移位操作,然后记录当前状态。如果当前状态已经在 `states` 集合中出现过,则说明我们已经进入了一个循环,此时我们可以退出循环并返回结果。
在最后,我们将状态列表中所有状态的第一个元素合并成一个列表,表示最终的序列,然后输出周期。如果寄存器进入了无限循环,该算法将会陷入死循环,但是由于联结多项式 p(x) = 1 + x + x7 是一个反馈多项式,因此不会出现这种情况。
阅读全文