LFSR如何在实际应用中用作PRNG?


8

我正在出于学习目的在软件中编程LFSR(线性反馈移位寄存器),并且在用作伪随机数生成器(PRNG)时遇到了一些限制。

  • 如果种子的“ 1”位很少且使用的抽头很少,则它需要很大的“启动时间”才能产生明显的随机输出,并且“ 1”和“ 0”之间的分布几乎相等,或者较短的“ 0”运行。我猜想用更多的水龙头,这样的启动会快得多,但是我发现所有预先计算的表都给出了两个或四个水龙头。
  • 顺序号是高度相关的,这是可以预期的,因为如果输出位为0,则下一个数字将是前一个的一半。对于带有抽头[15,14]的15位LFSR,在平面中绘制一对连续数字作为点可得出以下结果。理想的PRNG应该将这些点散布到整个地方。

图片

我知道LFSR被用作快速硬件计数器,但是我也已经看到它被用作PRNG来产生白噪声。如何在质量如此差的现实应用中使用它?


正如@rawbrawb指出的那样,LFSR对于生成伪随机数不是很好。如果仅将移位寄存器内容的一部分(例如,长度为32位的LFSR中的16个最低有效位)用作随机数,则情况会更糟。有关此问题的更多信息,请参见最近关于crypto.SE的问答
Dilip Sarwate

Answers:


4

PRNG的绝佳来源是Solomon Golomb的“移位寄存器序列”。它讨论了各种类和技术。

通过复位所有寄存器来启动是一种方法。或并行加载种子是另一个。但是请记住,全零的st是有效状态。

选择正确的代码很重要,因为并非移位寄存器上的每个反馈设置都能确保您获得最大的PRNG序列。

PRNG的操作方式会影响其性能。

对于15位寄存器并查找代码,[15,4]和[15,1]一样最大,但未列出[15,14]。->来源-“扩频系统和应用程序”-罗伯特·迪克森(Robert Dixon)第三版。第94页。这本书是有关实施的很好参考。

通常,LFSR会使PRNG变差,并且通常的做法是仅使用低位。或者,您可以生成两个不同长度和代码的PRNG,然后对低位进行异或运算以生成新代码。可能应使用少于位长度的1/2。因此,一个30位和31位的长度寄存器与15个LSB进行异或。

NIST 在这里有出色的测试代码。所以,对PRNG来说很糟糕。


如果您有一组丝锥[nbits, a, b, c],则另一套最大[nbits, nbits-a, nbits-b, nbits-c]。这样,[15,14]和[15,1]都是最大的。
布鲁诺·金

根据您的寄存器设置,全零或全无效是无效的。在我做的大多数事情中,全零都是无效的,但是您在上面指出了它的合法性,因此想确保将其丢弃。;)
Aaron D. Marasco 2013年

添加了有关如何获得更好性能的详细信息。但这做得不好。我在SSDS中使用了这些-自相关性质。我忘了双打。
占位符

对不同的LFSR进行XOR有趣的想法,但我想这些数字仍会相关。最好使用蒂姆的答案并在选择另一个数字之前执行一个完整的周期。
布鲁诺·金

@BrunoKim不是原始的,它具有更高的计算效率或面积效率。重复长度也将是2 ^ 30。
占位符

7

顺序号是高度相关的,这是可以预期的,因为如果输出位为0,则下一个数字将是前一个的一半。对于带有抽头[15,14]的15位LFSR,在平面中绘制一对连续数字作为点可得出以下结果。理想的PRNG应该将这些点散布到整个地方。

如果要使用15位LFSR生成随机数,则不必在每个时钟周期提取一个新的随机数。至于你说的,因为你只需要添加一个新的位寄存器每个时钟周期,在周期的价值NN+1将非常密切相关。如果要生成随机值(假设您有适当的抽头),则只需每15个时钟拉一个新值。

LFSR仅保证每个周期一个随机位,而不保证15个随机位。


1
我正在编码任意位数。通常,如果我想要一个随机整数(64位),我应该使用128位LFSR(遵循rawbrawb建议),并在选择一个数字之前进行64次迭代?会不会错过一些数字,而其他人会为“统一”发行选择的次数比预期的多吗?
布鲁诺·金

2

可以在《 MPC7450 RISC微处理器系列参考手册》中找到一个真实示例。7450使用的pRNG用于L2和L3替换,它由16个锁存器组成,具有三个简单的移位寄存器,分别具有位0至4,位5至9和位10至15。位0来自位4和15的XOR。位5来自位4和9的XOR,位10来自位6和15的XOR。8路高速缓存中的替换方式由L2的位4、9和15以及位0指示,L5和10。这些位在每个周期都移位,但是显然不经常发生高速缓存替换。(还提供了另一种基于计数器的替换机制。)

这被认为是潜在的问题:

由于L2缓存查找的延迟,在读取未命中和替换行的分配之间存在3个时钟周期。因此,有可能可以选择相同的方式来用上述算法替换两个,甚至三个连续的读取未命中。为了避免这种情况,实际算法会将所选的替换行与之前的三个替换行进行比较。如果所选行与前三个行中的一个匹配,则会将值1、2或3自动添加到用于选择替换方式的值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.