gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第8章/li8_15fun.m

    function [p]=li8_15fun(snr_in_dB,Lc,A,w0)
%运算得出的误码率
snr=10^(snr_in_dB/10);
sgma=1;        %噪声的标准方差设置为固定值
Eb=2*sgma^2*snr;     %达到设定信噪比所需要的信号幅度
E_c=Eb/Lc;         %每码片的能量
N=10000;           %传送的比特数目
num_of_err=0
for i=1:N
    temp=rand;
    if(temp<0.5),
        data=-1;
    else
        data=1;
    end
    for j=1:Lc        %将其重复Lc次
        repeated_data(j)=data;
    end
    for j=1:Lc     %产生比特传输使用的PN序列
        temp=rand;
        if(temp<0.5)
            pn_seq(j)=-1;
        else
            pn_seq(j)=1;
        end
    end
    trans_sig=sqrt(E_c)*repeated_data.*pn_seq;   %发送信号
    noise=sgma*randn(1,Lc);       %方差为sgma^2的高斯白噪声
    n=(i-1)*Lc+1:i*Lc;         %干扰
    interference=A*cos(w0*n);
    rec_sig=trans_sig+noise+interference;     %接收信号
    temp=rec_sig.*pn_seq;
    decision_variable=sum(temp);
    if(decision_variable<0)    %进行判决
        decision=-1;       
    else
        decision=1;
    end
    if(decision~=data)    %如果存在传输中的错误,计数器累加操作
        num_of_err=num_of_err+1;
    end;
end;
p=num_of_err/N;