Operator Library: Base
PseudoRandomNumberGen 運算子會使用線性回授移位暫存器 (LFSR) 來產生 N bit 亂數資料流。 這些 LFSR 會產生均勻分佈的二進位亂數序列。 亂數序列在重複之前其長度取決於回授移位暫存器的暫存器數量。 32 bit 長度的 LFSR 將會產生包含 2^32 - 2 個值的序列。 所實作的亂數產生器會使用不同的 LFSR,在運算子輸出端產生 N bit 亂數。 這會增加序列長度並避免位元之間的相關性。 下圖說明瞭虛擬亂數產生器的實作方式。

為了進一步提升亂數的 Quality,這些 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。
-
均勻分佈測試:
A sequence of 8 bit random values is generated and the mean value is determined. The mean value should be around 127.5. From theory of the LFSR we know that sequences are always equidistributed (except value 0 in all registers).
如果查看所產生數值的長條圖(例如在 microDisplay 中),即可看出均勻分佈的特性。

-
頻譜測試:
頻譜測試是用來檢測產生器的序列相關性。產生的序列中不應顯示任何圖案。 表現不佳的產生器會在二維或三維空間中顯示超平面。 VisualApplets 產生器不會顯示任何超平面:


下圖顯示了表現不佳的產生器範例。 這就是著名的 RANDU 產生器,主要用於 C 程式語言中的 rand() 函式。

此運算子可以在 VisualApplets 中進行完整模擬。 不過,模擬時無法在軟體中實作具備非確定性的硬體實作。 因此,模擬中會使用 Quality 較差且非常簡單的亂數產生器(MS VisualStudio 的 rand() 函式)。 如果未更改種子,運算子將一律產生相同的序列。
| Min_LFSR_Length | |
|---|---|
| Type | 靜態參數 |
| Default | random |
| Range | [3, 168] |
|
此參數會指定最短 LFSR 的長度。 較高的數值會導致較高的資源消耗。 請注意下列限制:
|
|
| Seed0 | |
|---|---|
| Type | static/dynamic 讀寫參數 |
| Default | random |
| Range | [0, 2^64 - 1] |
|
如運算子簡介中所述,種子是用來預先初始化 LFSR。 在運算子具現化時,這些值會使用軟體產生的亂數進行初始化。 這些值可以在擷取期間進行更改。 修改參數 Seed2 時,所有三個參數的值都會被鎖存。 |
|
| Seed1 | |
|---|---|
| Type | static/dynamic 讀寫參數 |
| Default | random |
| Range | [0, 2^64 - 1] |
|
如運算子簡介中所述,種子是用來預先初始化 LFSR。 在運算子具現化時,這些值會使用軟體產生的亂數進行初始化。 這些值可以在擷取期間進行更改。 修改參數 Seed2 時,所有三個參數的值都會被鎖存。 |
|
| Seed2 | |
|---|---|
| Type | static/dynamic 讀寫參數 |
| Default | random |
| Range | [0, 2^64 - 1] |
|
如運算子簡介中所述,種子是用來預先初始化 LFSR。 在運算子具現化時,這些值會使用軟體產生的亂數進行初始化。 這些值可以在擷取期間進行更改。 修改參數 Seed2 時,所有三個參數的值都會被鎖存。 |
|
以下範例展示了 PseudoRandomNumberGen operator 的使用方式:
-
'Synchronization、Base 和 Filter Library 中特定 operator 的功能範例'
範例 - operator 使用方式示範




上一頁

