QPSK Matlab仿真

QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式。 在数字信号的调制方式中QPSK四相移键控是目前最常用的一种卫星数字信号调制方式。
发送信号对应相位,星座图:
             QPSK Matlab仿真_第1张图片
解调框图:
QPSK Matlab仿真_第2张图片
相关参数 采样速率:48KHz, 数据速率2.4KHz,载波频率:4KHz,  信号数据长度:20000点。
滤波器参数 81阶 通带截止频率2.5Khz 阻带频率3.6Khz
       波形:
QPSK Matlab仿真_第3张图片
仿真代码:
注意:此处Num1为滤波器系数,可以用FDA tool产生后导出到workspace供程序调用。

%QPSK====================================
N=20000;
fs=48000;
fc=4000;
data=[1 0 0 0 1 1 0 1 0 1];
d1=repmat(data,1,200);
data2=zeros(1,N);
for m=0:length(d1)/2-1
    if d1(2*m+1) == 0
        if d1(2*m+2)==0
            data2(20*m+1:20*m+20)=cos(2*pi*fc/fs*[20*m+1:20*m+20]-0.75*pi);
        else
            data2(20*m+1:20*m+20)=cos(2*pi*fc/fs*[20*m+1:20*m+20]+0.75*pi);
        end
    else
        if d1(2*m+2) == 0
             data2(20*m+1:20*m+20)=cos(2*pi*fc/fs*[20*m+1:20*m+20]-0.25*pi);
        else
             data2(20*m+1:20*m+20)=cos(2*pi*fc/fs*[20*m+1:20*m+20]+0.25*pi);%调制,每两个码元,决定一次相位
        end
    end
    
end
%========================================================

% fft1=fft(data2);
% plot(-fs/2+(0:N-1)*fs/(N),fftshift(abs(fft1)));
%=======================================
%========================================
% plot(data2);
%  axis([850 1000 -1.5 1.5]);
%  grid on;
%=======================================

dataQ=data2.*cos(2*pi*fc/fs*[1:length(data2)]);
dataI=data2.*sin(2*pi*fc/fs*[1:length(data2)]);%同步解调
%========================================
%  fft1=fft(dataQ);
%  plot(-fs/2+(0:N-1)*fs/(N),fftshift(abs(fft1)));
%========================================
%   plot(dataQ);
%   axis([750 1000 -1.5 1.5]);
%   grid on;
%=======================================
fq=conv(dataQ,Num1);
fi=conv(dataI,Num1);%滤波,Num1为滤波器系数
%========================================
  plot(fi);
  axis([0 2000 -1.5 1.5]);
  grid on;
%=======================================
sq=zeros(1,length(fq));
si=zeros(1,length(fi));
for k1=1:length(fq)%判决
    if fq(k1)>0
        sq(k1)=1;
    else
        sq(k1)=0;
    end
     if fi(k1)>0
        si(k1)=0;
    else
        si(k1)=1;
    end
   
end
 sq1=sq(91:20:length(sq));
 si1=si(91:20:length(si));%抽取,20分频抽取
 stairs(sq1);
    axis([0 200 -1.5 1.5]);
%   grid on;
datao=zeros(1,2*length(sq1));

for k2=1:length(sq1)
    datao(2*k2:2*k2+1)=[sq1(k2),si1(k2)];%串并转换
end
 stairs(datao);                         %阶梯输出
 axis([800 910 -1.5 1.5]);
 grid on;


你可能感兴趣的:(matlab)