根据MATLAB的扩频通信仿真.docx
《根据MATLAB的扩频通信仿真.docx》由会员分享,可在线阅读,更多相关《根据MATLAB的扩频通信仿真.docx(22页珍藏版)》请在冰豆网上搜索。
根据MATLAB的扩频通信仿真
基于MATLAB的扩频通信仿真
1.仿真原理
扩展频谱通信具有很强的抗干扰性,其多址能力、保密、抗多径等功能也倍受人们的关注,被广泛的应用于军事通信和民用通信中。
扩频技术,将信号扩展到很宽的频谱上,在接收端对扩频信号进行相关处理即带宽压缩,恢复成窄带信号。
对干扰信号而言,由于与扩频信号不相关,则被扩展到一个很宽的频带上,使之进入信号通频带内的干扰功率大大的降低,具有很强的对抗能力。
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式。
使用MATLAB进行通信仿真有两种方式,分别是使用m文件编写程序和用SIMULINK进行可视化建模。
长期以来,人们总是想法使信号所占频谱尽量的窄,以充分利用十分宝贵的频谱资源。
为什么要用这样宽频带的信号来传送信息呢?
简单的回答就是主要为了通信的安全可靠。
扩频通信的基本特点是传输信号所占用的频带宽度(W)远大于原始信息本身实际所需的最小
(有效)带宽(DF),其比值称为处理增益Gp:
Gp=W/△F
(1)
众所周知,任何信息的有效传输都需要一定的频率宽度,如话音为1.7kHz~3.1kHz,电视图像则宽到数兆赫。
为了充分利用有限的频率资源,增加通路数目,人们广泛选择不同调制方式,采用宽频信道(同轴电缆、微波和光纤等),和压缩频带等措施,同时力求使传输的媒介中传输的信号占用尽量窄的带宽。
因现今使用的电话、广播系统中,无论是采用调幅、调频或脉冲编码调制制式,Gp值一般都在十多倍范围内,统称为“窄带通信”。
而扩频通信的Gp值,高达数百、上千,称为“宽带通信”。
扩频通信的可行性,是从信息论和抗干扰理论的基本公式中引伸而来的。
信息论中关于信息容量的香农(Shannon)公式为:
C=Wlog2(1+P/N)
(2)
其中:
C——信道容量(用传输速率度量),W——信号频带宽度,——信号功率,N——白噪声功率。
式
(2)说明,在给定的传输速率C不变的条件下,频带宽度W和信噪比P/N是可以互换的。
即可通过增加频带宽度的方法,在较低的信噪比P/N(S/N)情况下,传输信息。
扩展频谱换取信噪比要求的降低,是扩频通信的重要特点,并由此为扩频通信的应用奠定了基础。
扩频通信与一般的通信系统相比,主要是在发射端增加了扩频调制,而在接收端增加了扩频解调的过程,扩频通信按照其工作方式不同主要分为直接序列扩频系统、跳频扩频系统、跳时扩频系统、现行调频系统和混合调频系统。
现以直接序列扩频系统为例说明扩频通信的实现方法。
下图1为直接序列扩频系统的原理框图。
图1直接序列扩频系统原理图
由直扩序列扩频系统原理图可以看出,在发射端,信源输出的信号与伪随机码产生器产生的伪随机码进行模2加,产生一速率与伪随机码速率相同的扩频序列,然后再用扩频序列去调制载波,这样得到已扩频调制的射频信号。
在接收端,接受到的扩频信号经高放和混频后,用与发射端同步的伪随机序列对扩频调制信号进行相关解扩,将信号的频带恢复为信息序列的频带,然后进行解调,恢复出所传输的信息。
2.SIMULINK模型建立
基于MATLAB/Simulink所建立的扩频通信系统的仿真模型,能够反映扩频通信系统的动态工作过程,可进行波形观察、品剖分析和性能分析等,同时能根据研究和设计的需要扩展仿真模型,实现以扩频通信为基础的现代通信的模拟仿真,为系统的研究和设计提供强有力的平台。
图2为基于MATLAB/Simulink的扩频通信系统的仿真模型。
图2基于Simulink的扩频通信系统的仿真模型
2.1随机整数发生器(RandomIntegergenarator)
随机整数发生器(RandonIntegergenerator)作为仿真系统的信源,随机整数发生器产生二进制随机信号,采用时间、初始状态可自由设置,从而满足扩频通信系统所需信源的要求。
2.2PN序列发生器(PNSequenceGenerator)
用PN序列发生器(PNSequenceGenerator)产生伪随机码,对基带信号进行扩频。
扩频过程通过信息码与PN码进行双极性变换后相乘加以实现。
解扩过程与扩频过程相同,即将接收的信号用PN码进行第二次扩频处理。
2.3最小相移键控调制(M-PSKModulatorPassband)
对基带信号进行数字调制,将频谱从基带搬移至频带,以实现远距离传输的效果。
2.4加性高斯白噪声信道(AWGNChannel)
信号通过加性高斯白噪声信道,以达到对信号的传输后进行再进行解扩解调的目的。
改信道信噪比参数设置为负数,可验证扩频通信系统具有良好的抗噪声能力。
2.5最小相移键控解调(M-PSKDemodulatorPassband)
对解扩后的信号进行解调,恢复基带信号。
2.6误码率分析仪(ErrorRateCalculation)
在误码率计算中,接收到的信号,由于经过扩频解扩、调制解调、相关统计等处理,会存在一个延迟,在误码仪模块的对话框中要设置一个合适的延迟。
2.7其他设置
2.7.1RELAY的设置
2.7.1product的设置
2.7.3display的设置
2.7.4频谱分析仪(spectrumscope)的设置
系统中有四个频谱分析仪器,分别命名为:
baseband、mod、SS和DSS。
其中,baseband能观察基带信号的频谱;mod能观察到基带信号调制到频带后的频谱;SS能观察扩频后的频谱;DSS能观察解扩解调后的接受端输出信号的频谱。
这四个频谱分析仪的参数设置大致一致,其前方的零阶保持器的采样时间略有不同。
频谱分析仪名称
Baseband
Mod
SS
DSS
采样时间(s)
0.001
1/30000
0.001/31
0.001
3.M文件编写仿真程序
用m文件编写的MATLBA程序来实现观察系统在不同信噪比下的误码率变化情况。
此仿真要实现扩频码的产生、发射机部分、接收机部分、信道仿真部分以及误码分析部分,此外还有进行循环仿真以达到绘出信噪比与误码率见的函数图。
3.1扩频码的产生
选取m序列作为仿真系统的扩频码,产生函数如下:
function[mout]=mseq(stg,taps,inidata,n)
%变量含义说明
%stgm序列阶数
%taps线性移位寄存器的系数
%inidata序列的初始化
%n输出序列的数目
%mout输出的m序列
ifnargin<4
n=1;
end
mout=zeros(n,2^stg-1);
fpos=zeros(stg,1);
fpos(taps)=1;
forii=1:
2^stg-1
mout(1,ii)=inidata(stg);%输出数据的存储
num=mod(inidata*fpos,2);%反馈数据的计算
inidata(2:
stg)=inidata(1:
stg-1);%线形移位寄存器的一次移位
inidata
(1)=num;%返回反馈值
end
ifn>1
forii=2:
n
mout(ii,:
)=shift(mout(ii-1,:
),1,0);
end
end
3.2发射机部分
发射机部分包括扩频和调制两部分。
3.2.1QPSK调制部分
此处采用QPSK调制,相比SIMULINK的M-PSK调制的实现要求要低一些。
function[iout,qout]=qpskmod(paradata,para,nd,ml)
%各变量含义说明
%paradata输入数据
%iout输出的实部数据
%qout输出的虚部数据
%para并行信道数
%nd输入数据个数
%ml调制阶数
m2=ml./2;
paradata2=paradata.*2-1;
count2=0;
forjj=1:
nd
isi=zeros(para,1);
isq=zeros(para,1);
forii=1:
m2
isi=isi+2.^(m2-ii).*paradata2((1:
para),ii+count2);
isq=isq+2.^(m2-ii).*paradata2((1:
para),m2+ii+count2);
end
iout((1:
para),jj)=isi;
qout((1:
para),jj)=isq;
count2=count2+ml;
end
3.2.2扩频部分
function[iout,qout]=spread(idata,qdata,code1)
%变量含义说明
%idata输入序列实部
%qdata输入序列虚部
%iout输出序列实部
%qout输出序列虚部
%code1扩频码序列
switchnargin
case{0,1}
error('lackofinputargument');
case2
code1=qdata;
qdata=idata;
end
[hn,vn]=size(idata);
[hc,vc]=size(code1);
ifhn>hc
error('lackofspreadcodesequences');
end
iout=zeros(hn,vn*vc);
qout=zeros(hn,vn*vc);
forii=1:
hn
iout(ii,:
)=reshape(rot90(code1(ii,:
),3)*idata(ii,:
),1,vn*vc);
qout(ii,:
)=reshape(rot90(code1(ii,:
),3)*qdata(ii,:
),1,vn*vc);
end
3.3信道仿真部分
实现高斯白噪声代码函数
function[iout,qout]=comb2(idata,qdata,attn)
%各变量含义说明
%idata输入序列实部
%qdata输入序列虚部
%iout输出序列实部
%qout输出序列虚部
%attn根据信噪比得到的信号衰减水平
v=length(idata);
h=length(attn);
iout=zeros(h,v);
qout=zeros(h,v);
forii=1:
h
iout(ii,:
)=idata+randn(1,v)*attn(ii);
qout(ii,:
)=qdata+randn(1,v)*attn(ii);
end
3.4接收机部分
3.4.1接收机的解扩部分函数
function[iout,qout]=despread(idata,qdata,code1)
%各变量含义说明
%idata输入序列实部
%qdata输入序列虚部
%iout输出序列实部
%qout输出序列虚部
%code1扩频码序列
switchnargin
case{0,1}
error('lackofinputargument');
case2
code1=qdata;
qdata=idata;
end
[hn,vn]=size(idata);
[hc,vc]=size(code1);
vn=fix(vn/vc);
iout=zeros(hc,vn);
qout=zeros(hc,vn);
forii=1:
hc
iout(ii,:
)=rot90(flipud(rot90(reshape(idata(ii,:
),vc,vn)))*rot90(code1(ii,:
),3));
qout(ii,:
)=rot90(flipud(rot90(reshape(qdata(ii,:
),vc,vn)))*rot90(code1(ii,:
),3));
end
3.4.2接收机解调部分的函数
function[demodata]=qpskdemod(idata,qdata,para,nd,ml)
%各变量含义说明
%idata输入数据的实部
%qdata输入数据的虚部
%demodata解调后的数据
%para并行的信道数
%nd输入数据个数
%ml调制阶数
demodata=zeros(para,ml*nd);
demodata((1:
para),(1:
ml:
ml*nd-1))=idata((1:
para),(1:
nd))>=0;
demodata((1:
para),(2:
ml:
ml*nd))=qdata((1:
para),(1:
nd))>=0;
3.5误码计算和绘图部分
%误码率分析
noe2=sum(sum(abs(data-demodata)));
nod2=user*nd*ml;
noe=noe+noe2;
nod=nod+nod2;
%fprintf('%d\t%e\n',ii,noe2/nod2);
end
%数据文件
ber=noe/nod;
fprintf('%d\t%d\t%d\t%e\n',ebn0,noe,nod,noe/nod);
fid=fopen('BER.dat','a');
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod);
fclose(fid);
err_rate_final(ebn0+6)=ber;
end
%性能仿真图
figure
semilogy(SNR,err_rate_final,'b-*');
xlabel('信噪比/dB')
ylabel('误码率')
axis([-5,10,0,1])
gridon
3.6初始化设置以及仿真循环设置
Main函数为
clearall;
clc
sr=256000.0;%符号速率
ml=2;%调制阶数
br=sr*ml;%比特速率
nd=100;%符号数
SNR=-5:
1:
10;%Eb/No
%**************************扩频码初值设定**************
user=1;%用户数
stage=3;%序列阶数
ptap1=[13];%第一个线性移位寄存器的系数
disp('--------------start-------------------');
%******************扩频码的产生******************
forebn0=-5:
1:
10%m序列
code=mseq(stage,ptap1,regi1,user);
code=code*2-1;
clen=length(code);
%******************仿真运算开始******************
nloop=1000;%仿真循环次数
noe=0;
nod=0;
forii=1:
nloop
%******************发射机******************
data=rand(user,nd*ml)>0.5;
[ich,qch]=qpskmod(data,user,nd,ml);%QPSK调制
[ich1,qch1]=spread(ich,qch,code);%扩频
ich2=ich1;
qch2=qch1;
%******************接收机******************
[ich3,qch3]=comb2(ich2,qch2,attn);%添加高斯白噪声(AWGN)
sampl=irfn*IPOINT+1;
ich4=ich3(:
sampl:
IPOINT:
IPOINT*nd*clen+sampl-1);
qch4=qch3(:
sampl:
IPOINT:
IPOINT*nd*clen+sampl-1);
[ich5qch5]=despread(ich4,qch4,code);%解扩
demodata=qpskdemod(ich5,qch5,user,nd,ml);%QPSK解调
%******************误码率分析******************
noe2=sum(sum(abs(data-demodata)));
nod2=user*nd*ml;
noe=noe+noe2;
nod=nod+nod2;
%******************数据文件******************
ber=noe/nod;
fprintf('%d\t%d\t%d\t%e\n',ebn0,noe,nod,noe/nod);
fid=fopen('BER.dat','a');
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod);
fclose(fid);
err_rate_final(ebn0+6)=ber;
%******************性能仿真图******************
figure
semilogy(SNR,err_rate_final,'b-*');
xlabel('信噪比/dB')
ylabel('误码率')
axis([-5,10,0,1])
gridon
disp('--------------end-------------------');
4.仿真结果与分析
4.1.1Simulink仿真结果
●基带信号的频谱如下
●经调制后频谱如下
●扩频后频谱如下
●接收端恢复后的输出信号频谱如下
●误码计算仪的结果
4.1.2Simulink仿真结果分析
可以看出,基带信号的频率分量主要是在-100Hz到100Hz,这与信号源所设置的频率相符合。
基带信号进过M-PSK调制后,正频域的频率分量集中在2.9KHz-3.1KHz处,可看出载波频率为3KHz,这个结果与M-PSK调制器所设置的载波频率一致。
频带信号经过与PN码相乘扩频后,观察其信号的频谱可以看出,正频域的频率分量主要集中在0Hz到20KHz这主瓣中,带宽扩展了约20倍。
此时信号将经过模拟信道的AWGN信道模块,来到接收端。
在接收端处,先经过解扩(即与扩频PN码同步的PN码相乘),得到解扩后的频带信号,再经过解调模块,恢复成基带信号。
观察恢复后的信号的频谱,与信源处的信号基本一致。
再看系统的误码率计算分析。
输出的数据是一个n行(与输入数据数目相等)3列的矩阵。
第1列是差错率,第2列是差错码的数量,第3列是码元总数即前述的n。
可看出,差错率为0.002,差错码的数量为2,码元总数为1000。
由此可见,系统具有较好的抗噪声性能。
企抗噪声原理如图3所示。
图3扩频系统抗噪声原理示意图
4.2.1m文件的仿真结果
仿真结果如图4和图5所示。
其中,
图4是信号比和误码率的值;图5是绘制
的函数关系图像。
图4仿真结果的值
图5信噪比和误码率的关系函数图象
4.2.2m文件的仿真结果分析
通过观察可知,信噪比越大,系统的误码率越小。
这符合通信原理的规律。
从图中还可得知,在负的信噪比条件下,扩频通信系统还能有比较小的误码率。
可知扩频系统的抗干扰性能很好,能在负信噪比条件下工作。
这是因为扩频系统特有的频谱扩展特点和特有的解扩技术,能使有用信号淹没在伪噪声之中,通过相关解扩将之还原。
5.实验总结
此次仿真通过MATLAB的SIMULINK仿真实现了扩频系统从PN码产生到扩频和调制后发送到通过加性高斯白噪声然后接收后解扩和解调还原的过程。
观察了几个阶段的频谱,对比了各频谱之间的变化,分析了扩频系统抗干扰能力及其抗干扰的原因。
除此之外,还通过m文件的编程,第一步观察了不同信噪比条件下扩频通信系统的误码率的大小。
分析了扩频通信系统抗干扰能力的优越性。
使用SIMULINK仿真和M文件仿真有各自的好处。
SIMULINK是可视化的,有模块库的支持,使用十分方便;M文件仿真有很好的计算能力。
他们都是通信仿真里面的两把利剑,有些大的系统可能会用到两者的混合仿真。
所以,熟悉这两种仿真方式是通信仿真中必不可少的。
此次仿真只是粗略地对扩频通信系统进行了仿真,还有各种实际环境中的因素没有考虑。
如:
中频解调、信道的衰落、传输的损耗等等因素。
在往后的仿真中,还可将上诉因素加入到系统中,也可对不同扩频增益的扩频通信系统研究其不同信噪比下的误码率情况。
由于篇幅有限,不再赘述。