線性反饋移位寄存器與完全描述它們的多項(xiàng)式一起引入。應(yīng)用說明描述了如何實(shí)現(xiàn)它們以及可用于改善所生成數(shù)字的統(tǒng)計(jì)特性的技術(shù)。
介紹
LFSR(線性反饋移位寄存器)提供了一種在微控制器上快速生成非序列數(shù)字列表的簡單方法。生成偽隨機(jī)數(shù)只需要右移操作和 XOR 操作。圖 1 顯示了一個(gè) 5 位 LFSR。圖 2 顯示了 C 語言的 LFSR 實(shí)現(xiàn),圖 3 顯示了 8051 匯編中的 16 位 LFSR 實(shí)現(xiàn)。
LFSR和多項(xiàng)式
LFSR 完全由其多項(xiàng)式指定。例如,6千-次多項(xiàng)式與每個(gè)項(xiàng)存在用方程 x 表示6+ x5+ x4+ x3+ x2+ x + 1。有 2 個(gè)(6 - 1)= 32 個(gè)這種大小的不同可能多項(xiàng)式。與數(shù)字一樣,一些多項(xiàng)式是素?cái)?shù)或原始數(shù)。我們對(duì)原始多項(xiàng)式感興趣,因?yàn)樗鼈儠?huì)在移位時(shí)為我們提供最大長度周期。n 次的最大長度多項(xiàng)式將有 2n- 1個(gè)不同的州。每個(gè)班次后都會(huì)轉(zhuǎn)換到新狀態(tài)。因此,6千-次多項(xiàng)式將有 31 種不同的狀態(tài)。1 到 31 之間的每個(gè)數(shù)字在重復(fù)之前都會(huì)出現(xiàn)在移位寄存器中。在基元 6 的情況下千-次多項(xiàng)式,只有六個(gè)。表 1 列出了所有基元 6千-次多項(xiàng)式及其各自的多項(xiàng)式掩碼。多項(xiàng)式掩碼是通過采用多項(xiàng)式的二進(jìn)制表示并截?cái)嘧钣覀?cè)的位來創(chuàng)建的。掩碼用于實(shí)現(xiàn)多項(xiàng)式的代碼中。實(shí)現(xiàn) n 的多項(xiàng)式掩碼需要 n 位千-次多項(xiàng)式。
每個(gè)基元多項(xiàng)式都有奇數(shù)項(xiàng),這意味著基元多項(xiàng)式的每個(gè)掩碼都有一個(gè)偶數(shù) 1 位。每個(gè)原始多項(xiàng)式還定義了第二個(gè)原始多項(xiàng)式,即它的對(duì)偶。可以通過從每項(xiàng)的多項(xiàng)式次數(shù)中減去指數(shù)來找到對(duì)偶。例如,給定 6千-次多項(xiàng)式,x6+ x + 1,它的對(duì)偶是 x6-6+ x6-1+ x6-0,等于 x6+ x5+ 1.在表 1 中,多項(xiàng)式 1 和 2、3 和 4、5 和 6 是彼此的對(duì)偶。
表 2 列出了每個(gè)不同大小多項(xiàng)式的周期以及每個(gè)大小存在的基元多項(xiàng)式的數(shù)量。表 3 列出了每個(gè)不同大小的多項(xiàng)式的一個(gè)多項(xiàng)式掩碼。它還顯示了當(dāng) LFSR 初始化為 1 時(shí),LFSR 在連續(xù)班次后將保持的前四個(gè)值。此表應(yīng)有助于確保實(shí)現(xiàn)正確。
LFSR的結(jié)構(gòu)
LFSR 的值永遠(yuǎn)不會(huì)為零,因?yàn)闅w零的 LFSR 的每個(gè)偏移都會(huì)將其保留為零。LFSR 必須初始化,即種子,為非零值。當(dāng) LFSR 保持 1 并移動(dòng)一次時(shí),其值將始終為多項(xiàng)式掩碼的值。當(dāng)寄存器除最高有效位外全部為零時(shí),接下來的幾個(gè)偏移將顯示高位偏移到零填充的低位。例如,任何具有基元多項(xiàng)式的 8 位移位寄存器最終將生成序列 0x80、0x40、0x20、0x10、8、4、2、1,然后生成多項(xiàng)式掩碼。
使用 LFSR 生成偽隨機(jī)數(shù)
一般來說,基本的LFSR不會(huì)產(chǎn)生非常好的隨機(jī)數(shù)。通過選擇較大的LFSR并使用較低的位作為隨機(jī)數(shù),可以改進(jìn)更好的數(shù)字序列。例如,如果您有一個(gè) 10 位 LFSR 并且想要一個(gè) 8 位數(shù)字,則可以將寄存器底部的 8 位作為您的號(hào)碼。使用此方法,您將看到每個(gè) 8 位數(shù)字四次和零,三次,然后 LFSR 完成一個(gè)周期并重復(fù)。這解決了得到零的問題,但數(shù)字仍然沒有表現(xiàn)出非常好的統(tǒng)計(jì)特性。相反,您可以將 LFSR 的子集用于隨機(jī)數(shù),以增加數(shù)字的排列并改善 LFSR 輸出的隨機(jī)屬性。
在獲得隨機(jī)數(shù)之前多次移動(dòng)LFSR也可以改善其統(tǒng)計(jì)特性。將LFSR移動(dòng)其周期的一個(gè)因子將使總周期長度減少該因子。表2列出了各期間的因素。
LFSR 相對(duì)較短的周期可以通過將兩個(gè)或多個(gè)不同大小的 LFSR 的值異或相處來解決。這些異或LFSR的新周期將是周期的LCM(最小公倍數(shù))。例如,基元 4 位和基元 6 位 LFSR 的 LCM 是 LCM(15, 63),即 315。以這種方式加入 LFSR 時(shí),請(qǐng)確保僅使用最小位數(shù)的 LFSR;使用少于此量是更好的做法。對(duì)于 4 位和 6 位 LFSR,不應(yīng)使用超過底部的 4 位。在圖 2 中,底部的 16 位用于 32 位和 31 位 LFSR。 請(qǐng)注意,對(duì)兩個(gè)相同大小的 LFSR 進(jìn)行異或運(yùn)算不會(huì)增加周期。
LFSR的不可預(yù)測性可以通過用反饋項(xiàng)對(duì)一點(diǎn)“熵”進(jìn)行異或來增加。這樣做時(shí)應(yīng)該小心——加上熵位,LFSR 到所有零的可能性很小。如果定期添加熵,LFSR 的歸零將自行校正。這種與反饋項(xiàng)進(jìn)行異或的方法就是CRC(循環(huán)冗余校驗(yàn))的計(jì)算方式。
多項(xiàng)式不是生而相等的。有些多項(xiàng)式肯定會(huì)比其他多項(xiàng)式更好。表 2 列出了可用于最大 31 位大小的基元多項(xiàng)式的數(shù)量。嘗試不同的多項(xiàng)式,直到找到滿足您需求的多項(xiàng)式。表3中給出的掩模是隨機(jī)選擇的。
可以使用NIST的統(tǒng)計(jì)測試套件進(jìn)行更廣泛的測試。NIST還有幾本出版物描述了隨機(jī)數(shù)測試和對(duì)其他測試軟件的引用。
圖1.LFSR 的簡化繪圖。
圖2.實(shí)現(xiàn) LFSR 的 C 代碼。
圖3.8051匯編代碼,用于實(shí)現(xiàn)掩碼為0D295h的16位LFSR。
不可約多項(xiàng)式 | 二進(jìn)制形式 | 二進(jìn)制掩碼 | 面具 | |
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 |
度 | 時(shí)期 | 時(shí)期因素 | 不。這種次數(shù)的原始多項(xiàng)式 |
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中的前四個(gè)值 | |||
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 |
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7658瀏覽量
152177 -
寄存器
+關(guān)注
關(guān)注
31文章
5369瀏覽量
121265
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Matlab移位寄存器的實(shí)現(xiàn)
線性反饋移位寄存器(LFSR)在FPGA中究竟是如何起作用的
學(xué)習(xí)筆記 | 基于FPGA的偽隨機(jī)數(shù)發(fā)生器(附代碼)
偽隨機(jī)數(shù)發(fā)生器的FPGA實(shí)現(xiàn)與研究
線性移位寄存器
![<b class='flag-5'>線性</b><b class='flag-5'>移位寄存器</b>](https://file1.elecfans.com//web2/M00/A5/70/wKgZomUMOHCADqSRAABmpPg07zU349.jpg)
為max765x微處理器的偽隨機(jī)數(shù)生成程序
![為max765x微處理<b class='flag-5'>器</b>的<b class='flag-5'>偽</b><b class='flag-5'>隨機(jī)數(shù)</b><b class='flag-5'>生成</b>程序](https://file.elecfans.com/web2/M00/49/83/pYYBAGKhtFmAdYXQAAAM6EdGEGQ119.jpg)
線性反饋移位寄存器原理與實(shí)現(xiàn)
![<b class='flag-5'>線性</b><b class='flag-5'>反饋</b><b class='flag-5'>移位寄存器</b>原理與實(shí)現(xiàn)](https://file1.elecfans.com//web2/M00/A7/1A/wKgZomUMQmiAfPsUAAA9YoRU-XU460.png)
基于matlab的移位寄存器法m序列的產(chǎn)生
![基于matlab的<b class='flag-5'>移位寄存器</b>法m序列的產(chǎn)生](https://file1.elecfans.com//web2/M00/A7/1B/wKgZomUMQmuAc8u3AAAcswkGrBU369.png)
移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途
移位寄存器的原理
![<b class='flag-5'>移位寄存器</b>的原理](https://file.elecfans.com/web1/M00/9C/EF/pIYBAF0r2QWADMtdAADfluIizfg233.png)
線性反饋移位寄存器原理
MAX765x微處理器的偽隨機(jī)數(shù)生成例程
![MAX765x微處理<b class='flag-5'>器</b>的<b class='flag-5'>偽</b><b class='flag-5'>隨機(jī)數(shù)</b><b class='flag-5'>生成</b>例程](https://file.elecfans.com//web2/M00/94/AD/poYBAGP-_rOAWarmAAAViuADkfo522.gif)
評(píng)論