線性反饋移位暫存器與梅森旋轉演算法

2021-09-08 10:20:56 字數 2305 閱讀 3442

今天主要是來研究梅森旋轉演算法,它是用來產生偽隨機數的,實際上產生偽隨機數的方法有非常多種,比方線性同餘法,

平方取中法等等。可是這些方法產生的隨機數質量往往不是非常高,而今天介紹的梅森旋轉演算法能夠產生高質量的偽隨

機數,而且效率高效,彌補了傳統偽隨機數生成器的不足。梅森旋轉演算法的最長週期取自乙個梅森素數

此命名為梅森旋轉演算法。常見的兩種為基於32位的mt19937-32和基於64位的mt19937-64

因為梅森旋轉演算法是利用線性反饋移位暫存器(lfsr)產生隨機數的,所以我們先來認識線性反饋移位暫存器

首先,移位暫存器包含兩個部分

(1)級,每一級包括乙個位元,比方11010110是乙個8級的移位暫存器產生的

(2)反饋函式,線性反饋移位暫存器的反饋函式是線性的,非線性反饋移位暫存器的反饋函式是非線性的

乙個際上就是這個

饋函式之後,把這個移位暫存器的每次向右移動一位,把最右端的作為輸出,把「某些位」的異或結果作為輸入放到最

左端的那位,這樣全部的輸出相應乙個序列,這個序列叫做m序列,是最長線性移位暫存器序列的簡稱。

上面「某些位」的選取問題還沒有解決,那麼應該選取哪些位來進行異或才幹保證最長週期為

的問題。選取的「某些位」構成的序列叫做抽頭序列,理論表明,要使lfsr得到最長的週期,這個抽頭序列構成的多

項式加1必須是乙個本原多項式,也就是說這個多項式不可約,比方

以下以乙個4位的線性反饋移位暫存器為例說明它的工作原理。

假設1 0 0 0,反饋函式選取

能夠看出周長為15。在這乙個週期裡面涵蓋了開區間

的隨機性。

之前說過,梅森旋轉演算法的週期為19937級的線性反饋移位暫存器,實際上基於32

mt19937-32僅僅須要用到32位,那麼為什麼要選擇周長為

梅森旋轉演算法是基於線性反饋移位暫存器的一直進行移位旋轉,週期為乙個梅森素數

**:

#include #include #include #include using namespace std;

bool isinit;

int index;

int mt[624]; //624 * 32 - 31 = 19937

void srand(int seed)

}void generate()

}int rand()

int main()

cout<

實際上在非常多語言中的隨機數函式都已經採用了梅森旋轉法實現,比方python中的隨機數模組random就是採用了梅

森旋轉演算法來產生偽隨機數列,c++11中也有梅森旋轉演算法實現的隨機數生成器。

梅森旋轉演算法在資訊指紋技術中的應用

是把每個**隨機地對映到128位二進位制,這樣每個**僅僅占用16個位元組的空間,這個128位的隨機數就是這個

**的資訊指紋,能夠證明,僅僅要產生的隨機數足夠好,那麼就能夠保證差點兒不可能有兩個**的資訊指紋同樣,就

如同不可能有兩個人的指紋同樣一樣,而梅森旋轉演算法是產生高質量偽隨機數的演算法。

線性反饋移位暫存器(LFSR)實現

線性反饋移位暫存器 移位暫存器 組合邏輯反饋 用處 產生偽隨機序列 資料壓縮 計數器 資料編碼解碼等等 好處 具有速度和面積優勢 特點 產生偽隨機序列的最大長度 2 n 1 種類 one to many many to one 最大 的線性反饋移位暫存器 最大是指能產生的偽隨機序列長度最長 乙個d觸...

移位暫存器示例

這裡的移位暫存器不是簡單的向左移位將序列輸入轉換為並行輸出,而且要保留最後乙個週期的輸入數作為下一次輸出的最高位,如下所示 module shift reg clk,rst,din,dout ordy input clk input rst input 7 0 din output 31 0 dou...

左移暫存器vhdl 移位暫存器的VHDL設計

系部 計算機與資訊工程系 班級學號 姓名課程名稱 pld原理與應用 實驗日期 2012.10.31 實驗名稱 實驗三移位暫存器的 vhdl 設計成績 實驗目的 建立乙個移位模式可控的 位移位暫存器。練習建立工程 檔案 實體 結構體的建立,編譯 修改 實驗條件 裝有quartus 軟體的電腦 實驗內容...