通信链路基带仿真
仿真模型BPSK:
单极性码元(base_code),经过白高斯噪声信道(awgn),理想滤波(忽略载波调制,相干解调,低通滤波),判决,得到输出码元(dec_code)。其中EbN0为1到10。码元数量为10000时,采用bpsk调制时图像为
50组图像如下:
发现随着EbN0的增大,系统的误码率会降低;同时在高EbN0下系统的实际误码率与理论值偏差会逐渐减小。
解释:当Eb/N0增大时,意味着接收到的信号中的每个比特的能量相对于噪声更大,因此信号更容易被正确地检测和解码;在高Eb/N0条件下,由于误码事件变得非常稀少,统计误码率的样本数量变得非常大。统计得到的误码率可能与真实值相近。
在以错误比特数为100位终止条件,图像如下:
发现在设置错误100比特终止后,其曲线(传输比特数与SNR,及EbN0和BER关系)波动较大。
分析:原因可能是错误比特数过少,产生统计误差对实验影响较大,偏离理论较大。
完整代码:
clear all
close all
nsanp = 10;
s0=ones(1,nsanp);
s1=[ones(1,nsanp/2) -ones(1,nsanp/2)];
block=50;
nsymbol=100000;
EbN0=0:0.2:10;
SNR=[];
Transmit_Bits=[];
for k=1:block
msg=randi([0, 1], 1, nsymbol);
s00=zeros(nsymbol,1);
s11=zeros(nsymbol,1);
index0=find(msg==0);
s00(index0)=1;
s00=s00*s0;
index1=find(msg==1);
s11(index1)=1;
s11=s11*s1;
s=s00+s11;
s=s.';
for indx=1:length(EbN0)
decmsg=zeros(1,nsymbol);
r=awgn(s,EbN0(indx)-7);
SNR=[SNR EbN0(indx)-7];
r00=s0*r;
r11=s1*r;
indx1=find(r11>r00);
decmsg(indx1)=1;
err_nmb=0;
err_index=nsymbol;
for index3=1:length(msg)
if decmsg(indx)~=msg(indx)
err_nmb=err_nmb+1;
end
if err_nmb==100
err_index=index3;
break
end
end
disp(err_index)
msg1=msg(1:err_index);
decmsg1=decmsg(1:err_index);
[err,ber(indx)]=biterr(msg1,decmsg1);
Transmit_Bits=[Transmit_Bits nsymbol-err];
end
figure(1)
subplot(211)
semilogy(EbN0,ber,EbN0,qfunc(sqrt(10.^(EbN0/10))));
title('EbN0和BER的对数关系图')
xlabel('EbN0')
ylabel('BER')
hold on
subplot(212)
semilogx(SNR,Transmit_Bits)
title('不同信噪比下传输比特数')
xlabel('信噪比SNR')
ylabel('传输比特数')
hold on
end