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;