gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第8章/li8_16fun.m
function [p]=li8_16fun(rho_in_dB) %子程序得出运算误码率,用dB值表示的信噪比为子程序的输入变量 rho=10^(rho_in_dB/10); Eb=rho; %每比特能量 if(rho>2) %如果rho>2优化alpha alpha=2/rho; else %如果rho<2优化alpha结束 alpha=1; end sgma=sqrt(1/(2*alpha)); %噪声标准方差 N=10000; %传输的比特数 for i=1:N %产生数据序列 temp=rand; if(temp<0.5) data(i)=1; else data(i)=0; end end for i=1:N %查找接收信号 if(data(i)==0) %传输信号 r1c(i)=sqrt(Eb);r1s(i)=0; r2c(i)=0;r2s(i)=0; else r1c(i)=0;r1s(i)=0; r2c(i)=sqrt(Eb);r2s(i)=0; end if(rand<alpha) %以概率alpha加入噪声并确定接收信号 r1c(i)=r1c(i)+gnagauss(sgma); r1s(i)=r1s(i)+gnagauss(sgma); r2c(i)=r2c(i)+gnagauss(sgma); r2s(i)=r2s(i)+gnagauss(sgma); end end num_of_err=0; %进行判决并计算错误数目 for i=1:N r1=r1c(i)^2+r1s(i)^2; %第一判决变量 r2=r2c(i)^2+r2s(i)^2; %第二判决变量 if(r1>r2) decis=0; else decis=1; end if(decis~=data(i)) %如果存在错误,计数器计数 num_of_err=num_of_err+1; end end p=num_of_err/N; %计算误码率