引言
m序列属于伪随机序列的一种。在通信领域应用较为广泛。由于其具有很好的伪噪声特性,因此在保密通信中,可以将其应用在高可靠性的保密通道中。另外,雷达领域也有广泛应用,伪随机相位编码脉冲/连续波雷达中用到的调制信号正是m序列。
1.m序列基本知识点
m序列的周期等于 2 N − 1 2^N-1 2N−1,N是m序列的级数,m序列由N级线性反馈移存器产生。
m序列具有均衡性,序列中“1”和“0”的数目基本相等,“1”的个数比“0”多1。
m序列的循环自相关函数是双值电平。
m序列具有游程分布的规律。
2.matlab产生m序列
具体产生原理可参考相关资料(通信原理第七版,樊昌信、曹丽娜),这里只介绍matlab实现方法。
2.1根据产生原理编写生成函数
2.1.1生成m序列的函数:
function[mg]=m_generate(f)
n=length(f);%移位寄存器长度
N=2^n-1;%伪随机码的周期
register=[zeros(1,n-1) 1];
for i=1:N
newregister(1)=mod(sum(f.*register),2);
for j=2:n
newregister(j)=register(j-1);
end
register=newregister;
mg(i)=register(n);
end
2.1.2调用已编写函数生成m序列
%***************************************
% 伪随机序列产生
%***************************************
% 产生伪随机序列,7阶m序列,周期为127
% 利用primpoly(7,'all')指令,产生本原多项式:D^7+D^6+D^5+D^4+1,并调用编写的m_generate()函数生成伪随机序列
mg=m_generate([0 0 0 1 1 1 1 ]);
得到的变量"mg"就是周期为127的m序列。
注意:
先要利用 primpoly(7,‘all’) 命令生成对应的本原多项式(可在命令窗生成),选择其中一个多项式将其系数矩阵添加到函数m_generate([0 0 0 1 1 1 1 ]);(如黄色标记的矩阵)。
生成其他阶数的m序列则只需要将 primpoly(7,‘all’) 命令中的数字‘7’更换到需要的阶数即可。
2.2利用 i d i n p u t idinput idinput函数
matlab中的 i d i n p u t idinput idinput函数可以成成多种不同的序列。也可以用来产生m序列:
Order_number=7;%m序列的阶数等于7
mg=idinput((2^(Order_number)-1),'prbs')';%生成m序列
这种产生方法就很简单了,改变阶数就可以得到不同周期长度的m序列。
更多关于 i d i n p u t idinput idinput函数的使用可以到matlab中文官网查阅
https://ww2.mathworks.cn/help/ident/ref/idinput.html