%****************************************************************
% 内容概述:未编码传输AWGN信道测试
% 每帧的输入是相同的,(不是每帧都不一样,这样可以大幅降低计算量)
% 在帧比特足够多的情况下,应该可以保证随机性(未理论证实)
% 注意两点,1、EsN0与EbN0的区别 2、复高斯噪声的功率
%****************************************************************
clear;
clc;
close all;
M = 4;%4QAM
K = log2(M);
EbN0dB = 0 : 0.1: 10;
EbNoLinear = 10.^(EbN0dB.*0.1);
EsN0dB = EbN0dB + 10*log10(K);
EsNoLinear = 10.^(EsN0dB.*0.1);
num_block_size = 1000000; %测试的块尺寸,指包含尾比特的软输入系统系列长度
ber=zeros(1,length(EsN0dB)); %初始化错误比特率
x = randi([0 M-1],1,num_block_size);
txbit = dec2bin(x);
y = qammod(x,M,'gray','UnitAveragePower',true,'PlotConstellation',true);
for nEN=1:length(EbN0dB)
errs=0;
sigma=1/sqrt(2*EsNoLinear(nEN));
noise = randn(1,num_block_size)+j*randn(1,num_block_size); %噪声
awgn_in=y + sigma*noise; %信息噪声叠加
rxSymb = qamdemod(awgn_in,M,'gray','UnitAveragePower',true);
rxbit = dec2bin(rxSymb);
errs = sum(rxbit~=txbit,'all');%当前点错误bit数
ber(1,nEN)= errs/(K * num_block_size);%误比特率
fprintf('snr:%1.2f;误码率:%8.4e;\n',...
EbN0dB(nEN),ber(1,nEN));
end
figure;
semilogy(EbN0dB,ber(1,:));
ylabel('Bit Error Rate');
%--------------------- Theory ----------------------
berTheory1 = -1.5 * erfc(sqrt(EbNoLinear));
berTheory2 = berawgn(EbN0dB,'QAM',4,'nodiff');
grid on;hold on;
semilogy(EbN0dB,berTheory1,'r--');semilogy(EbN0dB,berTheory2,'g*');
xlabel('E_b/N_0 (dB)');
ylabel('Bit Error Rate');
title('未编码信息通过AWGN信道性能图 Vs QPSK Theoretical Error Rates' );
legend('Simulation','Theory1','Theory2')