第11组基于Matlab的m序列仿真Word文件下载.docx
《第11组基于Matlab的m序列仿真Word文件下载.docx》由会员分享,可在线阅读,更多相关《第11组基于Matlab的m序列仿真Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
![第11组基于Matlab的m序列仿真Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/1/f1ddfc99-a91f-4d8e-98cf-3626fa21aec6/f1ddfc99-a91f-4d8e-98cf-3626fa21aec61.gif)
1.了解m序列的定义和其背后的意义
2.通过Matlab生产m序列
3.验证m序列主要性质
4.讨论m序列的主要性质在扩频中的作用
设计指标:
1.能通过Matlab生产任意长度的m序列
2.讨论任意长度m序列的均衡性、游程性、自相关特性、互相关特性等主要性质
三、设计内容
3.1伪随机码
伪随机(或伪噪声,PseudorandomNoise,PN)码序列是一种常用的地址码,它具有与白噪声类似的自相关性质的0和1所构成的编码序列。
伪随机码序列具有类似于随机序列的基本特性,是一种貌似随机但实际上是有规律的周期性二进制序列。
如果发送数据序列经过完全随机性的加扰,接收机就无法恢复原始序列。
在实际系统中使用的是一个足够随机的序列,一方面这个随机序列对非目标接收机是不可识别的,另一方面目标接收机能够识别并且很容易同步地产生这个随机序列。
在通信系统中,如果发送数据序列经过完全随机性的序列加扰,接收机就无法恢复原始序列。
在实际系统中使用的是一个足够随机的伪随机序列,一方面这个伪随机序列对非目标接收机来说像噪声一样是不可识别的,另一方面目标接收机能够识别并且很容易同步地产生这个伪随机序列,用来解扰。
3.2m序列的定义
m序列的全名叫做最长线性反馈移位寄存器序列。
顾名思义,m序列的定义与线性反馈移位寄存器有关。
图2-1即是一个线性反馈移位寄存器的一般形式。
其特点是有个移位寄存器;
左边输入右边输出;
某些寄存器的值通过模二加后反馈给输入级。
图2-1m线性反馈移位寄存器
对于一个n级线性反馈移位寄存器来说,最多可以有2^n个状态,对于一个线性反馈移位寄存器来说,全“0”状态不会转入其他状态,所以线性移位寄存器的序列的最长周期为2^n-1。
当n级线性移位寄存器产生的序列的周期为最长周期2^n-1时,则称输出的序列为n级m序列或n位m序列。
图2-2m序列[2,5]的线性反馈移位寄存器
图2-2中就是simulink中一个5级线性反馈移位寄存器有五个寄存器首尾相接,构成一个5级移位寄存器。
左数第二个和第五个的值模二加后反馈到第一个寄存器。
寄存器个数和反馈线的位置能唯一确定一个线性反馈移位寄存器。
我们将反馈线的位置称为抽头位置,上图中抽头位置为[2,5]。
因此我们可以用一个一维数组来表示反馈线接头位置,此外反馈连接方式也可用特征多项式多项式f(x)表示,即f(x)=1+x^2+x^5。
为了获得一个m序列,反馈线的连接方式不是随意的。
对给定的寄存器级数m,要去寻找能够产生m序列的抽头位置集合,是一个复杂的数学问题。
为了解决这个问题,我们尝试使用最简单最粗暴的方法寻找3-42位m序列的特征多项式。
从定义出发,我们编写了个小程序,程序分两部走:
1.要寻找出特征多项式,首先要找到当有m个寄存器时,所有的抽头组合。
2.去验证这些组合是否可以生产m序列。
从定义上可以看出,寄存器状态在2^n-1个周期后才回到初状态就是m序列。
根据以上方法,我们编写了一个时间复杂度极高的小程序,能找到n≤15的特征多项式。
当n>15时,抽头组合数量巨大,m序列循环周期太长,导致时间复杂度过高。
对于当m>15时的特征方程式,我们只能查表得到。
在附录1中的表包含3-168位m序列合适的抽头位置。
利用这些抽头位置,我们可以方便的生产m序列了。
图3-1通过Simulink生产m序列
3.3m序列的生产
只要知道特征多项式就可以简单地得到m序列,既可以通过simulink搭建一个线性反馈移位寄存器也可以通过代码实现。
图3-1表示了一个通过在simulink中搭建能线性移位寄存器,来生产m序列的示意图,之后可以将生产的m序列导入到matlab工作空间或储存起来待用。
3.4m序列的性质
在生成m序列之后,我们通过数学工具matlab来讨论m序列的性质。
m序列是一种类似于白噪声的伪随机序列,因此在讨论m序列的性质时,我们常把m序列与白噪声的性质作比较。
3.4.1平衡性
m序列与噪声序列类似,在m序列的每个周期都存在2^(n-1)个‘1’和2^(n-1)-1个‘0’,即‘0’和‘1’出现的概率大致相等。
且随着线性反馈级数上升,‘0’和‘1’的数量比趋近于1。
图4-1均衡性分析
3.4.2游程特性
在m序列的每一周期中,有1/2的元素游程长度为1;
1/4的元素游程长度为2;
1/8的元素游程长为3;
以此类推,长度为k的元素游程出现的比例为2^(-k)。
另外,有一个长度为n的连1游程和一个长度为n-1的连0游程。
图4-2为15位m序列的游程统计图,横坐标为游程长度,纵坐标为数量。
游程长度2的数量是1的一半,游程长度3
的数量是2的一半,以此类推,可知m序列具有特性。
图4-2游程统计
3.4.3自相关特性
自相关特性是伪噪声序列最重要的性质,伪噪声序列之所以与噪声类似,正是因为它们的又相似的自相关特性。
噪声的自相关函数是一个冲激函数。
而m序列的自相关函数与此十分类似,在m趋近于无穷时接近冲激函数。
图4-3是一个长度为2^4-1的m序列的自相关特性。
我们可以看出在周期性的相关函数的只有两个取值,即具有二值性。
函数值要么为1,要么为1/(2^4-1),且每周期中只有一个点为1,其余所有点都为1/(2^4-1)。
式4-1为m序列的自相关函数一般表达式,当m序列的长度N特别长时m序列的在相关函数就越接近冲激函数,即越接近白噪声的相关函数。
上式为m序列的自相关函数一般表达式,当m序列的长度N特别长时m序列的在相关函数就越接近冲激函数,即越接近白噪声的相关函数。
直相关性类似于噪声的好处在于,不同相位的同一PN序列的接近正交,当将不同相位PN码为扰码时,不同扰码间的相关性也就小,最终达到最大程度减小cdma系统中自干扰的目的。
(4-1)
3.4.4功率谱与噪声类似
维纳-辛钦定:
宽平稳随机过程的功率谱密度是其自相关函数的傅立叶变换。
在性质3的讨论中,已知m序列的自相关函数在随着m序列的周期N的增大,越来越接近白噪声的自相关函数,即接近冲激函数。
因此易得,随着周期N增大,m序列的概率密度函数越接近噪声的功率谱,即接近常数函数。
图4-4中(a)(b)(c)分别为m=7、m=11和m=15时的m序列的功率谱密度,通过比较可以发现随着m的增大谱线更接近噪声的功率谱。
(a)(b)
、
(c)
图4-4m分别等于7、11、15时的功率谱密度
3.4.5互相关性
m序列的互相关性是指相同周期的不同m序列之间的一致程度。
两个m序列间差别越大,互相关函性越弱。
同周期的m序列相关性差异大。
(a)
(b)
图4-5互相关性分析
图4-5(a)为[1,6]和[2,3,5,6]之间的互相关函数,函数值离散,共5个取值。
图4-5(b)为[2,3,4,8]和[2,3,5,6]之间的互相关函数,共3个函数取值。
当m序列相关函数值最少能只取三个离散值时,且这一对序列就是m序列优选对。
m序列优选对能用来生成另一种PN序列——Gold序列。
在这里不做介绍。
3.5m序列的应用
m序列在CDMAIS-95中被用来调制和加扰,被使用的m序列有两种:
(1)PN短码,码长为2^15-1的m序列,被用作小区地址码,用来区别不同的基站或扇区;
(2)PN长码,码长为2^42-1的m序列,被用作用户地址码,用来区别不同的用户.
图5-1CDMA前向链路编码调制扩频框架
图5-2CDMA反向链路编码调制扩频框架
3.5.1CDMAIS-95的前向信道
如图5-1所示:
(1)短码被用来调制和扩频,不同相位的短码区分不同的基站。
短码在被Code为0的Walsh码调制,即不调制的时候,就作为导频。
不同基站间导频相位差为64bit的整数倍。
(2)长码被用来加扰,作为地址码区分不同的用户。
3.5.1CDMAIS-95的反向信道
如图5-2所示:
(1)与前向链路相反,短码被用来加扰不同相位的短码区分不同的基站。
(2)与前向链路相反,长码被用来直接扩频并用不同相位来区分用户。
每个移动台被分配一个相位,这个相位是由用户的ESN(一种用于加密的标示)计算出来,这些m序列的相位是随机分布且不会重复的。
四、本设计改进建议
1.并没有通过编程解决仿真中碰到的所有数学问题,数学能力和编程能力有待加强。
2.并没有拓展到Gold序列。
3.并没有将CDMA精髓与m序列性质结合起来讲。
五、总结
作为重庆邮电大学大学的学生,移动通信这门专业课的对我们来说的重要性不言而喻。
本次课程设计通过Matlab对m序列的生产方法和性质进行了深刻的讨论,复习了课本上的知识并加深了对课本的理解;
捡起了概率论和通信原理等通信相关的数学知识,为以后的学期做好了铺垫;
进一步了解了扩频通信背后的原理,对CDMA有了新的认识。
六、主要参考文献
[1]TIA-EIA-95,MobileStation-BaseStationCompatibilityStandardForWidebandSpreadSpectrumeCellularSystem[S].
[2]Peter,Alfke.EfficientShiftRegisters,LFSRCounters,andLongPseudo-RandomSequenceGenerators[DB/OL]./support/documentation/application_notes/.July7,1996
[3]Giedrius,Buracas.m-sequencegenerationprogram[DB/OL].M/matlabcentral/fileexchange/990-m-sequence-generation-program.28Oct2001(Updated18Aug2003)
[4]Ir,J,Meel.SpreadSpectrumIntroduction[EB/OL].www.sss-pdf/Ss_jme_denayer_intro_print.pdf.
[5]Roy,Ward.TableofLinearFeedbackShiftRegisters[DB/OL].eej.ulst.ac.uk/~ian/modules/EEE515/files/old_files/lfsr/lfsr_table.pdf.
附录1程序清单
1.寻找特征多项式
clc;
clear;
closeall;
form=3:
15%编码长度
str1=sprintf('
m=%d\t'
m);
disp(str1);
n=1:
2^(m-1)-1;
b=dec2bin(n);
[i,j]=find(b=='
1'
);
forn=n
c=j(find(i==n));
%寻找所有组合,方法过于神奇,自己都看不下去了
a=ones(1,m);
fory=1:
(2^m-1)%验证具体组合是否满足定义
temp=0;
forx=c'
%累计模二加
temp=mod(temp+a(x)+a(m),2);
end
a=[tempa(1:
end-1)];
ifa==ones(1,m)%出现循环,即出现重复
break;
if(a==ones(1,m)&
y==2^m-1)%满足条件输出
str2=sprintf('
%d,%d,%d,%d,%d,%d,%d,%d,'
c,m);
disp(str2)
disp('
--------'
)
End
2.m序列生成函数
%m序列发生函数,采用多项式发生法mgen(g,state,N)
%g:
生成多项式二进制表示形式state:
寄存器初状态N:
序列长度
function[out]=mgen(g,state,N)
gen=dec2bin(g)-48;
M=length(gen)-1;
%状态机长度
curState=dec2bin(state,M)-48;
%out=zeros(N);
fork=1:
N
out(k)=curState(M);
a=rem(sum(gen(2:
end).*curState),2);
%根据特征多项式模二加
curState=[acurState(1:
M-1)];
end
3.m=4时m序列性质分析
%m=4时m序列性质分析
clearall;
%生成m序列
g=bin2dec('
11001'
%本原多项式g(x)=1+x+x^4;
L=5000;
m_seq=mgen(g,bin2dec('
0110'
),L);
%移位寄存器初状态0110,长度5000
figure
(1)
stem(2*m_seq(1:
30)-1);
axis([130-1.21.2]);
gridon;
title('
输出m序列'
%序列均衡性分析
figure
(2)
q=length(find(m_seq==0))/length(find(m_seq==1));
hist(m_seq);
axis([-0.51.503000]);
title(['
m序列均衡性分析("
0"
与"
1"
的数量比为'
num2str(q)'
)'
]);
%游程特性
run_length=zeros(1,4);
counter=1;
forj=1:
length(m_seq)-1
ifm_seq(j)==m_seq(j+1)
counter=counter+1;
else
run_length(counter)=run_length(counter)+1;
counter=1;
figure(3)
bar(run_length);
m序列游程统计'
%相关性分析
%生成矩形脉冲
N_sample=100;
Tc=1;
%码元宽度
dt=Tc/N_sample;
t=0:
dt:
Tc*L-dt;
gt=ones(1,N_sample);
mt=rectpulse(2*m_seq-1,N_sample);
%自相关序列
ms=conv(1-2*m_seq,1-2*m_seq(15:
-1:
1))/15;
rt=conv(mt,mt(15*N_sample:
1))/(15*N_sample);
figure(4)
subplot(411);
stem(m_seq(15:
65),'
MarkerFaceColor'
'
red'
axis([050-0.51.5]);
subplot(413);
plot(0:
51,mt(14*N_sample:
65*N_sample));
axis([050-1.21.2])
矩形脉冲'
subplot(412);
%stem(ms,'
stem(ms(14:
axis([050-0.21.2]);
m序列自相关序列'
subplot(414);
49,rt(14*N_sample:
63*N_sample))
生成矩形脉冲自相关函数'
%频谱分析
window=boxcar(length(m_seq));
%矩形窗
nfft=2048;
[Pxx,f]=periodogram(m_seq,window,nfft,100);
%直接法求功率谱密度
figure(5)
plot([-1*flipud(f);
f],[flipud(10*log10(0.5*Pxx));
10*log10(0.5*Pxx)])
%stem([-1*flipud(f);
axis([-5050-11020]);
m=4时的功率谱密度'
4.功率谱密度分析
p=2^11-1;
L=p*8;
n=4096;
M=abs(fftshift(fft(m_seq,n)).^2);
M=10*log10(M./L);
plot(-50:
100/n:
50-100/n,M);
axis([-5050-7530]);
10010001'
n=512;
101000000001'
L=p*11;
n=1024;
1001000000000000000000000000001'
5.互相关性分析
101001'
p=2^5-1;
L=p*5;
m_seq1=mgen(g,bin2dec('
101111'
m_seq2=mgen(g,bin2dec('
111011'
m_seq3=mgen(g,bin2dec('
ms=conv(1-2*m_seq1,1-2*m_seq2(p:
1))/p;
stem(ms)
%axis([0600-0.11.2]);
ms=conv(1-2*m_seq1,1-2*m_seq3(p:
ms=conv(1-2*m_seq2,1-2*m_seq3(p:
1100001'
p=2^6-1;
1110011'
1011011'
plot(ms)
axis([pp*2-0.40.4]);
figure(6)
附录2m序列本原多项式表
下表来自于xilinx应用文档@/support/documentation/application_notes/xapp052.pdf
[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!
]