线性移位寄存器实现产生伪随机数M序列
- 格式:doc
- 大小:87.00 KB
- 文档页数:7
m序列辨识原理解释说明以及概述1. 引言1.1 概述m序列是一种具有良好性质的伪随机序列,广泛应用于通信、密码学和编码等领域。
m序列辨识原理是指通过对已知的m序列进行分析和处理,从中提取特征并判断其生成方式的过程。
准确地辨识出m序列的生成方法能够帮助我们更好地理解和应用这一伪随机序列。
1.2 文章结构本文将围绕m序列辨识原理展开详细说明,并介绍相关的定义、特点、辨识过程以及算法和技术。
文章将分为五个部分组成:引言、m序列的定义和特点、m序列辨识原理与过程、m序列辨识算法与技术以及结论。
1.3 目的本文旨在通过对m序列辨识原理的深入研究和分析,进一步探索该领域内的关键概念、方法和工具,并提供给读者一个清晰全面的认识。
通过阅读本文,读者将能够了解什么是m序列以及其在实际应用中所起到的重要作用。
另外,通过对不同辨识算法和技术的比较与选择指南,本文还可为读者提供一些实用性的建议和参考。
最后,本文也将以对未来m序列研究方向的建议,为该领域内进一步研究工作提供一定的借鉴和指导。
这样设计文章结构,能够使读者逐步深入了解m序列辨识原理,并全面回顾相关概念、方法和技术,并为进一步探索和应用m序列提供指导。
2. m序列的定义和特点:2.1 m序列的概念和起源:m序列是一种特殊的二进制序列,也被称为最长线性反馈移位寄存器(LFSR)序列。
它是由一个长度为m的线性反馈移位寄存器生成的序列,在信息科学和通信领域有广泛应用。
m序列最早由亚当斯(J. W. Adams)于1965年引入。
2.2 m序列的生成方法:m序列可通过使用线性反馈移位寄存器(LFSR)来生成。
LFSR是一种采用线性组合和位移操作产生下一个状态的寄存器。
它由一系列触发器组成,每个触发器都保存一个二进制值,并且输出总是满足某个线性方程式。
在生成m序列时,通常会选择长度为m-1或m的LFSR作为产生器。
这样可以保证生成的序列具有周期性,且周期长度为(2^m) - 1。
伪随机序列可由线性移位寄存器网络产生。
该网络由r级串联的双态器件,移位脉冲产生器和模2加法器组成,下面以4级移位寄存器为例,说明伪随机序列的产生。
规定移位寄存器的状态是各级从右至左的顺序排列而成的序列,这样的状态叫正状态或简称状态。
反之,称移位寄存器状态是各级从左至右的次序排列而成的序列叫反状态。
例如,初始状态是0001,那么an-4=0,an-3=0,an-2=0,an-1=1。
如果反馈逻辑为an= an-3⊕an-4,对于初始状态为0001,经过一个时钟节拍后,各级状态自左向右移到下一级,未级输出一位数,与此同时模2加法器输出值加到移位寄存器第一级,从而形成移位寄存器的新状态,下一个时钟节拍到来又继续上述过程。
未级输出序列就是伪随机序列。
其产生的伪随机序列为an=100110101111000100110101111000…,这是一个周期为15的周期序列。
改变反馈逻辑的位置及数量还可以得到更多不同的序列输出。
从上述例子可以得到下列结论:1、线性移位寄存器的输出序列是一个周期序列。
2、当初始状态是0状态时,线性移位寄存器的输出全0序列。
3、级数相同的线性移位寄存器的输出序列和反馈逻辑有关。
4、同一个线性移位寄存器的输出序列还和起始状态有关。
5、对于级数为r的线性移位寄存器,当周期p=2r-1时,改变移位寄存器初始状态只改变序列的初相。
这样的序列称为最大长度序列或m序列。
module M15Serial(input c_clk,input iN_rst,output o_ser);reg [3:0]flow = 4'b0001;assign o_ser = flow[0];always@(posedge c_clk or negedge iN_rst) beginif(~iN_rst)flow <= 4'b0001;elsebeginflow[3:1] <= flow[2:0];flow[0] <= flow[3] ^ flow[2];endendendmodule//output o_ser 是序列输出。
m-M 文档1 相关概念随机序列:可以预先确定又不能重复实现的序列 伪随机序列:具有随机特性,貌似随机序列的确定序列。
n 级线性移位寄存器,能产生的最大可能周期是21n p =-的序列,这样的序列称为m 序列。
n 级非线性移位寄存器,能产生的最大周期是2n 的序列,这样的序列称为M 序列。
图1线性移位寄存器线性移位寄存器递推公式11221101nn n n n n in ii a c a c a c a c a c a----==++++=∑线性移位寄存器的特征方程式010()nnin ii f x c c x c x c x==+++=∑ ,ci 取值为0或1定义 若一个n 次多项式f (x )满足下列条件:(1) f (x )为既约多项式(即不能分解因式的多项式); (2) f (x )可整除(x p +1), p =2n -1; (3) f (x )除不尽(x q+1), q <p 。
则称f (x )为本原多项式。
定理 线性反馈移位寄存器能产生m 序列的充要条件为:反馈移位寄存器的特征多项式为本原多项式。
2 (2)GF 上本原多项式的实现算法 2.1二元域(2)GF 上的本原多项式由于产生伪随机序列的反馈移位寄存器,其特征多项式系数C i 的取值为0或1,因此所寻找的本原多项式为(2)GF 上的多项式。
在二元域内不可以分解因式的多项式称为既约多项式,和普通代数一样,对于多项式()0f α=,则称α为多项式的根。
输出a k由抽象代数理论可以证明,若α是n 次本原多项式()f x 的根,则集合22{0,1,}nF α-= 可构成一个有限的扩域(2)n G F 。
F 中的任一元素都可表示为1110n n a a a αα--+++ ,这样n 个分量的有序序列110(,,,)n a a a - 就可表示F 中的任一元素。
若既约多项式()f x 的根能够形成扩域(2)n G F ,则该多项式是本原多项式,否则不是本原多项式。
2.4 m序列产生器的设计原理m序列是最长线性反馈移位寄存器序列,其产生方法比较简单,可以通过移位寄存器的级联实现任意m序列,本文是结合FPGA芯片的结构特点,以Altera 的QuartusⅡ软件为开发平台,设计出了m序列产生器。
通过FPGA平台,我们可以采用硬件描述语言VHDL语言来实现m序列产生器,也可以通过输入原理图来实现m序列产生器,也可以通过两者的结合来实现m序列产生器。
由于m 序列产生器的实现方法已经能够成熟,本文采用输入原理图的方法实现m 序列产生器的仿真设计。
利用n级移位寄存器可以产生长度为2n-1的m序列。
m序列的设计主要解决的问题是寻求系统的特征多项式为本原多项式的过程,部分本原多项式可以通过查表方法很方便的得到。
本文通过设计一个码长为L=31的m序列,来说明任意m序列产生器如何进行仿真设计。
由码长为31可知道所需的移位寄存器的数目为5,特征多项式的系数通过查表可以选择为100101,110111,111101三个反馈系数,可以从中选择100101来构成m序列产生器。
则特征多项式系数取值为C 5=C2=C=1,C4=C3=C1=0.根据特征多项式就可以构造出该m序列,图5就是L=31的m序列产生器的原理图。
图5 L=31的m序列产生器图5利用D触发器级联的方式完成移位寄存器的功能, CLRN是清零信号,低电平有效。
在系统初始时,CLRN置低电平使系统清零,D触发器的输出状态均为低电平,当CLRN置高时新非零值被置入。
CLK为外界时钟脉冲信号,当CLK 上升沿来临时实现移位功能。
通过异或门将反馈接入系统的输入端,反馈系数根据特征多项式的系数来断定是否接入反馈,在模2加后面加入一个非门,避免了m序列产生器输出静止的状态,如不加非门直接接入反馈到输入端,系统无法自动运动起来,造成输出序列进入了全“1”的静止状态,这样就无法产生m序列。
图中的Q1-Q5是五个D触发器的输出,这些点均可得到同宗序列,只序列的初始相位不同而已。
m-M 文档1 相关概念随机序列:可以预先确定又不能重复实现的序列 伪随机序列:具有随机特性,貌似随机序列的确定序列。
n 级线性移位寄存器,能产生的最大可能周期是21n p =-的序列,这样的序列称为m 序列。
n 级非线性移位寄存器,能产生的最大周期是2n 的序列,这样的序列称为M 序列。
图1线性移位寄存器线性移位寄存器递推公式11221101nn n n n n in ii a c a c a c a c a c a----==++++=∑线性移位寄存器的特征方程式010()nnin ii f x c c x c x c x==+++=∑ ,ci 取值为0或1定义 若一个n 次多项式f (x )满足下列条件:(1) f (x )为既约多项式(即不能分解因式的多项式); (2) f (x )可整除(x p +1), p =2n -1; (3) f (x )除不尽(x q+1), q <p 。
则称f (x )为本原多项式。
定理 线性反馈移位寄存器能产生m 序列的充要条件为:反馈移位寄存器的特征多项式为本原多项式。
2 (2)GF 上本原多项式的实现算法 2.1二元域(2)GF 上的本原多项式由于产生伪随机序列的反馈移位寄存器,其特征多项式系数C i 的取值为0或1,因此所寻找的本原多项式为(2)GF 上的多项式。
在二元域内不可以分解因式的多项式称为既约多项式,和普通代数一样,对于多项式()0f α=,则称α为多项式的根。
输出a k由抽象代数理论可以证明,若α是n 次本原多项式()f x 的根,则集合22{0,1,}nF α-= 可构成一个有限的扩域(2)n G F 。
F 中的任一元素都可表示为1110n n a a a αα--+++ ,这样n 个分量的有序序列110(,,,)n a a a - 就可表示F 中的任一元素。
若既约多项式()f x 的根能够形成扩域(2)n G F ,则该多项式是本原多项式,否则不是本原多项式。
伪随机码的原理与应用1. 什么是伪随机码?伪随机码(Pseudorandom code)是一种非真随机生成的代码,通常由伪随机序列生成器生成。
它不是通过真正的随机过程产生的,而是使用算法生成的,因此被称为伪随机码。
伪随机码具有类似于真随机码的统计特性,但是其生成规则是可预测的。
2. 伪随机码的原理伪随机码的生成原理基于数学算法。
常见的伪随机码生成算法有线性反馈移位寄存器(LFSR)、梅森旋转算法等。
其中,LFSR是最常见的伪随机码生成算法之一。
LFSR是一种基于移位寄存器的随机数生成器。
它主要由一个寄存器和一个反馈系数构成。
通过不断的移位和异或运算,LFSR生成一个伪随机序列。
这个序列在统计特性上与真随机序列非常相似。
3. 伪随机码的应用伪随机码在数字通信、密码学、网络安全等领域有广泛的应用。
下面列举几个常见的应用场景:3.1 伪随机码的加密伪随机码可用于加密通信过程中的数据。
在加密过程中,发送方使用伪随机码对原始数据进行加密操作,然后将加密后的数据发送给接收方,接收方通过使用相同的伪随机码对加密数据进行解密操作,从而还原出原始数据。
3.2 伪随机码的扩频技术伪随机码在扩频技术中起到关键的作用。
扩频技术用于增加通信系统的抗干扰性能和保密性能。
发送方使用伪随机码对原始信号进行扩频,接收方通过使用相同的伪随机码对接收到的信号进行解扩,从而还原出原始信号。
3.3 伪随机码的随机性测试伪随机码的随机性是衡量其质量的重要指标。
在应用中,需要对生成的伪随机码进行随机性测试,以保证其符合随机性的要求。
常见的随机性测试方法包括序列统计方法、频谱分析方法等。
4. 伪随机码的优缺点伪随机码相比于真随机码具有一些优缺点。
下面分别列举:4.1 优点•生成速度快:伪随机码是通过算法生成的,因此生成速度非常快。
•可控性强:伪随机码的生成规则是可预测的,可以根据需要进行调整。
•长周期性:伪随机码的周期可以很长,可以满足大多数应用场景的需求。
线性反馈移位寄存器实现产生伪随机数M序列-----在CN03平台上,主要体现为Random功能的实现。
什么是线性反馈移位寄存器?数学解释这里就不作介绍了,这里我们主要理解两个词语就行,一个是线性,它是指量与量之间的一种按比例、成直线的关系。
这里面有一点点的数学知识,就是说在ai∈(0,1)的存储单元,ai的个数表示为反馈移位寄存器的级,在某一个时刻,这些寄存器会有一个状态,共有2^n个状态,每个状态对应于域GF(2)上的一个N维向量,用(a1,a2,a3,……an)表示。
作为某一个时刻的状态,可以用一个函数f(a1,a2,a3…..an)来表示,从而称为该反馈寄存器的反馈函数,因此线性的意思,就是指如果这个反馈函数是a1,a2,a3….an的线性函数,那么这个反馈移位寄存器,就叫做线性反馈移位寄存器,比如f(a1,a2,a3,…an)=kna1⊕kn-1a2⊕….⊕k2an-1⊕k1an,其中系数ki∈{0,1}i=(1,2,3,…,n)。
另外一个词,就是反馈,这个词在我理解,就是说需要获得下一个状态就需要通过获得一个反馈值来实现。
这个反馈的值可以在接下来的两种实现LFSR的方式的解释过程中得到更深刻的理解。
为什么要使用线性反馈移位寄存器?使用线性反馈移位寄存器的作用:在很多领域上都有使用到LFSR,譬如说密码学、白噪声,还有我们这里的随机功能实现,之所以把它使用到我们的radio的随机功能里面,除了它可以产生伪随机数序列实现随机播放功能之外,更重要的是我们利用了它的两个特点。
其一,只需要在代码中开辟几个byte的位置,就能够实现随机序列的产生,需要的空间很少。
其二,是它的记忆功能,我们在随机的功能里面,选择了下一曲,则上一曲可以通过调整抽头数的序列来从新获得,而不需要开辟空间进行存储。
怎样产生伪随机数M序列?M序列的意思就是最大序列,专业点来说就是周期,就是这些不同的伪随机数在什么时候才会回到初始的输入状态,M序列的最大值为2^n-1,因为全0的初始状态不起作用,所以不能以全0的状态作为初始输入。
5G M序列简介在5G通信技术中,M序列(M-sequence)是一种用于生成伪随机码(Pseudo Random Code)的序列。
M序列具有良好的随机性和周期性,并且在5G系统中具有广泛的应用。
本文将对5G M序列进行详细介绍,包括其定义、特性、生成方法以及应用场景等。
定义M序列是一种由二进制数字(0和1)组成的序列,具有良好的随机性和周期性。
M序列的长度通常为2的幂次方减1,例如15、31、63等。
M序列的生成是通过反馈移位寄存器(Feedback Shift Register,FSR)实现的,其中寄存器中的位通过特定的异或运算进行更新,从而生成下一个位的值。
特性1.随机性:M序列具有良好的随机性,其序列中的0和1的分布接近均匀分布,能够提供高度的随机性,从而增强数据的安全性和抗干扰能力。
2.周期性:M序列的周期性非常好,其周期长度为2的幂次方减1。
例如,一个15位的M序列的周期长度为2^15-1=32767,能够满足5G系统对长周期序列的需求。
3.自相关性:M序列的自相关性非常低,即序列与其自身进行互相关运算后,得到的结果接近于0。
这种特性使得M序列在通信系统中能够提供良好的互相干扰抑制能力。
生成方法M序列的生成方法基于反馈移位寄存器(FSR),其具体步骤如下:1.初始化寄存器:将FSR中的所有位初始化为非零的值,通常选择全1或全0。
2.生成序列:通过不断进行异或运算来更新FSR中的位,从而生成M序列。
具体更新方法根据FSR的结构和反馈多项式来确定。
3.输出序列:根据需要,可以选择输出M序列的全部或部分位。
如果只需要部分位,则可以通过截取序列的方式来实现。
应用场景M序列在5G系统中有许多重要的应用场景,包括:1.扩频技术:M序列被广泛用于扩频技术中,通过将原始数据序列与M序列进行异或运算,可以将信号的频带扩展,从而提高系统的抗干扰能力和容量。
2.导频序列:在5G系统中,M序列被用作导频序列,用于信道估计、频率同步等关键环节。
线性反馈移位寄存器实现产生伪随机数M序列
-----在CN03平台上,主要体现为Random功能的实现。
什么是线性反馈移位寄存器?
数学解释这里就不作介绍了,这里我们主要理解两个词语就行,一个是线性,它是指量与量之间的一种按比例、成直线的关系。
这里面有一点点的数学知识,就是说在ai∈(0,1)的存储单元,ai的个数表示为反馈移位寄存器的级,在某一个时刻,这些寄存器会有一个状态,共有2^n个状态,每个状态对应于域GF(2)上的一个N维向量,用(a1,a2,a3,……an)表示。
作为某一个时刻的状态,可以用一个函数f(a1,a2,a3…..an)来表示,从而称为该反馈寄存器的反馈函数,因此线性的意思,就是指如果这个反馈函数是a1,a2,a3….an的线性函数,那么这个反馈移位寄存器,就叫做线性反馈移位寄存器,比如f(a1,a2,a3,…an)=kna1⊕kn-1a2⊕….⊕k2an-1⊕k1an,其中系数ki∈{0,1}i=(1,2,3,…,n)。
另外一个词,就是反馈,这个词在我理解,就是说需要获得下一个状态就需要通过获得一个反馈值来实现。
这个反馈的值可以在接下来的两种实现LFSR的方式的解释过程中得到更深刻的理解。
为什么要使用线性反馈移位寄存器?
使用线性反馈移位寄存器的作用:
在很多领域上都有使用到LFSR,譬如说密码学、白噪声,还有我们这里的随机功能实现,之所以把它使用到我们的radio的随机功能里面,除了它可以产生伪随机数序列实现随机播放功能之外,更重要的是我们利用了它的两个特点。
其
一,只需要在代码中开辟几个byte的位置,就能够实现随机序列的产生,需要的空间很少。
其二,是它的记忆功能,我们在随机的功能里面,选择了下一曲,则上一曲可以通过调整抽头数的序列来从新获得,而不需要开辟空间进行存储。
怎样产生伪随机数M序列?
M序列的意思就是最大序列,专业点来说就是周期,就是这些不同的伪随机数在什么时候才会回到初始的输入状态,M序列的最大值为2^n-1,因为全0的初始状态不起作用,所以不能以全0的状态作为初始输入。
M序列就是我们在随机功能中获得的那个随机播放的序列。
它有些很好的特性:
1、通过反馈抽头数可以获得与之前输出的值的输入值,这也是我们所说的记
忆功能。
2、这些给定的反馈抽头数永远都是偶数的,而且只包括最高位,不包括最低
位。
3、还有另外一些特征,这里就不一一列出(这些规律的东西,我们只需要理解
我们用到的)。
两种LFSR的产生形式
这里有两种LFSR的实现方式,伽罗瓦(Galois)和斐波那契(Fibonacci)两种形式,也有人称为外部(External)执行方式和内部(Internal)执行方式。
所以这两种方式也是有着本质的区别的。
1、伽罗瓦方式(Internal)
如下图
(Galois Implementation)
从图中我们可以看到Galois方式的一些特征,其中包括数据的方向从左至右而反馈线路则是由右至左的。
其中X^0项(本原多项式里面的”1”这一项),作为起始项。
按照本原多项式所指示的,确定异或门(XOR)在移位寄存器电路上的位置。
如上图中的X^4.因此Galois方式也有人称它为线内或模类型(M-型)LFSR.
2、斐波那契方式(External)
如下图
(Fibonacci implementation)
从图中我们可以看到Fibonacci方式的数学流向和反馈形式是恰好跟Galois方式相反的,按照本原多项式,其中的X^0这一项则作为最后一项,这里只需要一个XOR门,将本原多项式中所给出的taps来设定它的异或方式。
因此Fibonacci 方式也被叫做线外或者简型(S-型)LFSR.
代码是怎么通过这个原来实现伪随机数M序列的产生过程的?
下面来分析一下CN03的随机功能代码实现的过程:
对于Random_mode.c
1、Random_Initialise(void)
这里并不涉及到LFSR部分,其中最重要的是理解seed,就是随机数的种子,它是通过SYS_TICK_VALUE来获得的,也就是说,在系统运行的到某某时刻的时候,如果接到产生随机序列的命令,则获取当前的系统时刻作为seed,这里具有一定的随机性。
获得了随机的seed之后,我们看到它调用了InitialiseBitSwap(seed)。
2、InitialiseBitSwap(unsigned int Seed)
void InitialiseBitSwap(unsigned int Seed)
{ …….
for(…)//先活动一个初始数组,简单的赋值过程
last_bit_swap_array[BitSwapCounter] = bit_swap_array[BitSwapCounter]; …….
while(!LFSR_BitSwap)
{ if(Seed) //在确保LFSR的初始输入是随机数的同时,也要确保它不为0
{ //初始状态为0的时候,整个线性反馈移位的过程无论怎么操作都只有全0的状态
LFSR_BitSwap = Seed & 0x1F;
Seed = Seed >> 1;
}
else
{
LFSR_BitSwap = 1;
}
}
for(….)
{ do
{
if(LFSR_BitSwap & BIT_0)//这个条件是加速处理过程,对奇、偶数分开处//理,也能够增加序列的随机性
{ LFSR_BitSwap = (LFSR_BitSwap >> 1) ^
FIVE_STATE_NEXT_LFSR_FEEDBACK_TAPS;
//这句代码是整个程序里面最为重要的已经代码,它体现了Galois方式的代码实//现过程,跟进所提供的taps,我们可以把这句代码理解为in-line的处理过程,//先移位,然后跟进给出的taps对相应的为进行异或运算,从而实现了线性反馈//移位的功能。
通过对照上图,能够较好地理解这个过程。
}
else
{ LFSR_BitSwap = (LFSR_BitSwap >> 1);
}
}while(LFSR_BitSwap > NUMBER_OF_LFSR_BITS);//确保这个随机数不能够大于确定的数组的个数值
bit_swap_array[last_bit_swap_array[BitSwapCounter]] = (LFSR_BitSwap-1); //获得这个随机数后,将它存到相应的数组里面
}
}
4、BitSwap(unsigned int InputValue)
还没有很好地理解这个函数的用意,但是我尝试去屏蔽关于这个函数的调用,并没有影响整个的随机功能。
所以,我认为它应该也是一个增加随机性的过程。
不过还好进一步理解,有新的进展,会更新到这里。
5、Random_PreviousTrack和Random_NextTrack
这两个函数就是产生最后的随机播放曲目的应用。
里面的核心代码在第二点里面已经基本上解释完毕,可以参考第二个函数的解释。
至于上一曲下一曲的区别,这里要重点说明一下,就是利用了反馈抽头数在M序列上面的应用,在M序列
解释的第一个特点中有提及。
我们可以看看在头文件random.h里面的定义:
#define SIXTEEN_STAGE_NEXT_LFSR_FEEDBACK_TAPS (BIT_15 | BIT_13 | BIT_12 | BIT_10 )
#define SIXTEEN_STAGE_PREV_LFSR_FEEDBACK_TAPS (BIT_0 | BIT_14 | BIT_13 | BIT_11 )
抽头数的定义有一定的规律,参照这个规律,可以实现对其他级的选择。
小结
小结一下这个学习的过程,里面还有两点没有深入地理解:
1、抽头数是怎么来的,通常已经算好了,网上有相关的资源。
参考网站:/resources/articles/m_sequence_linear_fe edback_shift_register_lfsr.htm
但是其中的数学知识是怎么实现的,在此就不作介绍了,可以网上收索一些资源。
2、在上面也听过,有些函数可能是为了增加伪随机数的随机性而设置的,但是现在还不确定,譬如,BitSwap函数,还需要进一步学习。