线性移位寄放器实现产生伪随机数M序列_第1页
线性移位寄放器实现产生伪随机数M序列_第2页
线性移位寄放器实现产生伪随机数M序列_第3页
线性移位寄放器实现产生伪随机数M序列_第4页
线性移位寄放器实现产生伪随机数M序列_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——线性移位寄放器实现产生伪随机数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)

如下图

(GaloisImplementation)

从图中我们可以看到Galois方式的一些特征,其中包括数据的方向从左至右而反馈线路则是由右至左的。其中X^0项(本原多项式里面的〞1〞这一项),作为起始项。依照本原多项式所指示的,确定异或门(XOR)在移位寄放器电路上的位置。如上图中的X^4.因此Galois方式也有人称它为线内或模类型(M-型)LFSR.2、斐波那契方式(External)如下图

(Fibonacciimplementation)

从图中我们可以看到Fibonacci方式的数学流向和反馈形式是恰好跟Galois方式相反的,依照本原多项式,其中的X^0这一项则作为最终一项,这里只需要一个XOR门,将本原多项式中所给出的taps来设定它的异或方式。因此Fibonacci方式也被叫做线外或者简型(S-型)LFSR.

代码是怎么通过这个原来实现伪随机数M序列的产生过程的?

下面来分析一下CN03的随机功能代码实现的过程:对于Random_mode.c1、Random_Initialise(void)

这里并不涉及到LFSR部分,其中最重要的是理解seed,就是随机数的种子,它是通过SYS_TICK_VALUE来获得的,也就是说,在系统运行的到某某时刻的时候,假使接到产生随机序列的命令,则获取当前的系统时刻作为seed,这里具有一定的随机性。

获得了随机的seed之后,我们看到它调用了InitialiseBitSwap(seed)。2、InitialiseBitSwap(unsignedintSeed)voidInitialiseBitSwap(unsignedintSeed){…….

for(…)//先活动一个初始数组,简单的赋值过程

last_bit_swap_array[BitSwapCounter]=bit_swap_array[BitSwapCounter];…….

while(!LFSR_BitSwap)

{if(Seed)//在确保LFSR的初始输入是随机数的同时,也要确保它不为0

{//初始状态为0的时候,整个线性反馈移位的过程无论怎么操作都只有全0

的状态

LFSR_BitSwap=SeedSeed=Seed>>1;}else{

LFSR_BitSwap=1;}}for(….){do{

if(LFSR_BitSwap

//这句代码是整个程序里面最为重要的已经代码,它表达了Galois方式的代码实//现过程,跟进所提供的taps,我们可以把这句代码理解为in-line的处理过程,//先移位,然后跟进给出的taps对相应的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论