www.pudn.com > traditionalRECEIVER.rar > traditionalRECEIVER.m


function[p]=traditionalRECEIVER(snr_in_dB,K, Lc,Mps) 
% w_rakeout1得到给定给定snr_in_dB,K,Lc和Mps运算得出的误码率 
code_type=2;   %0=随机  1=hadamard码  2=Gold码 
code_seed=rand('state'); 
%后面产生比特传输使用的PN序列 
codes=(cdma_codes(K,0,code_type,Lc,code_seed)); 
Eb=1;                             %每bit信号的能量 
snr=10^(snr_in_dB/10); 
sgma=sqrt(Eb/(2*snr));            %sigma, standard deviatio of noise 
E_chip=Eb/Lc;                     %每码片的能量 
N=10000;                          %传送的比特数目 
%为减少该程序的运算时间,数据的产生、噪声、干扰、译码和差错计算都一起执行 
%这样有助于超长运算矢量的计算 
num_of_err=0; 
%generation of the binary data source 
for i=1:N 
    %产生下一数据比特 
    temp=rand; 
    if (temp<0.5) 
        data=-1; 
    else 
        data=1; 
    end; 
    %将其重复Lc次 
    for j=1:Lc 
        repeated_data(j)=data; 
    end; 
    %发送信号扩频为 
    trans_sig=sqrt(E_chip)*repeated_data.*codes'; 
    %假设传输路径数为Mps,则传输信号为(用矩阵表示) 
    trans_sig=repmat(trans_sig,Mps,1); 
    %产生干扰:多径瑞利衰落 
    Fadings=raylrnd(sqrt(1/2),Mps,Lc); 
    %产生方差为sgma^2的高斯白噪声 
    noise=sgma*randn(Mps,Lc); 
    %传输信号经过瑞利衰落后的信号 
    trans_sig=trans_sig.*Fadings; 
    %接收信号 
    rec_sig=trans_sig+noise; 
    %接收信号解扩 
    temp=rec_sig.*(repmat(codes,1,Mps))';  
    %从接收信号中产生判决变量 
    dec_vari=(sum(temp,2))'; 
    Rakebranchpower=dec_vari.^2; 
    %最大比值合并 
    power=sum(Rakebranchpower); 
    fx=find(max(Rakebranchpower)); 
    MRCPara=max(Rakebranchpower)/power; %选择路径系数 
    RakeMRC=MRCPara*dec_vari(fx); 
    %进行判决 
    if(RakeMRC<0) 
        decision=-1; 
    else 
        decision=1; 
    end; 
    %如果存在传输中的错误,计数器累加操作 
    if (decision~=data) 
        num_of_err=num_of_err+1; 
    end; 
end; 
%计算的误码率为 
p=num_of_err/N;