www.gusucode.com > MATLAB——PI_4,DQPSK解调源码程序 > MATLAB——PI_4,DQPSK解调源码程序/pi4dqpsk_Demo/pi4dqpsk_Demo.m

    %*********************************************************************************
%****** pi/4 Differential Quadrature Phase Shift Keying Modulation*****
%**********************farhang.mohsen@gmail.com*************************
%********************************************************************************
%pi/4DQPSK is a popular variant of QPSK in which the phase change of
%carrier is limited to +45,-45,+135,-135 degrees. for more info about
%pi/4DQPSK look http://en.wikipedia.org/wiki/Phase-shift_keying.
%
%This program Demonstrates modulation of a sequence of random 
%symbols using pi/4DQPSK scheme and plots the scattered noisy 
%symbols and trajectories. 
%The variables (pi4dqpsk) and (pi4dqpsk_noisy) are the noise-free
%and noisy pi/4 DQPSK lowpass equivalents, respectively. The initial
%settings could be changed for different SNR, number of bits and 
%initial state. (Demo is tested on R2011b and works properly)
%********************************************************************************

%-----------------------------------initial settings-----------------------------
clc%clear the command window
help pi4dqpsk_Demo %Introduction to Demo
clear%clear the workspace
SNR=25;%Signal to Noise Ratio in dB
n=1000;%number of bits to be modulated
d=randi(4,1,n/2)-1;%create n/2 random symbols from set {0,1,2,3}
IQ=[1;0]; %arbitrary initial state in InPhase-Quadrature
pi4dqpsk=zeros(1,n/2); %empty pi4dqpsk vector
%------------------------------------modulation------------------------------
for i=1:n/2
    switch d(i)
        case 0
            theta=pi/4;
        case 1
            theta=3*pi/4;
        case 2
            theta=-3*pi/4;
        case 3
            theta=-pi/4;
    end
    a=[cos(theta) -sin(theta);sin(theta) cos(theta)];
    IQ=a*IQ;
    pi4dqpsk(i)=IQ(1)+IQ(2)*1j;
end
pi4dqpsk_noisy=awgn(pi4dqpsk,SNR,'measured');
%-----------------------------scatter plot & trajectory-----------------------
hScope = commscope.ScatterPlot;
hScope.SamplesPerSymbol = 1;
update(hScope,pi4dqpsk_noisy)
hScope.PlotSettings.SignalTrajectory='on';
hold on 
scatter(real(pi4dqpsk),imag(pi4dqpsk),'ro');
%--------------------------------------------------------------------------