www.pudn.com > QPSK+Rayleigh(AWGN)Simulation.zip > QPSK.m


clear all; 
clc; 
num=100;                                  %原始信息序列长度 
samp=100;                                 %采样点数 
delta_T=1/samp;                           %采样间隔 
N=samp*num;                               %总的采样点数 
msg_orig=randint(1,num);                  %序列生成 
data1=2*msg_orig-1;                       %单/双极性变换 
 
ry_I=raylrnd(0.8,1,num/2);                %以0.8为参数的瑞利衰落 
ry_Q=raylrnd(0.8,1,num/2);                %以0.8为参数的瑞利衰落 
 
for i=1:num 
    data1_orig(samp*(i-1)+1:samp*i)=data1(i);%对data1进行采样 
end 
for i=1:2000 
    data(i)=data1_orig(i); 
end 
%--------------------------------------------画信源及频谱图----------------------- 
 
figure(1); 
subplot(2,1,2);                              %在一个窗口里画两个图 
pwelch(data1_orig,[],[],[],10);              %画信源的频谱图 
subplot(2,1,1); 
x1=0+0.01:0.01:100; 
plot(x1,data1_orig);                          %画信源的图型 
axis([0 10 -1.2 1.2]);                       %画信源图时规定两坐标轴的范围 
 
%----------------------------------将信息源分成两路 ,并对第I路信号抽样------------------------- 
data11=zeros(1,samp*num/2);               
for i1=1:num/2   
    data11(samp*(i1-1)+1:samp*i1)=data1(2*i1-1);%I路信号是信源的第奇数个码元,并对它抽样 
end 
 
%----------------------------------将信息源分成两路,并对第Q路信号抽样------------------------- 
data12=zeros(1,samp*num/2);               
for i2=1:num/2   
    data12(samp*(i2-1)+1:samp*i2)=data1(2*i2);% 
end 
 
%------------------------------------------对余弦载波抽样------------------------------ 
for j1=1:samp*num/2                       
    a1(j1)=cos((j1-1)*2*pi/100);                 %每个余弦波每个周期采50个点 
end 
 
%------------------------------------------对正弦载波抽样------------------------------ 
for j2=1:samp*num/2                       
    a2(j2)=sin((j2-1)*2*pi/100); 
end 
 
%---------------------------------------------调制------------------------------------- 
data21=data11.*a1;                              %I路用余弦调制                          
data22=data12.*a2;                              %Q路用正弦调制 
 
%--------------------------------------为两路信号加上瑞利衰落-------------------------- 
for i=1:num/2 
    data21_ray(i)=data21(i)*ry_I(i); 
    data22_ray(i)=data22(i)*ry_Q(i); 
end 
 
data2_modul=data21+data22;                    %调制后总的信号 
data2_ray=data21_ray+data22_ray;              %加瑞利衰落后总的信号 
 
for i=1:1000 
    data2_modul_t(i)=data2_modul(i); 
end 
%-----------------------------------------画调制后的信号波形和频谱图--------------- 
figure(2);      
subplot(2,1,2); 
pwelch(data2_modul,[],[],[],10); 
 
subplot(2,1,1); 
x2=0+0.01:0.01:10; 
plot(x2,data2_modul_t); 
 
 
data3=awgn(data2_modul,1,'measured');           %经过AWGN信道 
for i=1:1000 
    data3_t(i)=data3(i); 
end 
%-----------------------------------画经过高斯信道后的信号波形和频谱图---------------------- 
figure(3);     
subplot(2,1,2); 
pwelch(data3,[],[],[],10); 
 
subplot(2,1,1); 
plot(x2,data3_t); 
 
 
%------------------------------------------------星座图-------------------------------------------- 
clear;                                          
N=1000; 
s00=[1 0]; s01=[0 -1]; s11=[-1 0]; s10=[0 1];   %  信号映射 
SNRindB1=8; 
E=1;                                            % 码元能量 
snr=10^(SNRindB1/10);  
sgma=sqrt(E/snr)/2;  
for i=1:N 
    temp=rand;                                  % 生成取值在0和1之间的服从均匀分布的随机变量 
    if (temp<0.25),                             % 概率为1/4的信源符号 "00" 
        dsource1(i)=0; dsource2(i)=0; 
        s(i)=complex(s00(1),s00(2)); 
    elseif (temp<0.5),                          % 概率为1/4的信源符号 "01" 
        dsource1(i)=0; dsource2(i)=1; 
        s(i)=complex(s01(1),s01(2)); 
    elseif (temp<0.75),                         % 概率为1/4的信源符号 "10" 
        dsource1(i)=1; dsource2(i)=0; 
        s(i)=complex(s10(1),s10(2)); 
    else                                        % 概率为1/4的信源符号 "11" 
        dsource1(i)=1; dsource2(i)=1; 
        s(i)=complex(s11(1),s11(2)); 
    end; 
end; 
 
 
for i=1:N                                       %通过Raleigh信道之前的的星座图 
     
    n=sgma*randn(1,2);                           
    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; 
    rr(i)=complex(r(1),r(2)); 
end; 
figure(4); 
for i=1:1000 
    subplot(2,1,1) 
plot(rr(i),'b*'); 
hold on; 
end; 
subplot(2,1,1) 
plot(s,'rd'); 
title('Before Rayleigh');  
grid on; 
hold off; 
 
                                                  % 通过Raleigh信道之后的的星座图 
for i=1:N 
    m=raylrnd(0.7);                               % 生成服从Rayleigh分布的随机变量 
    n=sgma*randn(1,2);                            % 生成两个服从N(0,sgma)的随机变量 
    if ((dsource1(i)==0) & (dsource2(i)==0)),  
        r=m*s00+n; 
    elseif ((dsource1(i)==0) & (dsource2(i)==1)),  
        r=m*s01+n; 
    elseif ((dsource1(i)==1) & (dsource2(i)==0)),  
        r=m*s10+n; 
    else  
        r=m*s11+n; 
    end; 
    rr(i)=complex(r(1),r(2)); 
end; 
figure(4); 
for i=1:1000 
    subplot(2,1,2) 
plot(rr(i),'b*'); 
hold on; 
end; 
subplot(2,1,2) 
plot(s,'rd'); 
title('After Rayleigh');  
grid on; 
hold off;