www.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;       %计算误码率