%单发单收
clear all
close all
clc
N=1e5/5;
SNR=0:2:20;
%预分配空间
data_qpsk=zeros(1,N); %调制信号
demod_yawgn_ray=zeros(1,N);
demod_bitray=zeros(N,2);
%误码率和BER
biterr_awgnray=zeros(1,length(SNR));
symerr_awgnray=zeros(1,length(SNR));
%电平映射
data=randi([0 1],N,2);
[a1,b1]=find(data(:,1)==1&data(:,2)==1);
data_qpsk(a1)=1+1j;
[a2,b2]=find(data(:,1)==0&data(:,2)==1);
data_qpsk(a2)=-1+1j;
[a3,b3]=find(data(:,1)==0&data(:,2)==0);
data_qpsk(a3)=-1-1j;
[a4,b4]=find(data(:,1)==1&data(:,2)==0);
data_qpsk(a4)=1-1j;
%瑞利衰落
% ray=raylrnd(0.5,1,N);
% data_qpsk_ray=data_qpsk.*ray;
ray=rayleigh(0,1,N);
data_qpsk_ray=data_qpsk.*ray;
Noise=zeros(N,1);
Eb=1;
N0=Eb./(10.^(SNR./10));
for i=1:length(N0);
% -------------------------Rayleigh衰落添加白噪声----------------------
% yAWGNNoise_ray=awgn(data_qpsk_ray,SNR(i),'measured');
Noise=sqrt(N0(1,i))*sqrt(1/2)*(randn(1,N)+randn(1,N)*sqrt(-1));%AWGN(0,N0(i),N)+1j*AWGN(0,N0(i),N); %产生高斯噪声
yAWGNNoise_ray=data_qpsk_ray+Noise;
yAWGNNoise_ray=yAWGNNoise_ray./ray;
% yAWGNNoise_ray=yAWGNNoise_ray.*conj(ray)./(abs(ray).^2);
%判决
y1=find(angle(yAWGNNoise_ray(1,:))>=0&angle(yAWGNNoise_ray(1,:))<pi/2);
%find()输入数据为行向量,y为行向量
demod_yawgn_ray(y1)=1+1j;
demod_bitray(y1,1)=1;
demod_bitray(y1,2)=1;
y2=find(angle(yAWGNNoise_ray(1,:))>=pi/2&angle(yAWGNNoise_ray(1,:))<pi);
demod_yawgn_ray(y2)=-1+1j;
demod_bitray(y2,1)=0;
demod_bitray(y2,2)=1;
y3=find(angle(yAWGNNoise_ray(1,:))>=-pi&angle(yAWGNNoise_ray(1,:))<-pi/2);
demod_yawgn_ray(y3)=-1-1j;
demod_bitray(y3,1)=0;
demod_bitray(y3,2)=0;
y4=find(angle(yAWGNNoise_ray(1,:))>=-pi/2&angle(yAWGNNoise_ray(1,:))<0);
demod_yawgn_ray(y4)=1-1j;
demod_bitray(y4,1)=1;
demod_bitray(y4,2)=0;
%多进制调制 Pe和Pb需要分别计算 通常Pb<=Pe
%误比特率计算 P121通信原理
[bitnum_awgnray,bitratio_awgnray]=biterr(demod_bitray,data);
%biterr只能对二进制无符号数进行统计
biterr_awgnray(i)=bitnum_awgnray/(2*N);
%误码率(误符号率)
[symnum_awgnray,symratio_awgnray]=symerr(demod_yawgn_ray,data_qpsk);
symerr_awgnray(i)=symnum_awgnray/N;
end
ber=berfading(SNR,'psk',4,1);
figure('name','QPSK系统在Rayleigh信道下的性能比较');
semilogy(SNR,biterr_awgnray,'-c','LineWidth',1.5);
grid on
hold on
%semilogy(SNR,symerr_awgnray,'-.*r','LineWidth',1.5);
semilogy(SNR,ber,'-.*b','Linewidth',1.5);
title('QPSK系统Rayleigh信道下误比特率分析');
xlabel('Eb/No');
ylabel('Pb');
axis([0 20 10^-5 1]);
legend('Rayleigh-biterr','QPSK调制下标准瑞利衰落'); %'Rayleigh-symerr',