基于Matlab的CDMA通信系统仿真Word文件下载.docx
《基于Matlab的CDMA通信系统仿真Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于Matlab的CDMA通信系统仿真Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
而在收端,用相同的扩频码序列去进行解扩,把展宽的扩频信号还原成原始的信息。
扩频码发生器载波发生器载波发生器解扩码发生器二进制信息扩频调制数据调制信道数据解调解扩恢复信息
图2-1直接序列扩频的发射机和接收机框图
2.3扩频码序列
在扩频系统中,信号频谱的扩展是通过扩频码实现的,扩频系统的性能与扩频码的性能有很大的关系,对扩频通常提出下列要求:
易于产生;
具有随机性;
扩频码应该具有尽可能长的周期,使干扰者难以从扩频码的一小段中重建整个码序列;
扩频码应该具有良好的自相关和互相关特性,以利于接收时的捕获和跟踪,以及多用户检测等。
扩频码中应用最多的是M序列,又称最大长度序列,还有GOLD序列、WALSH码序列等,本次试验中我们主要运用了M序列和正交GOLD序列。
2.3.1PN码
CDMA信道的区分是靠PN码来进行的,因而要求PN码自相关性要好,互相
关性要弱,实现和编码方案简单等。
目前的CDMA系统就是采用一种基本的PN序列m序列作为地址码,利用它的不同相位来区分不同用户。
M序列是最长线性移位寄存器序列的简称,它通常是由反馈移位寄存器产生
-4-
的具有像随机噪声波形的周期性二元序列。
Gold码序列是一种基于m序列的码序列。
Gold码是m序列的组合码,由同
步时钟控制的两个m序列逐位模2加得到。
这两个码发生器的周期相同,速率也相同,因而两者保持一定的相位关系,这样产生的组合码与这两个子码序列的周期也相同。
正交Gold码是在优选对产生的Gold码末尾加0,使序列的长度为偶数。
3.1DS-CDMA通信系统原理图
图3-1DS-CDMA通信系统原理图
在实验中,我们采用;
两种扩频码进行仿真。
M序列和正交Gold序列,扩
频后的数据通过脉冲成型滤波器后通过信道同时到达接收端,在接收端分别对不同用户信息数据进行解扩,恢复各个用户的原始信息。
-5-
3.2仿真流程设计与介绍3.2.1仿真设计步骤
1、m序列的DS-CDMA在AWGN下的性能的仿真。
2、正交Gold序列的DS-CDMA在AWGN下的性能的仿真。
3、对比两个扩频码在AWGN信道下的性能曲线,分析哪种扩频码更适合在AWGN信道中传输,传输衰减最小,对比m序列和正交Gold序列的抗干扰能力。
4、为了证明这一结论,把两种PN码再经过Rayleigh衰落信道下的性能进行验证。
(代码见附录)3.2.2程序编程设计
最外层循环的时候是信噪比,根据每种信噪比下,首先产生各个用户的发射数据,根据用户数,每一行是每个用户的发射数据,然后进行Gray编码、4-QAM调制,调制完后,对信号进行扩频,扩频部分是通过pread函数完成的,是完成扩频的功能。
扩频时,看输入参数是否满足要求,满足要求后,用扩频码与每一个数据符号相乘,对原始符号进行扩展,完成扩频。
扩频完成后,再通过脉冲成形滤波器计算每个用户信号功率。
当用户数大于1时,所有用户数据相加。
相加完成后,如果需要通过瑞利衰落信道,再让信道系数与发射数据相乘。
接收端加入高斯白噪声,首先根据信噪比计算高斯白噪声标准差,根据标准差加入白噪声。
如果通过瑞利衰落信道后,我们还需要进行一个信道补偿。
最后通过脉冲成形滤波器进行降采样,之后进行数据解扩,解扩部分是通过depread函数完成的,解扩完成后,对信号进行4-QAM解调、Gray编码逆映射,分别对用户原始数据和解扩后数据进行比较,最后统计误比特率。
以上就是完成扩频的主程序。
M序列和正交Gold序列脚本程序的介绍:
用户数统一定义的是1、4、7,扩频码分别选择的是M序列和正交Gold序列,然后在每种用户数下仿真扩频系统的性能,最后画出仿真得到的误比特率。
-6-
4仿真结果分析
4.1实验仿真运行结果
100m序列DS-CDMA在AWGN信道下的性能uer=1uer=4uer=710误比特率(BER)-110-2100-3123456信噪比EbNo(dB)78910图4-1M序列DS_CDMA在AWGN下的性能
从图4-1中可以看出,由于m序列即使在完全同步时,之间的互相换值也不为0,因此随着用户数的增加(解调其中一个用户的数据时,其他用户会对该用户的解调产生干扰),干扰越来越大,导致系统的误码率性能下降。
-7-
100正交Gold序列DS-CDMA在AWGN信道下的性能uer=1uer=4uer=710-1误比特率(BER)10-210-3100-412345信噪比EbNo(dB)6789图4-2正交Gold序列在AWGN下的性能
从图4-2中可以看出,由于正交Gold序列在完全同步时,它们的互相关值为0,因此其BER性能并不随着用户数的增加而恶化。
在信噪比为2、4、6时误比特率基本相同。
由图可以看出来当误比特率仿真时候小于10时结果就会有一定的偏差。
但还是可以看出正交Gold序列比M序列的性能要好。
所以,初步得出结论:
正交Gold序列在AWGN信道下的抗干扰能力更强,衰减比,序列要小。
为证明这一结论进行了下面的实验(图4-3、图4-4)。
-3
-8-
100m序列DS-CDMA在Rayleigh信道下的性能uer=1uer=4uer=7误比特率(BER)10-1100-2123456信噪比EbNo(dB)78910图4-3M序列在Rayleigh衰落信道下的性能
对比图4-1和图4-3,显然M序列在瑞利衰落信道下的性能要比能过AWGN信道下的性能要差。
-9-
100正交Gold序列DS-CDMA在Reyleigh信道下的性能uer=1uer=4uer=7误比特率(BER)10-1100-2123456信噪比EbNo(dB)78910图4-4正交Gold序列在Rayleigh衰落信道下的性能
正交Gold序列在的瑞利衰落信道下的性能也要比AWGN信道下的性能要差,可以看出,DS-CDMA系统在Rayeligh衰落信道下的性能要比AWGN信道下的性能差。
在图4-3上可以看出,随着用户数的增加,其误比特率还是会增高,但是由图4-4可以看出,信号的误比特率甚至由于用户的增多而降低,性能变的更优,此次实验,可能存在些许误差,而且为了使程序更快运行出结果我们给他加了信道补偿,也可能会由于描点过少,造成图像与真实有些不符,但从大体方向上仍然能够得出结论,即使在瑞利衰落信道下正交Gold序列的性能依然优于m序列。
-10-
总结
对于本仿真而言,已基本完成了设计任务书的设计和研究目的,通过用MATLAB对DS-CDMA系统的仿真调试、结果分析,让我组熟悉了DS-CDMA的工作原理,加深了对扩频通信的认识,并深刻的了解PN码在不同信道的衰落情况。
通过仿真结果中波形的直观方式,更让我们了解到了系统衰减的规律。
但是在本设计中也存在着缺陷与不足
1、在本设计中过程中可能由于程序过于复杂,信息本身所占用的带宽偏大,用来传输信息的带宽相对不够大,造成结果并不明显,信息衰减严重。
2、在设计中只考虑到加性高斯信道所带来的干扰,在实际通信信道却是复杂多变,存在着各种各样的情况,所以最后的接收信号是在很简单的干扰下得出。
要想应用于实际中,必须加入各种噪声来考虑,以实现真实系统的设计。
3、实验中,我们选择加大传输带宽,来弥补其他干扰带来的影响,可能会造成消耗过大,浪费带宽的结果,实际应用中是不实用的。
只能作为仿真,进行研究。
即使如此,在本次设计的整个过程中,以上的结果已经令我们受益匪浅。
通信系统的性能分析和仿真,随着通信技术、信息技术和计算机技术的发展以及网络系统的大量应用,显得越来越重要。
-11-
致谢
在本次仿真设计中,感谢指导老师在论文选题、设计任务书中对我的无私帮助,加深了我对专业基础理论的理解,拓宽了我的专业知识面,实在是受益匪浅。
在此,谨对所有在论文写作中帮助过我的老师、同学表示衷心的感谢和由衷的敬意!
谢谢大家!
-12-
参考文献
[1]刘学勇,编著.通信系统建模与仿真(电子工业出版社)[2]邓薇,编著.MATALB函数速查手册(人民邮电出版社)
[3]【美】WilliamC.Y.Lee,著.移动通信工程理论和应用(第二版)(人民邮电出版社)
[4]王华奎,李艳萍等编著.移动通信原理与技术(清华大学出版社)
-13-
附录(各部分编程):
1、M序列
function[mout]=meq(n,tap,inidata,num)
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某%n:
m序列的阶数n%tap:
反馈寄存器的连接位置%inidata:
寄存器的初始值序列
%num:
输出的m序列的个数
%mout:
输出的m序列,如果num>
1,则每一行为一个m序列
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某
ifnargin<
4num=1;
end
mout=zero(num,2^n-1);
fpo=zero(n,1);
fpo(tap)=1;
forii=1:
2^n-1
mout(1,ii)=inidata(n);
%寄存器的输出值temp=mod(inidata某fpo,2);
%计算反馈数据
inidata(2:
n)=inidata(1:
n-1);
%寄存器移位一次inidata
(1)=temp;
%更新第1个寄存器的值end
ifnum>
1%如果要输出多个m序列,生成其他m序列
forii=2:
num
mout(ii,:
)=hift(mout(ii-1,:
),1);
-14-
endend
关于hift函数的代码:
function[outregi]=hift(inregi,hiftr)
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某%inrege:
输入序列
%hiftr:
循环右移的位数
%outregi:
输出序列
v=length(inregi);
outregi=inregi;
hiftr=rem(hiftr,v);
ifhiftr>
outregi(:
1:
hiftr)=inregi(:
v-hiftr+1:
v);
%循环移位outregi(:
1+hiftr:
v)=inregi(:
v-hiftr);
eleifhiftr<
v+hiftr)=inregi(:
1-hiftr:
v+hiftr+1:
-hiftr);
%某某某某某某某某某某某某某某某某某某某某某endoffile某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某
-15-
2、Gold序列:
function[gout]=goldeq(m1,m2,num)
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某%m1:
m序列1%m2:
m序列2
生成的Gold序列个数%gout:
生成的Gold序列输出
3%如果没有指定生成的Gold序列个数,默认为1num=1;
gout=zero(num,length(m1));
num%根据Gold序列生成方法生成Gold序列gout(ii,:
)=某or(m1,m2);
m2=hift(m2,1);
%某某某某某某某某某某某某某某某某某某某某某某endoffile某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某
其hift函数代码同M序列
-16-
3、仿真部分主程序:
%直接序列扩频主程序代码
function[ber]=dcdma(uer,eq)%uer:
同时进行扩频通信的用户数
%eq:
扩频码1:
M-序列2:
Gold序列3:
正交Gold序列%ber:
该用户数下的误码率
%某某某某某某某某某某某某某某某某某某某某某某某某某某初始化部分某某某某某某某某某某某某某某某某某某某某某某某某某某某某某r=25600.0;
%符号速率
nSymbol=1000;
%每种信噪比下发送的符号数M=4;
%4-QAM调制br=r某log2(M);
%比特速率graycode=[0132];
%Gray编码规则
%某某某某某某某某某某某某某某某某某某某某某某脉冲成形滤波器参数某某某某某某某某某某某某某某某某某某某某某某某某某某delay=10;
%升余弦滤波器时延F=8;
%滤波器过采样数rolloff=0.5;
%升余弦滤波器滚降因子rrcfilter=rcoine(1,F,'
fir/qrt'
rolloff,delay);
%设计根升余弦滤波器
%某某某某某某某某某某某某某某某某某某某某某某扩频码产生参数某某某某某某某某某某某某某某某某某某某某某某
%uer=uer1;
%用户数tage=3;
%m序列的阶数ptap1=[13];
%m序列1的寄存器连接方式ptap2=[23];
%m序列2的寄存器连接方式regi1=[111];
%m序列1的寄存器初始值regi2=[111];
%m序列2的寄存器初始值
%某某某某某某某某某某某某某某某某某某某某扩频码的生成某某某某某某某某某某某某某某某某某某某某某
witcheq
cae1%M-序列code=meq(tage,ptap1,regi1,uer);
cae2%Gold序列m1=meq(tage,ptap1,regi1);
m2=meq(tage,ptap2,regi2);
code=goldeq(m1,m2,uer);
EbNo=0:
2:
10;
%Eb/No变化范围
-17-
cae3%正交Gold序列m1=meq(tage,ptap1,regi1);
code=[goldeq(m1,m2,uer),zero(uer,1)];
code=code某2-1;
clen=length(code);
%某某某某某某某某某某某某某某某某某某某某某某某某某某衰落信道参数某某某某某某某某某某某某某某某某某某某某某某某某某某
t=1/F/r/clen;
%信道采样时间间隔
t=(0:
nSymbol某F某clen-1+2某delay某F)某t;
%每种信噪比下的符号传输时间y=160;
%多普勒频移[Hz]%h=rayleigh(fd,t);
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某仿真开始某某某某某某某某某某某某某某某某某某某某某某某某某某某某
forind某=1:
length(EbNo)ind某
%某某某某某某某某某某某某某某某某某某某某某某某某某某发射端某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某data=randrc(uer,nSymbol,[0:
3]);
%产生各个用户的发射数据data1=graycode(data+1);
%Gray编码data1=qammod(data1,M);
%4-QAM调制[out]=pread(data1,code);
%扩频
out1=rcoflt(out.'
r,F某r,'
filter'
rrcfilter);
%通过脉冲成形滤波器
pow=um(ab((out1)).^2)/nSymbol;
%计算每个用户信号功率ifuer>
1%用户数大于1时,所有用户数据相加out1=um(out1.'
);
ele
out1=out1.'
;
%某某某某某某某某某某某某某某某某某某某某通过瑞利衰落信道某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某%out1=h.某out1;
%某某某某某某某某某某某某某某某某某某某某某某某某某接收端某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某
igma=qrt(0.5某pow某r/br某10^(-EbNo(ind某)/10));
%根据信噪比计算高斯白噪声方差y=[];
-18-
uer
y(ii,:
)=out1+igma(ii).某(randn(1,length(out1))+j某randn(1,length(out1)));
%加入高斯白噪声(AWGN)
%y(ii,:
)=y(ii,:
)./h;
%假设理想信道估计end
y=rcoflt(y.'
F/filter'
%通过脉冲成形滤波器进行滤波
y=downample(y,F);
%降采样forii=1:
y1(:
ii)=y(2某delay+1:
end-2某delay,ii);
yd=depread(y1.'
code);
%数据解扩demodata=qamdemod(yd,M);
%4-QAM解调demodata=graycode(demodata+1);
%Gray编码逆映射
[err,ber(ind某)]=biterr(data,demodata,log2(M));
%统计误比特率end
主程序中pread函数的代码:
%扩频函数
function[out]=pread(data,code)
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某%data:
输入数据序列%code:
扩频码序列
%out:
扩频后的输出数据序列
witchnargin
cae{0,1}%如果输入参数个数不对,提示错误error('
缺少输入参数'
-19-
[hn,vn]=ize(data);
[hc,vc]=ize(code);
ifhn>
hc%如果扩频码数小于输入的待扩频的数据序列,提示错误error('
缺少扩频码序列'
out=zero(hn,vn某vc);
hn
out(ii,:
)=rehape(code(ii,:
).'
某data(ii,:
),1,vn某vc);
%某某某某某某某某某某某某某某某某某某某某某某某某某某某某endoffile某某某某某某某某某某某某某某某某某某某某某某某某某
解扩函数depread的代码:
%信号解扩
functionout=depread(data,code)
输入数据序列
%code:
解扩使用的扩频码序列
解扩后的输出数据序列
witchnargin%如果输入参数个数不对,提示错误cae{0,1}
error('
out=zero(hc,vn/vc);
hc
某某=rehape(data(ii,:
),vc,vn/vc);
)=code(ii,:
)某某某/vc;
-20-
4、M序列DS-CDMA在AWGN下的性能,代码:
%m-序列DS-CDMA在AWGN信道下的性能仿真clearall
uer=[147];
eq=1;
forinde某=1:
length