线性反馈移位寄存器(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划分为一个数码)

 

m序列python M序列生成_多项式

 举例说明:6阶本原多项式为:

m序列python M序列生成_多项式_02

,通过以下的映射规则可以确定反馈逻辑:

 (1)说明:多项式从幂次最高位到幂次最低位,共有7位,而寄存器有6个。对于n阶本原多项式,必含有m序列python M序列生成_寄存器_03m序列python M序列生成_m序列python_04项。

 (2)多项式中,m序列python M序列生成_寄存器_03项不是反馈逻辑的输入,其余项对应到寄存器/数组的对应下标,作为反馈逻辑输入。

 多项式和LFSR的对应关系:

 

m序列python M序列生成_m序列python_06

 再举一例:12阶本原多项式为:

m序列python M序列生成_m序列python_07

,对应LFSR为: 

m序列python M序列生成_寄存器_08

 

二、种子。

 种子是寄存器组的初始状态,注意种子不能是全0,否则状态会停留在全0.

 

 三、关于m序列的相关性。

相关运算之前,对m序列做了双极性处理(1-->+1,0-->-1)。

 1、自相关性。(6阶,种子0x32)

 

m序列python M序列生成_m序列python_09

 这个自相关结果的峰均比为7875,约合38.96dB.(相关运算的输出信号以电压平方为单位,所以用了10倍log10?)

 2、互相关性:相同阶数序列间的互相关。

 同一阶数的,不同种子的m序列其实是循环移位的关系,所以这些m序列的互相关可以有“相位”的概念。以6阶为例:

 种子为0x32和0x39互相关:(这两个状态为相邻状态,0x32下一个状态是0x39)

 

m序列python M序列生成_数组_10

 这两个序列相关性非常高,其实0x39序列就是就是把0x32序列的第一位放到末位,其余完全一样。

 种子为0x32和0x19互相关:(这两个状态为远离的状态,0x32的后31个状态是0x19)

 

m序列python M序列生成_多项式_11

  按寄存器状态来看,序列产生过程共有63个状态,0x32和0x19状态相隔31个状态。得到的相关峰幅度很接近。

 3、互相关性:不同阶数序列间的互相关。

 下面是6阶0x32和12阶0x555的互相关:

 

m序列python M序列生成_多项式_12

 它的频谱长这个模样:

 

m序列python M序列生成_多项式_13

  看到互相关的频谱比较平坦。