matlab二进制数字基带传输系统仿真实践——通信原理篇——信噪比与误码率的计算

这里先明确几个点:

S:信号平均功率        N:噪声平均功率        Eb:每bit的信号能量           N0:噪声功率谱密度           Es:符号信号的能量      Rb:传信率,即每秒传输的bit数目     W(B):带宽        Ts(Tb):采样点的时间间隔          k:每个符号包含的bit数目

其中Es=Eb*k,Rb=k/Ts    故Es/N0=0.5*(S/R)*(W/Ts),S/N=(Eb/N0)*(Eb/N0)。
      对于基带双极性信道,由于B=1/2Ts,因此(Eb*k)/N0=(S/N)*(W/Ts),即S/N=2*(Es/N0)。

     2.Eb/N0:比特信噪比

        Es/N0:符号信噪比,Es/N0=log2(M)*Eb/N0。

     3.  通信原理书上的误码率的公式为:Pe=1/2*[1-erf(A/(√2*σn))]=1/2*erfc(A/(√2*σn))。

  在这里由于matlab中我们要用信噪比来计算,因此换算成SNR,由于SNR=10lg(Ps/Pn),因此换算之后,Eb/N0=10^(SNR/10)。

带入Pe式子中,得到Pe=1/2*erfc(sqrt(Eb/N0))),在程序中SNR是我们人为选定的,因此Pe=1/2*erfc(sqrt(10^(SNR/10)))),这就是理论误码率。

   此外,由于实际仿真中获得的误码率需要根据加入加性高斯白噪声得到的接收端信号与发送端信号进行比较,因此在加入加性高斯白噪声中,会涉及到这里面的SNR取值,这里我们加以推导,由于是双极性,只携带1bit信息,因此Es/N0=Eb/N0=(S/N)*(W/Ts)=S/N*0.5→→→S/N=2*(Eb/N0),这里的Eb/N0就是前文我们算出来的数值,因此带入加性高斯白噪声函数的SNR=10lg(S/N)=10lg(2*(Eb/N0))。

   下面来看实地matlab代码:

theory_SNR=0:1:10;
S_N=10.^(theory_SNR./10);
simu_SNR=10*log10(2.*S_N);
for SNR=0:1:10
    Gaus_noise_signal=awgn(send_signal,simu_SNR(SNR+1)); %加入高斯噪声信号  
    %匹配滤波器+绘制接收信号的波形图+抽样
    receive_signal=Matched_filter(encoder_length,Matched_filter_length,Bipolar_signal(),Gaus_noise_signal);
    %接受信号的星座图
    %scatter_plot(receive_signal);
    %title('接收信号的星座图');
    %硬判决
    judge_signal(receive_signal>0)=1;
    judge_signal(receive_signal<=0)=0;
    %误码率的统计
    [M,q]=biterr(Gen_code_mat,judge_signal); %统计没有经过解码的误码率
    X=reshape(judge_signal,length(judge_signal)/7,7);
    [I,A]=Block_decoder(X);
    B=reshape(I,1,sym_length);
    [num,rate]=biterr(trans_binary,B); %仿真统计经过解码的误码数目
    simu_err_rate(SNR+1)=rate;
    theory_err_rate(SNR+1)=0.5*erfc(sqrt(S_N(SNR+1)));%理论误码率
end

   误码率效果图:

  matlab二进制数字基带传输系统仿真实践——通信原理篇——信噪比与误码率的计算_第1张图片

你可能感兴趣的:(matlab二进制数字基带传输系统仿真实践——通信原理篇——信噪比与误码率的计算)