我们以5阶移位寄存器为例,来产生m序列。 根据m 序列的特征方程:
2nf(x)?c0?c1x?c2x???cnx?cix (3-1)
i?0?ni可知本原多项式为f(x)?x5?x2?1的5阶移位寄存器为 [C1 C2 C3 C4
C5]=[0 0 1 0 1],移位寄存器结构为
?C0C5C3D1D2D3D4D5m序列 图 3-1 移位寄存器结构
初始化寄存器为[ D5 D4 D3 D2 D1 ] =[0 0 0 0 1],寄存器首先左移位可知m?0?=0,这时依据(1)式得知反馈D1?c5?c3。由于为5阶寄存器,码长
L?25?1?31。故要循环31次,得到所需的m序列。
程序代码如下:
function [m]=mxu(cn) % cn为移位寄存器 len=length(an); %所需的移位寄存器的长度 L=2^len-1; % m序列的长度 an=[zeros(1,len-1),1]; % 初始寄存器内容 m(1)=an(1); % m序列的第一个输出码元 for i=2:L
an1(1:len-1)=an(2:len);
an1(len)=mod(sum(cn.*an),2); %寄存器与反馈的模2和 an=an1; % 移位后的寄存器 m(i)=an(1); % 新的寄存器输出
22
end
stairs(m); % 对m序列绘图 %axist([0 40 -1 2]); 将以上代码命名为mxu.m
以上可根据阶位不同而做出不同的m序列 在MATLAB的command window里输入 an=[0 0 1 0 1]; m=mxu(an); 得到图3-1波形图 m序列返回值为: Columns 1 through 11
0 0 0 0 1 1 1 0 1 0 0 Columns 12 through 22
1 1 1 0 1 0 0 1 1 1 0 Columns 23 through 31
1 0 0 1 1 1 0 1 0
通过运行结果可以看出是由0、1组成的阶梯形图形,Stairs函数功能是画阶梯形,生成一系列的m序列,成功实现了要求。
由于m序列全为0 1的集合,直接的stairs绘制使得0,1的位置不清楚,使用stem(mxu)重新运行得到图3-2。 这样就明显看到m序列的位置。
或者使用axist([xmin xmax ymin ymax]);调整图形在面板中的位置。
23
图3-2 运行结果波形图
图3-3 新运行波形图
Simulink中选取所需元件,根据本原多项式连接相关D触发器,在进行simulink仿真的过程中,一般都是用示波器看信号波形,但是很多时候是需要波
24
形输出,但示波器里的波形背景是黑的,而且线性线宽及加标注都很困难,为了方便画图,用out1元件将m序列信号输入到工作环境,并用sim函数实现在工作环境中的m序列波形,实现电路如下图,将m序列波形保存为―nrsimu.mdl‖文件。
图 3-4 simulink 电路
在simulink中利用享有的各种器件实现硬件连接的m序列的仿真,使其运行后,可在command window中,用sim函数将其导出,并用stairs函数绘制图形,代码为: Sim(?nrsim‘); Stairs(yout);
其输出波形如图3-5所示:
图3-5 simulink 实现m序列
在simulink中,对于级数少的m序列可以很好实现,随着级数的增加,电路便会越复杂,延时就会更长[12]。
25
结 论
本次毕业设计的课题是m序列发生器的仿真实现,本文研究的扩频伪随机码m序列的Matlab生成源程序是基于线性反馈移位寄存器结构而编写的,并具体的描述了m序列的生成过程中。本方法应用了移位寄存器理论,从m序列的本原多项式出发,其算法核心是找到m序列本原多项式与线性m序列移位寄存器反馈逻辑式之间的关系,然后采用C语言编程,并借助Matlab开发平台实现序列。
通过本次设计可以看到软件设计的许多优点。在这次毕业设计的过程中,我通过老师给我推荐的书籍,在图书馆查询了大量的资料,在网上也搜集了许多相关资料,在整个设计过程中,我搜集、学习、研究,在以前浅显的了解的基础上,又掌握了更多的有关通信领域的知识,使得我的知识面有了进一步的扩展。
26