Operator Library: Base
PseudoRandomNumberGen 算子使用线性反馈移位寄存器 (LFSR) 生成 N 位随机数流。 这些 LFSR 会生成均匀分布的二进制随机序列。 在序列重复之前,随机序列的长度由反馈移位寄存器的寄存器数量决定。 32 位长度的 LFSR 将生成包含 2^32 - 2 个值的序列。 所实现的随机数生成器使用不同的 LFSR 在算子输出端生成 N 位随机数。 这增加了序列长度并避免了比特之间的相关性。 下图说明了伪随机数生成器的实现方式。

为了进一步提高 random 质量,LFSR 是自由运行的,并非由像素频率提供时钟源。 因此,结果的时序是非确定性的,真正的随机数被纳入了值的生成中, 从而极大地提高了 Quality。
在 applet 初始化时,LFSR 会使用种子进行预初始化。 该种子在 VisualApplets 中使用参数 Seed0、Seed1 和 Seed2 进行定义。 在实例化算子时,默认种子值将使用软件随机数生成器。
该算子支持不同的 Bit Width 和 Parallelism。 然而,对于高 Parallelism 和 Bit Width,需要更多的资源。 可以使用输出链路调整输出 Bit Width。
算子输入链路仅用于同步。 输入链路上的数据值不用于生成数据输出。
参数 Min_LFSR_Length 用于指定最短 LFSR 的长度。 每增加一个 LFSR,就会多添加一个寄存器级。 最大寄存器长度为 168。
要减少算子所需的资源,请减小参数 Min_LFSR_Length。 如果多个算子使用了相同的 Min_LFSR_Length,它们将生成相同的序列。 如果种子不同,生成的序列仍然相同,只是序列的起始点发生了变化。
伪随机数生成器永远无法生成真正的随机值。 由于高效的生成器实现以及非确定性时序的加入,生成的值的 Quality 非常高。 下面将展示对该生成器进行的两个测试的结果,以证明该实现的 Quality。
-
等分布测试:
生成一个 8 位随机值序列并确定其平均值。平均值应在 127.5 左右。根据线性反馈移位寄存器 (LFSR) 的理论,我们知道序列总是等分布的(除了所有寄存器中的值均为 0 的情况)。
如果查看生成值的直方图(例如在 microDisplay 中),可以看到均匀分布。

-
谱测试:
谱测试用于检验生成器的串行相关性。生成的序列中不应出现任何可见的规律。 表现较差的生成器会在二维或三维空间中显示出超平面。 VisualApplets 生成器不会显示任何超平面:


下一张图中展示了一个表现较差的生成器的示例。 它是著名的 RANDU 生成器,主要用于 C 编程语言中的 rand() 函数。

该算子可以在 VisualApplets 中完全进行仿真。 然而,非确定性的硬件实现无法在用于仿真的软件中实现。 因此,仿真中使用了质量较差的非常简单的随机数生成器(MS VisualStudio 的 rand() 函数)。 如果不更改种子,算子将始终生成相同的序列。
| Min_LFSR_Length | |
|---|---|
| 键入 | 静态参数 |
| 默认 | random |
| 范围 | [3, 168] |
|
此参数指定最短 LFSR 的长度。 较大的值会导致更高的资源消耗。 请注意以下约束:
|
|
| Seed0 | |
|---|---|
| 键入 | 静态/动态读写参数 |
| 默认 | random |
| 范围 | [0, 2^64 - 1] |
|
正如算子简介中所解释的那样,种子用于对 LFSR 进行预初始化。 在算子实例化时,这些值会使用软件生成的随机数进行初始化。 这些值可以在采集过程中更改。 当修改参数 Seed2 时,所有三个参数的值都会被锁存。 |
|
| Seed1 | |
|---|---|
| 键入 | 静态/动态读写参数 |
| 默认 | random |
| 范围 | [0, 2^64 - 1] |
|
正如算子简介中所解释的那样,种子用于对 LFSR 进行预初始化。 在算子实例化时,这些值会使用软件生成的随机数进行初始化。 这些值可以在采集过程中更改。 当修改参数 Seed2 时,所有三个参数的值都会被锁存。 |
|
| Seed2 | |
|---|---|
| 键入 | 静态/动态读写参数 |
| 默认 | random |
| 范围 | [0, 2^64 - 1] |
|
正如算子简介中所解释的那样,种子用于对 LFSR 进行预初始化。 在算子实例化时,这些值会使用软件生成的随机数进行初始化。 这些值可以在采集过程中更改。 当修改参数 Seed2 时,所有三个参数的值都会被锁存。 |
|
以下示例展示了 PseudoRandomNumberGen 算子的使用方法:




上一页

