小m序列产生—简单易用的伪随机序列
线性反馈移位寄存器(LFSR)是产生m序列的原型,m序列有强自相关性和低互相关性(体现在双极性化后,相关运算后的峰均比),其序列长度为(2^n)-1,每一个序列元素都对应一个寄存器组的状态。
生成m序列的关键因素有:阶数(同时决定了反馈逻辑),种子(寄存器初始状态)。
这里规定:移位操作是从MSB向LSB移位,MSB被反馈值覆盖,LSB作为输出并被相邻高位覆盖(对应Verilog语法中reg)。或者,移位从大下标到小下标进行(如C中长度为6的数组stat,stat[5]被反馈值覆盖,stat[0]作为输出并被stat[1]覆盖)。
一、阶数。
重要的概念是本原多项式(Primitive Polynomial),本原多项式可以帮助我们确定反馈逻辑。
本原多项式表:(8进制表示即将2进制表示从LSB起每3个bit划分为一个数码)
来源:https://wenku.baidu.com/view/045de58a680203d8ce2f24b8.html
举例说明:6阶本原多项式为:,通过以下的映射规则可以确定反馈逻辑:
(1)说明:多项式从幂次最高位到幂次最低位,共有7位,而寄存器有6个。对于n阶本原多项式,必含有和项。
(2)多项式中,项不是反馈逻辑的输入,其余项对应到寄存器/数组的对应下标,作为反馈逻辑输入。
多项式和LFSR的对应关系:
再举一例:12阶本原多项式为:,对应LFSR为:
二、种子。
种子是寄存器组的初始状态,注意种子不能是全0,否则状态会停留在全0.
三、关于m序列的相关性。
相关运算之前,对m序列做了双极性处理(1-->+1,0-->-1)。
1、自相关性。(6阶,种子0x32)
这个自相关结果的峰均比为7875,约合38.96dB.(相关运算的输出信号以电压平方为单位,所以用了10倍log10?)
2、互相关性:相同阶数序列间的互相关。
同一阶数的,不同种子的m序列其实是循环移位的关系,所以这些m序列的互相关可以有“相位”的概念。以6阶为例:
种子为0x32和0x39互相关:(这两个状态为相邻状态,0x32下一个状态是0x39)
这两个序列相关性非常高,其实0x39序列就是就是把0x32序列的第一位放到末位,其余完全一样。
种子为0x32和0x19互相关:(这两个状态为远离的状态,0x32的后31个状态是0x19)
按寄存器状态来看,序列产生过程共有63个状态,0x32和0x19状态相隔31个状态。得到的相关峰幅度很接近。
3、互相关性:不同阶数序列间的互相关。
下面是6阶0x32和12阶0x555的互相关:
它的频谱长这个模样:
看到互相关的频谱比较平坦。