LFSR计算器 - 线性反馈移位寄存器
使用可自定义种子和反馈抽头的线性反馈移位寄存器生成伪随机二进制序列。
输入寄存器长度、初始种子、反馈抽头位置、LFSR 类型和迭代次数,然后点击生成序列。
LFSR计算器 - 线性反馈移位寄存器
使用可自定义种子和反馈抽头的线性反馈移位寄存器生成伪随机二进制序列。
表示初始状态的二进制字符串(仅 0 和 1)
以逗号分隔的抽头位置,从 1 开始计数
要执行的移位操作次数
生成的序列
输出位:
000100110101111序列周期: 15
最大长度: 是
寄存器状态:
0: 1000
1: 0100
2: 0010
3: 1001
4: 1100
5: 0110
6: 1011
7: 0101
8: 1010
9: 1101
10: 1110
11: 1111
12: 0111
13: 0011
14: 0001
15: 1000
关于 LFSR 计算器
线性反馈移位寄存器(LFSR)是一种移位寄存器,它的输入位是其部分历史状态位经过线性函数(XOR)计算得到的。每个时钟周期,寄存器都会整体移位一位,新输入位由称为反馈抽头的特定位置位进行 XOR 计算,输出则是被移出的那一位。得到的二进制序列看起来随机,但完全是确定性的,其重复周期取决于寄存器长度和抽头选择。
LFSR 广泛用于数字通信、密码学、内建自测试(BIST)电路、扩频系统以及伪随机数生成。对于 n 级 LFSR,最多可以在重复前产生 2ⁿ − 1 位序列(全零状态不包含在内);通过精心选择原始多项式抽头,可以实现这种最大长度序列,因此 LFSR 是一种高效的硬件伪随机实现方式。
常见的 LFSR 架构有两种。在 Fibonacci(外部反馈)LFSR 中,反馈位由固定的一组抽头位置计算得到,然后送入最左侧级,其余各级向右移位。输出取自最右侧级。在 Galois(内部反馈)LFSR 中,反馈位不是只回送到输入端,而是直接 XOR 到多个中间级。由于所有 XOR 运算并行完成而不是串行完成,Galois LFSR 的硬件速度更快。
最大长度 LFSR——即在重复前遍历所有 2ⁿ − 1 个非零状态的 LFSR——需要使用原始多项式作为反馈多项式。抽头位置对应于该多项式的非零系数。对于一个抽头位于 4 和 3 的 4 位 LFSR,其原始多项式为 x⁴ + x³ + 1,LFSR 会循环遍历全部 15 个非零状态。
这个计算器可以让你探索寄存器长度、种子、抽头位置和 LFSR 类型的任意组合。你可以通过结果中的周期来验证所选抽头是否生成最大长度序列——如果周期等于 2ⁿ − 1,这些抽头就构成了原始多项式。使用提供的示例,可以查看一些常见的最大长度配置。
LFSR 的应用遍及多个领域。在 Wi‑Fi 和 Bluetooth 中,LFSR 提供频率跳变和直接序列扩频所需的扩频码。在存储和通信中,CRC(循环冗余校验)电路通常用 LFSR 实现。在密码流密码中,LFSR 构成核心原语(不过现代密码会将多个 LFSR 与非线性组件结合,以抵抗线性密码分析)。在芯片测试中,基于 LFSR 的特征分析会把测试响应数据压缩成紧凑的签名。
LFSR 示例
展示最大长度序列和不同寄存器规模的常见 LFSR 配置。
| 配置 | 周期 | 说明 |
|---|---|---|
| 4-bit, seed=1000, taps=[4,3], Fibonacci | 15(最大长度) | 原始多项式 x⁴+x³+1。遍历全部 15 个非零 4 位状态。 |
| 8-bit, seed=10110001, taps=[8,6,5,4], Fibonacci | 255(最大长度) | 密码学应用中常用的标准 8 位 Fibonacci LFSR。 |
| 5-bit, seed=10101, taps=[5,3], Galois | 31(最大长度) | 内部反馈的 Galois LFSR,支持更快的并行 XOR 运算。 |
| 3-bit, seed=110, taps=[3,2], Fibonacci | 7(最大长度) | 简单的 3 位 LFSR,非常适合用于理解概念。 |
如何使用 LFSR 计算器
- 将寄存器长度设置为所需的位数(例如,4 表示 4 位 LFSR)。
- 输入初始种子,格式为与寄存器长度相同的二进制字符串(例如 1000)。不要使用全零状态——它会让 LFSR 卡死。
- 输入反馈抽头,使用逗号分隔的位置(例如 4, 3)。抽头位置从最左侧级开始计数,起始值为 1。
- 选择 LFSR 类型:Fibonacci(外部反馈)或 Galois(内部反馈)。
- 设置迭代次数,然后点击生成序列,即可查看每一步的输出位流和寄存器状态。
LFSR 计算器常见问题
什么是最大长度 LFSR?
最大长度 LFSR 会在重复前遍历所有 2ⁿ − 1 个可能的非零状态。这要求反馈多项式(由抽头位置定义)在 GF(2) 上是原始多项式。对于 4 位 LFSR,最大周期是 15;对于 8 位 LFSR,最大周期是 255。最大长度序列(称为 m 序列)具有很好的伪随机特性。
为什么要排除全零状态?
如果寄存器所有位都为 0,XOR 反馈永远只会得到 0,寄存器就会一直卡在全零状态。因此初始种子不能是全零。出于同样的原因,最大周期是 2ⁿ − 1,而不是 2ⁿ。
Fibonacci 和 Galois LFSR 有什么区别?
在 Fibonacci LFSR 中,反馈位由所有抽头位置 XOR 得到,并送入第一个级;其余级只是简单移位。在 Galois LFSR 中,反馈位会直接并行 XOR 到多个中间级。两者(在对应多项式相同的情况下)会产生相同的序列,但 Galois 在硬件中更快,因为 XOR 运算是并行的。
如何选择合适的抽头位置?
要得到最大长度序列,抽头位置必须对应 GF(2) 上的原始多项式。常见寄存器长度的原始多项式表已经广泛公开。例如,n=4 时,原始多项式 x⁴+x³+1 对应抽头 [4,3];n=8 时,多项式 x⁸+x⁶+x⁵+x⁴+1 对应抽头 [8,6,5,4]。
LFSR 序列是真随机吗?
不是——LFSR 序列是确定性的,只要知道种子和抽头位置就可以完全预测。它们之所以被称为伪随机,是因为它们能通过许多统计随机性测试,并且对于不了解配置的人来说看起来像随机数。用于密码学时,LFSR 必须与非线性组件结合,以抵抗线性密码分析。
什么是 CRC,它与 LFSR 有什么关系?
循环冗余校验(CRC)是一种错误检测码:它把消息多项式除以 GF(2) 上的生成多项式,并附加余数。这个除法过程等价于让消息位通过由生成多项式定义的 LFSR。标准 CRC-32 使用特定的 32 位原始多项式,其硬件实现就是一个 32 级 LFSR。