% % [ 0 、预处理]
clc;
clear;
close all;
% % [ 1 、配置参数]
N= 1000000 ; % 数据点数(个)
SNR_dB= 0 : 10 ; % 信噪比(dB形式)
SNR= 10. ^ ( SNR_dB/ 10 ) ; % 信噪比(一般形式,Eb/ N0)
Ps= 1 ; % 信号功率,为1 时其dB形式为0 。
Pn= Ps. / SNR; % 噪声功率
Error_Count= zeros ( 1 , length ( SNR_dB) ) ; % 码元错误个数
SER_simu= zeros ( 1 , length ( SNR_dB) ) ; % 仿真误码率
SER_theory= zeros ( 1 , length ( SNR_dB) ) ; % 理论误码率
Demod= zeros ( length ( SNR_dB) , N) ; % 解调信号
xn= zeros ( length ( SNR_dB) , N) ; % 加噪信号xn
% % [ 2 、生成信号]
sn= round ( rand ( 1 , N) ) ; % 原信号: 0 , 1 序列sn
sn1= round ( ( sn- 1 / 2 ) * 2 ) ; % 原信号:- 1 , 1 序列sn1
var ( sn1)
for i= 1 : length ( SNR_dB)
% 这里给出三种加噪方法,三种方法的最终结果基本一致。
% % 1 、wgn函数生成白噪声
% noise= wgn ( 1 , N, 10 * log10 ( Pn ( i) / 2 ) ) ; % 第三个参数指噪声的功率(dBW)
% xn ( i, : ) = sn1+ noise;
% 2 、awgn函数生成白噪声
% xn ( i, : ) = awgn ( sn1, SNR_dB ( i) + 10 * log10 ( 2 ) , "measured" ) ; % 第二个参数指SNR(dB)
% 3 、randn函数生成白噪声
noise = sqrt ( Pn ( i) / 2 ) * randn ( 1 , N) ; % 高斯白噪声
xn ( i, : ) = sn1+ noise;
end
% % [ 3 、解码]
for i= 1 : length ( SNR_dB)
for j= 1 : N
if ( xn ( i, j) > 0 )
Demod ( i, j) = 1 ; % 接收信号大于0 ,则判1
else
Demod ( i, j) = 0 ; % 接收信号小于0 ,则判0
end
end
% 计算错误比特个数
for j= 1 : N
if ( Demod ( i, j) ~ = sn ( 1 , j) )
Error_Count ( i) = Error_Count ( i) + 1 ;
end
end
% 计算误码率
SER_simu ( i) = Error_Count ( i) / N; % 仿真误码率
SER_theory ( i) = qfunc ( sqrt ( 2 * SNR ( i) ) ) ; % 理论误码率
end
% % [ 4 、显示结果]
semilogy ( SNR_dB, SER_simu, 'go-' , SNR_dB, SER_theory, 'r*-' ) ;
axis ( [ 0 10 10 ^ - 5 10 ^ - 1 ] ) ;
xlabel ( '信噪比SNR/dB' ) ; % 横轴坐标
ylabel ( '误码率BER' ) ; % 纵轴坐标
title ( "AWGN在BPSK信道下的理论误码率和仿真误码率" ) ;
grid on; % 显示表格线
legend ( "仿真值" , "理论值" ) ;