%% [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("仿真值","理论值");
【多天线传输技术】BPSK调制信号在AWGN信道下的理论误码率与仿真误码率
最新推荐文章于 2024-05-11 20:40:56 发布