m序列 MATLAB仿真
Posted haoming Hu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了m序列 MATLAB仿真相关的知识,希望对你有一定的参考价值。
author:haomingHu
email:hhm_master@163.com
m序列概念
m序列是最长线性移位寄存器的简称。顾名思义,m序列是由多级移位寄存器中,若N为移位寄存器的级数,n级移位寄存器共有2^n 个状态,除去全0状态外还剩下不2^n-1种状态,产生 m序列的线性反馈移们寄存器称作最长线性移位寄存器。产生m序列的移位寄存器的电路结构,其反馈线连接不是随意的,m序列的周期Р也不能取任意值,而必须满足p=2”-1,式中,n是移位寄存器的级数。
码序列的表征一般用特征多项式和结构图表示,如下:
4和5表示那两位寄存器的值进行模二加,
模二加:相同为0,相异为1,就等同于做异或运算
m序列产生过程
一般都初始化寄存器的值全部为1
程序:
r=5; %指定寄存器位数,也就确定了m序列的长度
g=1*ones(1,r) //初始化
for k=1 :(2^r-1)
out(k)=g(r);%%%out
tmp = xor(g(r-1),g(r));%将最后两位进行异或运算
g(2:r)=g(1:r-1);
g(1)=tmp;%将寄存器的最后一位放到第一位,进行下一次移位
end
重点:如果规定1是高电平,0是低电平,那么一定不能用相乘来做模二加运算,因为如果两个都是1的情况下,相乘的结果是1,但是结果应该是0,所以如果要用乘法进行模二加运算,那么就必须要规定高电平是-1,电平是0, 这个时候 -1*1 = -1 说明-1代表的是高电平,也就是1,那么初始化的时候也要做相应的改变
如果直接使用异或运算符,那么可以直接设置为0、1为对应电平信号。
运行结果:
此时运行结果有31个,是因为循环就设置了31次,从22列开始重复,m序列是伪随机码,伪随机码我的理解就是:已知的具有一定周期性的序列,具体的序列数据根据反馈的连接和级数决定。既具有一定的随机特性,又具有一定的周期性
m序列的自相关和互相关特性
相关性是伪随机序列的最重要的一个特性之一
自相关系数是反应一个序列在不同时刻的关联程度,根据随机信号分析里面的自相关系数计算公式可以知道,相关系数的计算就是一个类似于卷积的过程,只不过在计算卷积的时候需要将序列翻转再滑动相乘,但是相关系数则是直接滑动相乘(积分的过程),既然是类似于卷积,那么就可以用频域的方法去计算
比如说现在有两个不一样的序列:c1 c2
计算公式为:
自相关:c=ifft(fft(c1).*conj(fft(c1)))
互相关:c=ifft(fft(c1).*conj(fft(c2)))
用代码产生两个不一样的m序列,并计算其相关性
完整代码:
r=5;
g=1*ones(1,r)
for k=1 :(2^r-1)
out(k)=g(r);%%%out
%tmp=g(r-1)*g(r);%%feedback
tmp = xor(g(r-1),g(r));%将最后两位进行异或运算
g(2:r)=g(1:r-1);
g(1)=tmp;%将寄存器的最后一位放到第一位,进行下一次移位
end
r1=5;
g1=1*ones(1,r1)
for k=1 :(2^r1-1)
out1(k)=g1(r1);%%%out
%tmp=g(r-1)*g(r);%%feedback
tmp1 = xor(g1(r1-2),g1(r1));%将最后两位进行异或运算
g1(2:r1)=g1(1:r1-1);
g1(1)=tmp1;%将寄存器的最后一位放到第一位,进行下一次移位
end
%c1 c2分别是两个不同的序列
figure (1);
c1 = fft(out);
c2 = conj(c1);
c3 = ifft(c1.*c2);
plot(c3);
figure (2);
c4 = fft(out1);
c5 = ifft(c4.*c2);
plot(c5);
运行结果:
自相关:
互相关:
可以看出,m序列或者叫做伪随机码序列具有极高的自相关特性以及极低的互相关特性
扩展频谱通信要求扩频序列应具有较好的随机特性,而m序列既具有一定的随机特性,又具有一定的周期性,因而它是一种伪随机序列,m序列应具有移位相加特性、平衡特性和游程特性。
以上仿真结果可以看出:m序列的自相关系数出现在t =0处出现尖峰,并以Р为周期重复出现。尖峰底宽为2T。。T 越小,相关峰越尖锐。周期P越大,1/P就越小。在这种情况下,m序列的自相关性就越好。两个长度周期相同,由不同反馈系数产生的m序列,其互相关与自相性相比没有尖锐的二值特性,是多值的。作为地址码而言,希望选择的互相关函数越小越好,这样便于区分不同的用户,或者说,抗干扰能力强。
以上是关于m序列 MATLAB仿真的主要内容,如果未能解决你的问题,请参考以下文章
m基于POCS算法的空域序列图像超分辨率重建matlab仿真
数字预失真基于Volterra级数的宽带射频功放数字预失真线性化技术matlab仿真