0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用線性反饋移位寄存器生成偽隨機數

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-01-14 11:59 ? 次閱讀

線性反饋移位寄存器與完全描述它們的多項式一起引入。應用說明描述了如何實現它們以及可用于改善所生成數字的統(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還有幾本出版物描述了隨機數測試和對其他測試軟件的引用。

pYYBAGPCKJSAVzLZAAAQE_fBiik321.gif?imgver=1

圖1.LFSR 的簡化繪圖。

poYBAGPCKJeAOBLBAAAzdcgu_dg932.gif?imgver=1

圖2.實現 LFSR 的 C 代碼。

pYYBAGPCKJmAPir9AAATey2SWd8233.gif?imgver=1

圖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

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7559

    瀏覽量

    151480
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120437
收藏 人收藏

    評論

    相關推薦

    Matlab移位寄存器的實現

    反饋邏輯為 c0,c1,…,cn,則  {an}=c1an-1+c2an-2+…+cna0  只要反饋邏輯 ci 確定,寄存器產生的序列就確定了。n 級移位寄存器產生的
    發(fā)表于 06-20 04:20

    線性反饋移位寄存器(LFSR)在FPGA中究竟是如何起作用的

    的輸出用作反饋移位寄存器鏈的開頭,因此用作LFSR中的反饋。當LFSR運行時,各個觸發(fā)生成的模式是
    發(fā)表于 08-20 09:13

    學習筆記 | 基于FPGA的隨機數發(fā)生(附代碼)

    移位寄存器(Linear Feedback Shift Register, LFSR)來實現隨機數發(fā)生線性
    發(fā)表于 04-21 19:42

    隨機數發(fā)生的FPGA實現與研究

    摘要:在很多實際應用中,直接利用FPGA 產生隨機序列的方法可以為系統(tǒng)設計或測試帶來極大的便利。本文給出了基于線性反饋移位寄存器電路,并結
    發(fā)表于 07-22 15:12 ?0次下載

    線性移位寄存器

    線性移位寄存器移位寄存器可以構成序列信號發(fā)生,其電路結構如下圖所示。組合電路從移位寄存器取得信息,產生
    發(fā)表于 01-12 14:14 ?1978次閱讀
    <b class='flag-5'>線性</b><b class='flag-5'>移位寄存器</b>

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    發(fā)表于 03-08 14:50 ?1.8w次閱讀

    寄存器移位寄存器

    寄存器移位寄存器:介紹寄存器原理和移位寄存器的原理及實現。
    發(fā)表于 05-20 11:47 ?0次下載

    為max765x微處理隨機數生成程序

    擴頻通信、安全、加密和調制解調等應用需要隨機數的產生。實現一個隨機數發(fā)生的最常用的方法是一個線性反饋
    發(fā)表于 04-12 09:50 ?1次下載
    為max765x微處理<b class='flag-5'>器</b>的<b class='flag-5'>偽</b><b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>程序

    線性反饋移位寄存器原理與實現

    線性反饋移位寄存器(LFSR)是一個產生二進制位序列的機制。這個寄存器由一個初始化矢量設置的一系列信元組成,最常見的是,密鑰。這個寄存器的行
    發(fā)表于 12-22 09:37 ?4.9w次閱讀
    <b class='flag-5'>線性</b><b class='flag-5'>反饋</b><b class='flag-5'>移位寄存器</b>原理與實現

    基于matlab的移位寄存器法m序列的產生

    很多領域中都有重要應用。 由n級移位寄存器所能產生的周期最長的序列。這種序列必須由非線性移位寄存器產生,并且周期為2n(n為移位寄存器的級數)。
    發(fā)表于 12-22 11:14 ?1w次閱讀
    基于matlab的<b class='flag-5'>移位寄存器</b>法m序列的產生

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。本文主要介紹了
    發(fā)表于 12-22 15:49 ?2w次閱讀

    移位寄存器的原理

    移位寄存器按照不同的分類方法可以分為不同的類型。 如果按照移位寄存器移位方向來進行分類, 可以分為左移移位寄存器、移位寄存器和雙向
    發(fā)表于 07-15 09:38 ?7.5w次閱讀
    <b class='flag-5'>移位寄存器</b>的原理

    線性反饋移位寄存器原理

    線性反饋移位寄存器(LFSR):通常由移位寄存器和異或門邏輯組成。其主要應用在:隨機數,
    的頭像 發(fā)表于 07-22 09:37 ?4029次閱讀

    MAX765x微處理隨機數生成例程

    擴頻通信、安全、加密和調制解調等應用需要生成隨機數。實現隨機數發(fā)生的最常見方法是線性
    的頭像 發(fā)表于 03-01 15:28 ?664次閱讀
    MAX765x微處理<b class='flag-5'>器</b>的<b class='flag-5'>偽</b><b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>例程

    線性反饋移位寄存器輸出序列怎么算

    的工作原理、輸出序列的計算方法以及其在不同領域中的應用。 首先,我們來了解線性反饋移位寄存器的基本結構和工作原理。LFSR是一種特殊的移位寄存器,由多個觸發(fā)
    的頭像 發(fā)表于 02-03 11:09 ?2547次閱讀