clear all;
close all;
clc;
SNR_dB=0:10;
err_ber=zeros(1,length(SNR_dB));
BER_R = [0.07865,0.05628,0.03751,0.02288,0.0125,0.005954,0.002388,0.0007727,0.0001909,3.363e-05,3.872e-06];
for j=1:length(SNR_dB)
error_bit=0;
baseband_out=round(rand(500000,2));
[m,n]=size(baseband_out);
total_bit_num=m*n;
%qpsk调制
loc = find(baseband_out==0);
baseband_out(loc)=-1;
map_out = baseband_out(:,1)+1i*baseband_out(:,2);
%加噪声
receive_symbol=awgn(map_out,SNR_dB(j));
%qpsk解调
[m,n]=size(receive_symbol);
receive_bit_sig=zeros(m,2*n);
receive_bit_sig(:,1)=real(receive_symbol);
receive_bit_sig(:,2)=imag(receive_symbol);
d1=(receive_bit_sig(:,1)-1).^2+(receive_bit_sig(:,2)-1).^2;
d2=(receive_bit_sig(:,1)-(-1)).^2+(receive_bit_sig(:,2)-1).^2;
d3=(receive_bit_sig(:,1)-(-1)).^2+(receive_bit_sig(:,2)-(-1)).^2;
d4=(receive_bit_sig(:,1)-1).^2+(receive_bit_sig(:,2)-(-1)).^2;
for k=1:length(d1)
shuzu=[d1(k) d2(k) d3(k) d4(k)];
[x, y]=find(shuzu==min(min(shuzu)));
if y==1
receive_bit_sig(k,:)=[1 1];
elseif y==2
receive_bit_sig(k,:)=[-1 1];
elseif y==3
receive_bit_sig(k,:)=[-1 -1];
elseif y==4
receive_bit_sig(k,:)=[1 -1];
end
end
err_num=error_count(baseband_out,receive_bit_sig);
error_bit=error_bit+err_num
err_ber(j)=error_bit/total_bit_num;
end
semilogy(SNR_dB,err_ber,'r-o')
title('仅加入高斯白噪声情况下的BER')
legend('仅加噪声','标准bertool')
xlabel('SNR')%x轴
ylabel('BER')%y轴
grid on%打开网格
hold on%保留原来的画线
semilogy(SNR_dB,BER_R,'g-+')
legend('仅加噪声','标准bertool')
xlabel('SNR')
ylabel('BER')
grid on
hold on