線性反饋移位寄存器與完全描述它們的多項式一起引入。應用說明描述了如何實現它們以及可用于改善所生成數字的統(tǒng)計特性的技術。
介紹
LFSR(線性反饋移位寄存器)提供了一種在微控制器上快速生成非序列數字列表的簡單方法。生成偽隨機數只需要右移操作和 XOR 操作。圖 1 顯示了一個 5 位 LFSR。圖 2 顯示了 C 語言的 LFSR 實現,圖 3 顯示了 8051 匯編中的 16 位 LFSR 實現。
LFSR和多項式
LFSR 完全由其多項式指定。例如,6千-次多項式與每個項存在用方程 x 表示6+ x5+ x4+ x3+ x2+ x + 1。有 2 個(6 - 1)= 32 個這種大小的不同可能多項式。與數字一樣,一些多項式是素數或原始數。我們對原始多項式感興趣,因為它們會在移位時為我們提供最大長度周期。n 次的最大長度多項式將有 2n- 1個不同的州。每個班次后都會轉換到新狀態(tài)。因此,6千-次多項式將有 31 種不同的狀態(tài)。1 到 31 之間的每個數字在重復之前都會出現在移位寄存器中。在基元 6 的情況下千-次多項式,只有六個。表 1 列出了所有基元 6千-次多項式及其各自的多項式掩碼。多項式掩碼是通過采用多項式的二進制表示并截斷最右側的位來創(chuàng)建的。掩碼用于實現多項式的代碼中。實現 n 的多項式掩碼需要 n 位千-次多項式。
每個基元多項式都有奇數項,這意味著基元多項式的每個掩碼都有一個偶數 1 位。每個原始多項式還定義了第二個原始多項式,即它的對偶??梢酝ㄟ^從每項的多項式次數中減去指數來找到對偶。例如,給定 6千-次多項式,x6+ x + 1,它的對偶是 x6-6+ x6-1+ x6-0,等于 x6+ x5+ 1.在表 1 中,多項式 1 和 2、3 和 4、5 和 6 是彼此的對偶。
表 2 列出了每個不同大小多項式的周期以及每個大小存在的基元多項式的數量。表 3 列出了每個不同大小的多項式的一個多項式掩碼。它還顯示了當 LFSR 初始化為 1 時,LFSR 在連續(xù)班次后將保持的前四個值。此表應有助于確保實現正確。
LFSR的結構
LFSR 的值永遠不會為零,因為歸零的 LFSR 的每個偏移都會將其保留為零。LFSR 必須初始化,即種子,為非零值。當 LFSR 保持 1 并移動一次時,其值將始終為多項式掩碼的值。當寄存器除最高有效位外全部為零時,接下來的幾個偏移將顯示高位偏移到零填充的低位。例如,任何具有基元多項式的 8 位移位寄存器最終將生成序列 0x80、0x40、0x20、0x10、8、4、2、1,然后生成多項式掩碼。
使用 LFSR 生成偽隨機數
一般來說,基本的LFSR不會產生非常好的隨機數。通過選擇較大的LFSR并使用較低的位作為隨機數,可以改進更好的數字序列。例如,如果您有一個 10 位 LFSR 并且想要一個 8 位數字,則可以將寄存器底部的 8 位作為您的號碼。使用此方法,您將看到每個 8 位數字四次和零,三次,然后 LFSR 完成一個周期并重復。這解決了得到零的問題,但數字仍然沒有表現出非常好的統(tǒng)計特性。相反,您可以將 LFSR 的子集用于隨機數,以增加數字的排列并改善 LFSR 輸出的隨機屬性。
在獲得隨機數之前多次移動LFSR也可以改善其統(tǒng)計特性。將LFSR移動其周期的一個因子將使總周期長度減少該因子。表2列出了各期間的因素。
LFSR 相對較短的周期可以通過將兩個或多個不同大小的 LFSR 的值異或相處來解決。這些異或LFSR的新周期將是周期的LCM(最小公倍數)。例如,基元 4 位和基元 6 位 LFSR 的 LCM 是 LCM(15, 63),即 315。以這種方式加入 LFSR 時,請確保僅使用最小位數的 LFSR;使用少于此量是更好的做法。對于 4 位和 6 位 LFSR,不應使用超過底部的 4 位。在圖 2 中,底部的 16 位用于 32 位和 31 位 LFSR。 請注意,對兩個相同大小的 LFSR 進行異或運算不會增加周期。
LFSR的不可預測性可以通過用反饋項對一點“熵”進行異或來增加。這樣做時應該小心——加上熵位,LFSR 到所有零的可能性很小。如果定期添加熵,LFSR 的歸零將自行校正。這種與反饋項進行異或的方法就是CRC(循環(huán)冗余校驗)的計算方式。
多項式不是生而相等的。有些多項式肯定會比其他多項式更好。表 2 列出了可用于最大 31 位大小的基元多項式的數量。嘗試不同的多項式,直到找到滿足您需求的多項式。表3中給出的掩模是隨機選擇的。
可以使用NIST的統(tǒng)計測試套件進行更廣泛的測試。NIST還有幾本出版物描述了隨機數測試和對其他測試軟件的引用。
圖1.LFSR 的簡化繪圖。
圖2.實現 LFSR 的 C 代碼。
圖3.8051匯編代碼,用于實現掩碼為0D295h的16位LFSR。
不可約多項式 | 二進制形式 | 二進制掩碼 | 面具 | |
1 | x6 + x + 1 | 1000011b | 100001b | 0x21 |
2 | x6 + x5 + 1 | 1100001b | 110000b | 0x30 |
3 | x6 + x5 + x2 + x + 1 | 1100111b | 110011b | 0x33 |
4 | x6 + x5 + x4 + x + 1 | 1110011b | 111001b | 0x39 |
5 | x6 + x5 + x3 + x2 + 1 | 1101101b | 110110b | 0x36 |
6 | x6 + x4 + x3 + x + 1 | 1011011b | 101101b | 0x2D |
度 | 時期 | 時期因素 | 不。這種次數的原始多項式 |
3 | 7 | 7 | 2 |
4 | 15 | 3, 5 | 2 |
5 | 31 | 31 | 6 |
6 | 63 | 3, 3, 7 | 6 |
7 | 127 | 127 | 18 |
8 | 255 | 3, 5, 17 | 16 |
9 | 511 | 7, 73 | 48 |
10 | 1,023 | 3, 11, 31 | 60 |
11 | 2,047 | 23, 89 | 176 |
12 | 4,095 | 3, 3, 5, 7, 13 | 144 |
13 | 8,191 | 8191 | 630 |
14 | 16,383 | 3, 43, 127 | 756 |
15 | 32,767 | 7, 31, 151 | 1,800 |
16 | 65,535 | 3, 5, 17, 257 | 2,048 |
17 | 131,071 | 131071 | 7,710 |
18 | 262,143 | 3, 3, 3, 7, 19, 73 | 7,776 |
19 | 524,287 | 524287 | 27,594 |
20 | 1,048,575 | 3, 5, 5, 11, 31, 41 | 24,000 |
21 | 2,097,151 | 7, 7, 127, 337 | 84,672 |
22 | 4,194,303 | 3, 23, 89, 683 | 120,032 |
23 | 8,388,607 | 47, 178481 | 356,960 |
24 | 16,777,215 | 3, 3, 5, 7, 13, 17, 241 | 276,480 |
25 | 33,554,431 | 31, 601, 1801 | 1,296,000 |
26 | 67,108,863 | 3, 2731, 8191 | 1,719,900 |
27 | 134,217,727 | 7, 73, 262657 | 4,202,496 |
28 | 268,435,455 | 3, 5 29, 43, 113, 127 | 4,741,632 |
29 | 536,870,911 | 233, 1103, 2089 | 18,407,808 |
30 | 1,073,741,823 | 3, 3, 7, 11, 31, 151, 331 | 17,820,000 |
31 | 2,147,483,647 | 2147483647 | 69,273,666 |
32 | 4,294,967,29 | 3, 5, 17, 257, 65537 | 不可用 |
度 | 典型面罩 | 連續(xù)班次后LFSR中的前四個值 | |||
3 | 0x5 | 0x5 | 0x7 | 0x6 | 0x3 |
4 | 0x9 | 0x9 | 0xD | 0xF | 0xE |
5 | 0x1D | 0x1D | 0x13 | 0x14 | 0xA |
6 | 0x36 | 0x36 | 0x1B | 0x3B | 0x2B |
7 | 0x69 | 0x69 | 0x5D | 0x47 | 0x4A |
8 | 0xA6 | 0xA6 | 0x53 | 0x8F | 0xE1 |
9 | 0x17C | 0x17C | 0xBE | 0x5F | 0x153 |
10 | 0x32D | 0x32D | 0x2BB | 0x270 | 0x138 |
11 | 0x4F2 | 0x4F2 | 0x279 | 0x5CE | 0x2E7 |
12 | 0xD34 | 0xD34 | 0x69A | 0x34D | 0xC92 |
13 | 0x1349 | 0x1349 | 0x1AED | 0x1E3F | 0x1C56 |
14 | 0x2532 | 0x2532 | 0x1299 | 0x2C7E | 0x163F |
15 | 0x6699 | 0x6699 | 0x55D5 | 0x4C73 | 0x40A0 |
16 | 0xD295 | 0xD295 | 0xBBDF | 0x8F7A | 0x47BD |
17 | 0x12933 | 0x12933 | 0x1BDAA | 0xDED5 | 0x14659 |
18 | 0x2C93E | 0x2C93E | 0x1649F | 0x27B71 | 0x3F486 |
19 | 0x593CA | 0x593CA | 0x2C9E5 | 0x4F738 | 0x27B9C |
20 | 0xAFF95 | 0xAFF95 | 0xF805F | 0xD3FBA | 0x69FDD |
21 | 0x12B6BC | 0x12B6BC | 0x95B5E | 0x4ADAF | 0x10E06B |
22 | 0x2E652E | 0x2E652E | 0x173297 | 0x25FC65 | 0x3C9B1C |
23 | 0x5373D6 | 0x5373D6 | 0x29B9EB | 0x47AF23 | 0x70A447 |
24 | 0x9CCDAE | 0x9CCDAE | 0x4E66D7 | 0xBBFEC5 | 0xC132CC |
25 | 0x12BA74D | 0x12BA74D | 0x1BE74EB | 0x1F49D38 | 0xFA4E9C |
26 | 0x36CD5A7 | 0x36CD5A7 | 0x2DABF74 | 0x16D5FBA | 0xB6AFDD |
27 | 0x4E5D793 | 0x4E5D793 | 0x6973C5A | 0x34B9E2D | 0x5401885 |
28 | 0xF5CDE95 | 0xF5CDE95 | 0x8F2B1DF | 0xB25867A | 0x592C33D |
29 | 0x1A4E6FF2 | 0x1A4E6FF2 | 0xD2737F9 | 0x1CDDF40E | 0xE6EFA07 |
30 | 0x29D1E9EB | 0x29D1E9EB | 0x3D391D1E | 0x1E9C8E8F | 0x269FAEAC |
31 | 0x7A5BC2E3 | 0x7A5BC2E3 | 0x47762392 | 0x23BB11C9 | 0x6B864A07 |
32 | 0xB4BCD35C | 0xB4BCD35C | 0x5A5E69AE | 0x2D2F34D7 | 0xA22B4937 |
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7559瀏覽量
151480 -
寄存器
+關注
關注
31文章
5343瀏覽量
120437
發(fā)布評論請先 登錄
相關推薦
評論