通信对抗原理实验报告实验名称:四相移相键控(QPSK)调制及解调实验学生姓名:学生学号:学生班级:所学专业:实验日期:1. 实验目的1. 掌握QPSK 调制解调原理及特性。
2.. 熟悉Matlab 仿真软件的使用。
2. 实验内容1、 编写Matlab 程序仿真QPSK 调制及相干解调。
2、 观察IQ 两路基带信号的特征及与输入NRZ 码的关系。
3、 观察IQ 调制解调过程中各信号变化。
4、 观察功率谱的变化。
5、 分析仿真中观察的数据,撰写实验报告。
3. 实验原理1、QPSK 调制原理QPSK 又叫四相绝对相移调制,它是一种正交相移键控。
QPSK 利用载波的四种不同相位来表征数字信息。
由于每一种载波相位代表两个比特信息,因此,对于输入的二进制数字序列应该先进行分组,将每两个比特编为一组,然后用四种不同的载波相位来表征。
我们把组成双比特码元的前一信息比特用a 代表,后一信息比特用b 代表。
双比特码元中两个信息比特ab 通常是按格雷码排列的,它与载波相位的关系如表1-1所示,矢量关系如图1-1所示。
图1-1(a )表示A 方式时QPSK 信号矢量图,图1-1(b )表示B 方式时QPSK 信号的矢量图。
由于正弦和余弦的互补特性,对于载波相位的四种取值,在A 方式中:45°、135°、225°、315°,则数据、通过处理后输出的成形波形幅度有两种取值±;B 方式中:0°、90°、180°、270°,则数据、通过处理后输出的成形波形幅度有三种取值±1、0。
表1-1 双比特码元与载波相位关系k IkQ 2/2k IkQ图1-1 QPSK 信号的矢量图下面以A 方式的QPSK 为例说明QPSK 信号相位的合成方法。
串/并变换器将输入的二进制序列依次分为两个并行序列,然后通过基带成形得到的双极性序列(从D/A转换器输出,幅度为±)。
设两个双极性序列中的二进制数字分别为a 和b ,每一对ab 称为一个双比特码元。
双极性的a 和b 脉冲通过两个平衡调制器分别对同相载波及正交载波进行二相调制,得到图1-2中虚线矢量,将两路输出叠加,即得到QPSK 调制信号,其相位编码关系如表1-2所示。
图1-2 矢量图表1-(0,1)(1,1)(0,0)参考相位参考相位(a)(b)2/2a(1)b(1)b(0)a(0)用调相法产生QPSK 调制器框图如图1-3所示。
图1-3 QPSK 调制器框图图1-4 二进制码经串并变换后码型由图1-3可以看到,QPSK 的调制器可以看作是由两个BPSK 调制器构成,输入的串行二进制信息序列经过串并变换,变成两路速率减半的序列,电平发生器分别产生双极性的二电平信号I (t )和Q (t ),然后对和进行调制,相加后即可得到QPSK 信号。
经过串并变换后形成的两个支路如图1-4所示,一路为单数码元,另外一路为偶数码元,这两个支路互为正交,一个称为同相支路,即I 支路;另外一路称为正交支路,即Q 支路。
2、QPSK 相干解调原理QPSK 由于QPSK 可以看作是两个正交2PSK 信号的合成,故它可以采用与2PSK 信号类似的解调方法进行解调,即由两个2PSK 信号相干解调器构成,其原理框图如图1-5所示。
01010011011100cos A t ωsin A t ω图1-5 QPSK解调原理框图3、星座图星座显示是示波器显示的数字等价形式,将正交基带信号的I和Q两路分别接入示波器的两个输入通道,通过示波器的“X-Y”的功能即可以很清晰地看到调制信号的星座图。
我们知道QPSK信号可以用正交调制方法产生。
在它的星座图中,四个信号点之间任何过渡都是可能的,如图1-6(a)所示。
OQPSK信号将正交路信号偏移T2 /2,结果是消除了已调信号中突然相移180度的现象,每隔T2 /2信号相位只可能发生±90度的变化。
因而星座图中信号点只能沿正方形四边移动,如图1-6(b)所示。
MSK信号配置图如图1-6(c)所示,1比特区间仅使用圆周的1/4,信号点必是轴上4个点中任何一个,因此,相位必然连续。
(a)QPSK(b)OQPSK (c)MSK 图1-6 相位转移图4.实验代码clear all;j=sqrt(-1);data2=randint(1,100); data2_out=zeros(1,100); data2_1=zeros(1,50); data2_2=zeros(1,50);Ia=zeros(1,200);Qa=zeros(1,200);error_rate=zeros(1,50); mi=0.8;mq=1.5;i=1;while i<101if mod(i,2)==1;data2_1(1,i/2+0.5)=data2(1,i);elsedata2_2(1,i/2)=data2(1,i);endi=i+1;enddata24=data2_2+data2_1*2;i=1;while i<51if data24(1,i)==0Ia(1,4*i)=1;Ia(1,4*i-1)=1;Ia(1,4*i-2)=1;Ia(1,4*i-3)=1;Qa(1,4*i-0)=0;Qa(1,4*i-1)=0;Qa(1,4*i-2)=0;Qa(1,4*i-3)=0;elseif data24(1,i)==1Ia(1,4*i)=0;Ia(1,4*i-1)=0;Ia(1,4*i-2)=0;Ia(1,4*i-3)=0;Qa(1,4*i)=-1;Qa(1,4*i-1)=-1;Qa(1,4*i-2)=-1;Qa(1,4*i-3)=-1;elseif data24(1,i)==2Ia(1,4*i)=0;Ia(1,4*i-1)=0;Ia(1,4*i-2)=0;Ia(1,4*i-3)=0;Qa(1,4*i)=1;Qa(1,4*i-1)=1;Qa(1,4*i-2)=1;Qa(1,4*i-3)=1;elseif data24(1,i)==3Ia(1,4*i)=-1;Ia(1,4*i-1)=-1;Ia(1,4*i-2)=-1;Ia(1,4*i-3)=-1;Qa(1,4*i)=0;Qa(1,4*i-1)=0;Qa(1,4*i-2)=0;Qa(1,4*i-3)=0;endendendendi=i+1;endFd=1;Fs=4;[num,den] = rcosine(Fd,Fs,'fir',0.5,3); B=Ia;Ia=conv(B,num);Ia=Ia(1,12:211);C=Qa;Qa=conv(C,num);Qa=Qa(1,12:211);subplot(5,1,1);plot(1:200,Ia);subplot(5,1,2);plot(1:200,Qa);fc=177;cos_c=zeros(1,200);sin_c=zeros(1,200);i=1;while i<201cos_c(1,i)=cos(2*pi*i*fc/4);sin_c(1,i)=sin(2*pi*i*fc/4);i=i+1;enddata_in=Ia.*cos_c+Qa.*sin_c;for x=0:1:49error_m=0;for y=1:100data_out=awgn(data_in,x/5);data_out_c=data_out.*cos_c;data_out_s=data_out.*sin_c;doc_f=fft(data_out_c);la_f=fft(Ia);doc_f_mag=abs(doc_f);doc_f_ang=angle(doc_f);for i=51:1:149doc_f_mag(1,i)=doc_f_mag(1,i)/3; endI_j=doc_f_mag.*exp(j*doc_f_ang);Ia_j1=ifft(I_j);Ia_j1=real(Ia_j1);for i=1:50sum=0;for n=1:4;sum=sum+Ia_j1(1,4*(i-1)+n);endsum=sum/4;if sum>=miF(1,4*i-3)=1;F(1,4*i-2)=1;F(1,4*i-1)=1;F(1,4*i)=1;elseif sum<=-miF(1,4*i-3)=-1;F(1,4*i-2)=-1;F(1,4*i-1)=-1;F(1,4*i)=-1;elseF(1,4*i-3)=0;F(1,4*i-2)=0;F(1,4*i-1)=0;F(1,4*i)=0;endendendIa_j=F;dos_f=fft(data_out_s);Qa_f=fft(Qa);dos_f_mag=abs(dos_f);dos_f_ang=angle(dos_f);for i=51:1:149dos_f_mag(1,i)=dos_f_mag(1,i)/3;endQ_j=dos_f_mag.*exp(j*dos_f_ang);Qa_j1=ifft(Q_j);Qa_j1=2*real(Qa_j1);for i=1:50sum=0;for n=1:4;sum=sum+Qa_j1(1,4*(i-1)+n);endsum=sum/4;if sum>=mqG(1,4*i-3)=1;G(1,4*i-2)=1;G(1,4*i-1)=1;G(1,4*i)=1;elseif sum<=-mqG(1,4*i-3)=-1;G(1,4*i-2)=-1;G(1,4*i-1)=-1;G(1,4*i)=-1;elseG(1,4*i-3)=0;G(1,4*i-2)=0;G(1,4*i-1)=0;G(1,4*i)=0;endendendQa_j=G;for i=1:50if Ia_j(1,4*i-2)==1&&Qa_j(1,4*i-2)==0data2_out(1,2*i-1)=0;data2_out(1,2*i)=0;elseif Ia_j(1,4*i-2)==0&&Qa_j(1,4*i-2)==1 data2_out(1,2*i-1)=1;data2_out(1,2*i)=0;elseif Ia_j(1,4*i-2)==-1&&Qa_j(1,4*i-2)==0data2_out(1,2*i-1)=1;data2_out(1,2*i)=1;elseif Ia_j(1,4*i-2)==0&&Qa_j(1,4*i-2)==-1 data2_out(1,2*i-1)=0;data2_out(1,2*i)=1;endendendendendfor i=1:100if data2(1,i)~=data2_out(1,i);error_m=error_m+1;endendenderror_rate(1,x+1)=error_m/10000;endsubplot(5,1,3);plot(1:200,Ia_j);subplot(5,1,4);plot(1:200,Qa_j);subplot(5,1,5);semilogy(0:0.2:9.8,error_rate);5.实验结果I,Q,误码率曲线图。