当前位置:首页 > 四相移相键控(QPSK)调制及解调实验
图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个点中任何一个,因此,相位必然连续。
QQsin分量左转1/4周IIcos分量右转1/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<101 if mod(i,2)==1;
data2_1(1,i/2+0.5)=data2(1,i); else
data2_2(1,i/2)=data2(1,i); end i=i+1; end
data24=data2_2+data2_1*2; i=1; while i<51
if data24(1,i)==0 Ia(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; else
if data24(1,i)==1 Ia(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; else
if data24(1,i)==2 Ia(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; else
if data24(1,i)==3 Ia(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; end end end end i=i+1; end Fd=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<201
cos_c(1,i)=cos(2*pi*i*fc/4); sin_c(1,i)=sin(2*pi*i*fc/4); i=i+1; end
data_in=Ia.*cos_c+Qa.*sin_c;
for x=0:1:49 error_m=0; for y=1:100
data_out=awgn(data_in,x/5);
data_out_c=data_out.*cos_c; data_out_s=data_out.*sin_c;
ythd_f=fft(data_out_c); la_f=fft(Ia);
ythd_f_mag=abs(ythd_f); ythd_f_ang=angle(ythd_f); for i=51:1:149
ythd_f_mag(1,i)=ythd_f_mag(1,i)/3; end
I_j=ythd_f_mag.*exp(j*ythd_f_ang); Ia_j1=ifft(I_j); Ia_j1=real(Ia_j1);
for i=1:50 sum=0; for n=1:4;
sum=sum+Ia_j1(1,4*(i-1)+n); end sum=sum/4; if sum>=mi F(1,4*i-3)=1; F(1,4*i-2)=1; F(1,4*i-1)=1; F(1,4*i)=1; else
if sum<=-mi F(1,4*i-3)=-1; F(1,4*i-2)=-1; F(1,4*i-1)=-1; F(1,4*i)=-1; else
F(1,4*i-3)=0; F(1,4*i-2)=0; F(1,4*i-1)=0; F(1,4*i)=0; end end end Ia_j=F;
dos_f=fft(data_out_s); Qa_f=fft(Qa);
共分享92篇相关文档