使用MATLAB实现CDMA系统的Rake接收机。假设信源输出用16位Walsh码扩频,进入接收机的有3径(即N=3);假设每条径之间延时半个码片,为了进行仿真,对Walsh码进行扩展,每个码字重复一次,则长度扩展为32位,如[1 1 0]扩展为[1 1 1 1 0 0]。接收机接收解扩判决输出,利用的是最大比合并。
%接收到的三径信号以及噪声信号
demp=p1*path1+p2*path2+p3*path3+noise;
dt=reshape(demp,32,Dlen)';
%将Walsh码重复为两次
Wal16_d(1:2:31)=Wal16(8,1:16);
Wal16_d(2:2:32)=Wal16(8,1:16);
rdata1=dt*Wal16_d(1,:).'; %解扩后rdata1为第一径输出
Wal16_delay1(1,2:32)=Wal16_d(1,1:31); %将Walsh码延迟半个码片
rdata2=dt*Wal16_delay1(1,:).'; %解扩后rdata2为第二径输出
%将Walsh码延迟一个码片
Wal16_delay2(1,3:32)=Wal16_d(1,1:30);
Wal16_delay2(1,1:2)=Wal16_d(1,31:32);
rdata3=dt*Wal16_delay2(1,:).'; %解扩后rdata3为第三径输出
p= rdata1'*rdata1+ rdata2'*rdata2+ rdata3'*rdata3;
u1= rdata1'*rdata1/p;
u2= rdata2'*rdata2/p;
u3= rdata3'*rdata3/p;
%最大值合并
u=[u1,u2,u3];
%各路径所占的功率因子
maxu=max(u);
if(maxu==u1)
rd_m3=real(rdata1);else if(maxu==u2)
rd_m3=real(rdata2);
else rd_m3=real(rdata3);
end
end