《通信原理》实验课程课程实验报告一、实验要求QPSK调制仿真与分析使用matlab仿真实现QPSK相干调制与解调,要求:1)调制载波中心频率为5MHz,二进制数据比特率为2Mbps,基带信号波形采用滚降系数为0.4的平方根升余弦滤波器,画出4个载波周期I、Q调制分量的时域波形和对应的二进制码。2)画出基带|、Q信号和已调信号的频谱。3)通过AWGN信道,Eb/N0在0到20dB之间变化,画出误比特率曲线,并和理论误比特率进行对比;4)画出Eb/N0分别为5dB和10dB时的星座图;二、实验环境软件:MATLABR2018a三、实验原理1、四进制相移键控(QPSK)的载波信号有四种可能的离散相位状态θi,每个载波相位携带两个二进制码元。双bite码元与载波相位的常见对应关系有A\B两种方式。双比特码元载波相位A方式B方式00π-3π/410-π/2-π/4110π/401π/23π/4B方式的另一种表示:B方式的QPSK信号的正交调制原理如下图。公式有:s𝑖(𝑡)=𝐴𝑐cos(2𝜋𝑓𝑐𝑡+𝜃𝑖)=𝐼(𝑡)cos(2𝜋𝑓𝑐𝑡)−𝑄(𝑡)sin(2𝜋𝑓𝑐𝑡)式中,同相分量𝐼(𝑡)=𝑔𝜏(t)cos(𝜃𝑖),𝑄(𝑡)=𝑔𝜏(t)sin(𝜃𝑖)2、误比特率与信噪比信噪比SNR=10lg(Ps/Pn),其中Ps和Pn分别代表信号和噪声的有效功率Eb/N0为比特信噪比。显然,信噪比越大,信号的误码率越小。3、星座图数字通信系统中,每个符号间隔输出一个符号,对应一个信号波形。M进制数字通信系统在发送端需要设计出M种不同的信号。如前所述,信号s;()可以通过矢量空间分析器得到矢量,这样M个能量信号波形就可映射为N维空间中的M个点。将所对应的N维空间中的M个点的集合称为M进制信号的星座图,或称为信号空间图,或称为信号矢量图。相对于前面介绍的一般信号波形,数字信号波形一般限定在一个符号间隔内,二进制数字信号限定在0≤1≤T,多进制数字信号限定时间在0≤1≤T。四、实验设计与运行结果首先声明:因为题目要求的频率过高,电脑配置不足,每次调制用时过长,先将所有的数据等比例缩小,如调制载波中心频率5MHz→5Hz,二进制数据比特率2Mbps→2bps。1、调制使用调相法产生B方式的QPSK信号。①基带信号生成:随机数判决+比特率为节奏的for函数。②穿并行转换与极性变换:条件判决即可。如:生成{a2n+1}ifstt(2*n-1)==1st1(n)=1;elsest1(n)=-1;end运行结果如下图,③与载波信号调制合成:使双极性码与相互正交的载波相乘,同相支路和正交之路分别完成2PSK,最后叠加,得到B方式的QPSK信号。实验即用代码复述上述过程,得到结果如下图:2、加噪声使用matlab函数awgn(x,SNR)。其意义为:在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。结果在上一张图已经呈现,再次给出:3、求频谱Matlab中求函数频谱的过程是:对函数做傅里叶变换后,进行快速傅里叶变换计算。程序中使用的函数是:function[f,sf]=T2F(t,st)得到如下的结果图:4、误码率曲线的得到与对比5、星座图五、程序源代码i=10;%基带信号码元数*106j=5000;j1=2000;t=linspace(0,5,j);%0-5之间产生5000个点行矢量,即将[0,5]分成5000份t1=linspace(0,2,j1)f=5;%载波频率*106fm=i/5;%基带信号频率,码元数是10*106,而时域长度是5,也就是一个单位2*106个码元a=round(rand(1,i));%产生随机序列%产生基带信号stt=t;forn=1:10ifa(n)1form=j/i*(n-1)+1:j/i*nstt(m)=0;endelseform=j/i*(n-1)+1:j/i*nstt(m)=1;endendendfigure(1);subplot(311);plot(t,stt);title('基带信号stt');axis([0,5,-1,2]);%并行信号st1=t;forn=1:j/2ifstt(2*n-1)==1st1(n)=1;elsest1(n)=-1;endendsubplot(312);s1=st1(1:2000);plot(t1,s1);title('基带信号码st1');axis([0,2,-1,2]);st2=t;forn=1:j/2ifstt(2*n)==1st2(n)=1;elsest2(n)=-1;endendsubplot(313);s2=st2(1:2000);plot(t1,s2);title('基带信号码st2');axis([0,2,-1,2]);%载波信号s1=cos(2*pi*f*t);s2=-sin(2*pi*f*t);%调制F1=st1.*s1;%加入载波1同相IF2=st1.*s2;%加入载波2正交Qfigure(2);subplot(411);plot(t,F1);title('I:F1=s1*st1');axis([0,2,-1,2]);subplot(412);plot(t,F2);title('Q:F2=s2*st2');axis([0,2,-1,2]);e_fsk=F1+F2;subplot(413);plot(t,e_fsk);title('QPSK信号');axis([0,2,-1,2]);%加噪fsk=awgn(e_fsk,20)%在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。subplot(414);plot(t,fsk);title('加噪声后信号')axis([0,2,-1,2]);[f,sf1]=T2F(t,st1);[f,sf2]=T2F(t,st2);[f,sf3]=T2F(t,fsk);%傅里叶变换figure(3);subplot(311);plot(t,sf1);axis([2.3,2.7,-1,10]);title('s1');subplot(312);plot(t,sf2);axis([2.3,2.7,-1,10]);title('s2');subplot(313);plot(t,sf3);axis([2.3,2.7,-1,10]);title('加噪后的信号');%误码率计算Maxbit=1000;Eb=1;fori=1:20%信噪比从1到20dBforcnt=1:10%对于每个信噪比,进行10次实验,最后求平均SNR=10^(0.1*i);%信噪比N0=Eb/SNR;Sigma=sqrt(N0/2);b=rand(1,Maxbit);%随机数据b_bin=round(b);%01比特流b2=sign(b_bin-0.5);%调制后的-1和+1比特流Noise=Sigma*randn(1,Maxbit);%snt调制信号与噪声叠加后的信号fsk1=fsk(1:1000);Snt=fsk1+Noise;%解调过程,抽样判决,0,判为-1,0,判为+1res(Snt0)=-1;res(Snt=0)=1;%Snt.*b2,解调正确,相乘结果为+1,若发生误码,结果为-1St=res.*fsk1;%err为误码的个数err(cnt)=length(find(St0));end%Pb计算信噪比为idB时的误比特率Pb(i)=(mean(err)/Maxbit)*100;endfigure(4);subplot(211);semilogy(Pb);xlabel('信噪比(dB)');ylabel('实际误码率Pe')%同上计算理论Maxbit=1000;Eb=1;fori=1:15forcnt=1:10b=rand(1,Maxbit);b_bin=round(b);b2=sign(b_bin-0.5);SNR=10^(0.1*i);N0=Eb/SNR;Sigma=sqrt(N0/2);Noise=Sigma*randn(1,Maxbit);Snt=b2+Noise;res(Snt0)=-1;res(Snt=0)=1St=res.*b2;err(cnt)=length(find(St0));endPb(i)=(mean(err)/Maxbit)*100;endfigure(4);subplot(212);semilogy(Pb);xlabel('信噪比(dB)');ylabel('理论误码率Pe')axis([0,10,0.1,10]);clearall;msg=randi([0,3],1,5000);%4进制,20个符号figure(1);stem(msg);msg1=pskmod(msg,4,pi/4);%4psk调制初始相位为pi/4msg2=awgn(msg1,5)scatterplot(msg2);title('SNR=5dB');axis([-1.2,1.2,-1.2,1.2]);%画星座图xlabel('f1')ylabel('f2')holdon;rectangle('Position',[-1,-1,2,2],'Curvature',[1,1]);axisequal;%画圆clearall;msg=randi([0,3],1,5000);%4进制,20个符号figure(2);stem(msg);msg1=pskmod(msg,4,pi/4);%4psk调制初始相位为pi/4msg2=awgn(msg1,10)scatterplot(msg2);title('SNR=10dB');axis([-1.2,1.2,-1.2,1.2]);%画星座图xlabel('f1')ylabel('f2')holdon;rectangle('Position',[-1,-1,2,2],'Curvature',[1,1]);axisequal;%画圆%用于频谱的函数function[f,sf]=T2F(t,st)%利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。%脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。%Inputisthetimeandthesignalvectors,thelengthoftimemustgreater%than2%Outputisthefrequencyandthesignalspectrumdt=t(2)-t(1);T=t(end);df=1/T;N=length(st);f=-N/2*df:df:N/2*df-df;sf=fft(st);sf=T/N*fftshift(sf);end六、总结对于这次仿真实践,我最大的感想就是“太难了!”。之前我接触的matlab只是较为简单的编程和simulink的应用,对QPSK调制这种长而复杂的编程不但心存恐惧,还完全没有头绪。一开始我希望求助于书本已经有的模型,但发现资料少有后,决定自己仔细研究。QPSK(4psk)等是数字信号常用的调制信号,它的原理模型并不复杂,但是由于matlab语言的兼容性强大,它的语言类型太复杂,很多函数使用时我对参数非常茫然,好在经过研究,最后完成了设计和这份报告。总结一下,在设计QPSK调制解调系统时,需要对参数的正确了解、对采样概念的理解。在对一个软件不理解的时候,原版的说明书是非常好的工具,比如matlab有专门的网站放置说明文件和社区分享使用者的程序。通过这次设计实验,我更加深入了解了QPSK等调制方法的可行性,也熟悉了matlab诸多通信工具函数的使用,还巩固了通信原理中基础参数的知识。七、参考文献[1]张祖凡,等通信原理.北京:电子工业出版社,2018[2]樊昌信,等通信原理第七版.北京:国防工业出版社,2012