1、通信系统仿真设计实训报告1. 课题名称:基于 MATLAB 的QPSK系统仿真设计与实现学生学号:学生姓名:所在班级:任课教师:2016年 10月25日目录1.1QPSK系统的应用背景简介31。2 QPSK实验仿真的意义31.3 实验平台和实验内容31.3.1实验平台31.3。2实验内容3二、系统实现框图和分析42。1、QPSK调制部分,42。2、QPSK解调部分5三、实验结果及分析63.1、理想信道下的仿真63.2、高斯信道下的仿真73.3、先通过瑞利衰落信道再通过高斯信道的仿真8总结:10参考文献:11附录121.1QPSK系统的应用背景简介QPSK是英文Quadrature Phase
2、Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式。在19世纪80年代初期,人们选用恒定包络数字调制。这类数字调制技术的优点是已调信号具有相对窄的功率谱和对放大设备没有线性要求,不足之处是其频谱利用率低于线性调制技术.19世纪80年代中期以后,四相绝对移相键控(QPSK)技术以其抗干扰性能强、误码性能好、频谱利用率高等优点,广泛应用于数字微波通信系统、数字卫星通信系统、宽带接入、移动通信及有线电视系统之中。1。2 QPSK实验仿真的意义通过完成设计内容,复习QPSK调制解调的基本原理,同时也要复习通信系统的主要组成部分,了解调制解调方式中最基础的方法.了解QPSK的实现
3、方法及数学原理。并对“通信”这个概念有个整体的理解,学习数字调制中误码率测试的标准及计算方法。同时还要复习随机信号中时域用自相关函数,频域用功率谱密度来描述平稳随机过程的特性等基础知识,来理解高斯信道中噪声的表示方法,以便在编程中使用.理解QPSK调制解调的基本原理,并使用MATLAB编程实现QPSK信号在高斯信道和瑞利衰落信道下传输,以及该方式的误码率测试。复习MATLAB编程的基础知识和编程的常用算法以及使用MATLAB仿真系统的注意事项,并锻炼自己的编程能力,通过编程完成QPSK调制解调系统的仿真,以及误码率测试,并得出响应波形。在完成要求任务的条件下,尝试优化程序.通过本次实验,除了和
4、队友培养了默契学到了知识之外,还可以将次实验作为一种推广,让更多的学生来深入一层的了解QPSK以至其他调制方式的原理和实现方法。可以方便学生进行测试和对比.足不出户便可以做实验.1。3 实验平台和实验内容1。3.1实验平台本实验是基于Matlab的软件仿真,只需PC机上安装MATLAB 6.0或者以上版本即可.(本实验附带基于Matlab Simulink (模块化)仿真,如需使用必须安装simulink 模块)1。3。2实验内容1.构建一个理想信道基本QPSK仿真系统,要求仿真结果有a。基带输入波形及其功率谱b。QPSK信号及其功率谱 c。QPSK信号星座图2。构建一个在AWGN(高斯白噪声
5、)信道条件下的QPSK仿真系统,要求仿真结果有a.QPSK信号及其功率谱b。QPSK信号星座图c.高斯白噪声信道条件下的误码性能以及高斯白噪声的理论曲线,要求所有误码性能曲线在同一坐标比例下绘制3验可选做扩展内容要求:构建一个先经过Rayleigh(瑞利衰落信道),再通过AWGN(高斯白噪声)信道条件下的条件下的QPSK仿真系统,要求仿真结果有a。QPSK信号及其功率谱b。通过瑞利衰落信道之前和之后的信号星座图,前后进行比较c。在瑞利衰落信道和在高斯白噪声条件下的误码性能曲线,并和二.2.c中所要求的误码性能曲线在同一坐标比例下绘制二、系统实现框图和分析2。1、QPSK调制部分,原理框图如图1
6、所示1(t)QPSK信号s(t)二进制数据序列极性NRZ电平编码器分离器2(t)图1原理分析:基本原理及系统结构 QPSK与二进制PSK一样,传输信号包含的信息都存在于相位中。的别的载波相位取四个等间隔值之一,如/4, 3/4,5/4,和7/4。相应的,可将发射信号定义为 0tTSi(t) 0。, 其他其中,i1,2,2,4;E为发射信号的每个符号的能量,T为符号持续时间,载波频率f等于nc/T,nc为固定整数.每一个可能的相位值对应于一个特定的二位组。例如,可用前述的一组相位值来表示格雷码的一组二位组:10,00,01,11。下面介绍QPSK信号的产生和检测.如果a为典型的QPSK发射机框图
7、。输入的二进制数据序列首先被不归零(NRZ)电平编码转换器转换为极性形式,即负号1和0分别用和表示。接着,该二进制波形被分接器分成两个分别由输入序列的奇数位偶数位组成的彼此独立的二进制波形,这两个二进制波形分别用a1(t),和a2(t)表示。容易注意到,在任何一信号时间间隔内a1(t),和a2(t)的幅度恰好分别等于Si1和 Si2,即由发送的二位组决定.这两个二进制波形a1(t),和a2(t)被用来调制一对正交载波或者说正交基本函数:1(t),2(t).这样就得到一对二进制PSK信号.1(t)和2(t)的正交性使这两个信号可以被独立地检测.最后,将这两个二进制PSK信号相加,从而得期望的QP
8、SK。2。2、QPSK解调部分,原理框图如图2所示:1(t) 同相信道 门限0发送二进制序列的估计判决门限低通filrer判决门限复接器接收信 号x(t)低通filrer2(t)正交信道 门限0 图2原理分析:QPSK接收机由一对共输入地相关器组成。这两个相关器分别提供本地产生地相干参考信号1(t)和2(t)。相关器接收信号x(t),相关器输出地x1和x2被用来与门限值0进行比较。如果x10,则判决同相信道地输出为符号1;如果x10 ,则判决同相信道的输出为符号0。;类似地.如果正交通道也是如此判决输出.最后同相信道和正交信道输出这两个二进制数据序列被复加器合并,重新得到原始的二进制序列。在A
9、WGN信道中,判决结果具有最小的负号差错概率.三、实验结果及分析根据图1和图2的流程框图设计仿真程序,得出结果并且分析如下:3。1、理想信道下的仿真,实验结果如图3所示 图3实验结果分析:如图上结果显示,完成了QPSK信号在理想信道上的调制,传输,解调的过程,由于调制过程中加进了载波,因此调制信号的功率谱密度会发生变化。并且可以看出调制解调的结果没有误码。3.2、高斯信道下的仿真,结果如图4所示:图4实验结果分析:由图4可以得到高斯信道下的调制信号,高斯噪声,调制输出功率谱密度曲线和QPSK信号的星座图。在高斯噪声的影响下,调制信号的波形发生了明显的变化,其功率谱密度函数相对于图1中的调制信号
10、的功率谱密度只发生了微小的变化,原因在于高斯噪声是一个均值为0的白噪声,在各个频率上其功率是均匀的,因此此结果是真确的。星座图反映可接收信号早高斯噪声的影响下发生了误码,但是大部分还是保持了原来的特性。3。3、先通过瑞利衰落信道再通过高斯信道的仿真。实验结果如图5所示:图5实验结果分析:由图5可以得到瑞利衰落信道前后的星座图,调制信号的曲线图及其功率谱密度.最后显示的是高斯信道和瑞利衰落信道的误码率对比。由图可知瑞利衰落信道下的误码率比高斯信道下的误码率高。至此,仿真实验就全部完成。结 论本论文运用MATLAB中的动态仿真工具箱Simulink仿真实现了PCM系统的全部过程.根据PCM系统的组
11、成原理,在Simulink模块库中找到相应的模块,然后选择合适的模块以及设置适当的参数,建立了PCM通信系统的仿真模型,最后在给定仿真的条件下,运行了仿真系统。仿真结果表明:1.在正常的信噪比条件下,该通信系统失真较小,达到了预期的目的。2。Simulink仿真工具箱操作简单方便、调试直观,为通信系统的软件仿真实现提供了极大的方便。参考文献:1、MATLAB 宝典 陈杰等编著 电子工业出版社2、MATLAB信号处理 刘波, 文忠, 曾涯编著 北京电子工业出版社3、数字信号处理的MATLAB实现万永革编著北京科学出版社4、网上资料附录MATLAB程序% 调相法clear allclose all
12、t=1:0。01:7-0.01;tt=length(t);x1=ones(1,800);for i=1:tt if (t(i)=-1 t(i)=1) | (t(i)=5 t(i)=7); x1(i)=1; else x1(i)=1; endendt1=0:0。01:80.01;t2=0:0.01:7-0.01;t3=1:0。01:7。10。01;t4=0:0.01:8.10。01;tt1=length(t1);x2=ones(1,800);for i=1:tt1 if (t1(i)=0 & t1(i)0 data_recover_a(i:i+19)=1; bit_recover=bit_rec
13、over 1; else data_recover_a(i:i+19)=-1; bit_recover=bit_recover -1; endenderror=0;dd = 2*bit_in+1;ddd=dd;ddd1=repmat(ddd,20,1);for i=1:2e4 ddd2(i)=ddd1(i);endfor i=1:1e3 if bit_recover(i)=ddd(i) error=error+1; endendp=error/1000;figure(1)subplot(2,1,1);plot(t2,ddd2);axis(0 100 2 2);title(原序列);subplo
14、t(2,1,2);plot(t2,data_recover_a);axis(0 100 -2 2);title(解调后序列);效果图: 设定 T=1, 不加噪声clear allclose all% 调制bit_in = randint(1e3, 1, 0 1);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = 2*bit_I+1;data_Q = 2bit_Q+1;data_I1=repmat(data_I,20,1);data_Q1=repmat(data_Q,20,1);for i=1:1e4 data_I2(i)=data
15、_I1(i); data_Q2(i)=data_Q1(i);end;t=0:0.1:1e30.1;f=0:0。1:1;xrc=0.5+0.5cos(pif);data_I2_rc=conv(data_I2,xrc)/5。5;data_Q2_rc=conv(data_Q2,xrc)/5。5;f1=1;t1=0:0.1:1e3+0。9;I_rc=data_I2_rc。cos(2pi*f1t1);Q_rc=data_Q2_rc。sin(2pif1t1);QPSK_rc=(sqrt(1/2)。*I_rc+sqrt(1/2)。*Q_rc); 解调I_demo=QPSK_rc。cos(2pif1t1);Q
16、_demo=QPSK_rc.sin(2*pi*f1*t1);I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0。05;t3=0:0。1:1e30。1;data_recover=;for i=1:20:10000 data_recover=data_recover I(i:1:i+19) Q(i:1:i+19);end;ddd = 2bit_in+1;ddd1=repmat(ddd,10,1);for i=1:1e4 dd
17、d2(i)=ddd1(i);endfigure(1)subplot(4,1,1);plot(t3,I);axis(0 20 6 6);subplot(4,1,2);plot(t3,Q);axis(0 20 -6 6);subplot(4,1,3);plot(t2,data_recover);axis(0 20 6 6);subplot(4,1,4);plot(t,ddd2);axis(0 20 6 6);效果图: QPSK误码率分析SNRindB1=0:2:10;SNRindB2=0:0。1:10;for i=1:length(SNRindB1) pb,ps=cm_sm32(SNRindB1(
18、i)); smld_bit_err_prb(i)=pb; smld_symbol_err_prb(i)=ps;end;for i=1:length(SNRindB2) SNR=exp(SNRindB2(i)log(10)/10); theo_err_prb(i)=Qfunct(sqrt(2*SNR);end;title(QPSK误码率分析);semilogy(SNRindB1,smld_bit_err_prb,*);axis(0 10 10e8 1);hold on; semilogy(SNRindB1,smld_symbol_err_prb,o);semilogy(SNRindB2,theo
19、_err_prb);legend(仿真比特误码率,理论比特误码率);hold off;functiony=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));functionpb,ps=cm_sm32(SNRindB)N=10000;E=1;SNR=10(SNRindB/10);sgma=sqrt(E/SNR)/2;s00=1 0;s01=0 1;s11=1 0;s10=0 1;for i=1:N dsource1(i)=1 0 1 1 0 0 0 1 0 1 1 0 1 0 1 1;numofsymbolerror=0;numofbiterror=0;for i=1:N n=s
20、gmarandn(size(s00)); if(dsource1(i)=0)&(dsource2(i)=0)) r=s00+n; elseif(dsource1(i)=0)(dsource2(i)=1)) r=s01+n; elseif((dsource1(i)=1)(dsource2(i)=0)) r=s10+n; else r=s11+n; end; c00=dot(r,s00); c01=dot(r,s01); c10=dot(r,s10); c11=dot(r,s11); c_max=max(c00 c01 c10 c11); if (c00=c_max) decis1=0;decis
21、2=0; elseif(c01=c_max) decis1=0;decis2=1; elseif(c10=c_max) decis1=1;decis2=0; else decis1=1;decis2=1; end; symbolerror=0; if(decis1=dsource1(i) numofbiterror=numofbiterror+1; symbolerror=1; end; if(decis2=dsource2(i) numofbiterror=numofbiterror+1; symbolerror=1; end; if(symbolerror=1) numofsymbolerror=numofsymbolerror+1; end;end;ps=numofsymbolerror/N;pb=numofbiterror/(2N);效果图:11