rake接收机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
--Rake接收机及其特性实验
班级:XXXXXXXX
学号:XXXXXXXX
姓名:XXXXXXXX
Rake接收机仿真
一、实验目的
(1)了解rake接收机的原理
(2)分析比较3中不同合并算法的性能
二、实验内容
(1)编写MATLAB程序,实现Rake接收机
(2)修改信噪比,观察3种合并算法的误码率
三、实验原理
本仿真采用在CDMA系统中广泛使用的Rake接收技术,且为时间分集。因为当传播时延超过一个码片周期时,多径信号实际上课看成是互不相关的。Rake接收机采用一组相关接收机,分布于每条路径上,各个接收机与同一期望信号的多径分量之一相关,根据各个相关输出的相关强度加权后合成一个输出。根据加权系数的选择原则,有3种合并算法:选择式合并、等增益合并和最大比合并。
选择式合并是检测接收到的多径信号,挑选其中信噪比最大的一径作为输出;等增益合并是将接收的多径信号按照相等的增益系数,同相相加后作为输出;最大比合并时按照适当的增益系数,同相相加后作为输出。在不同的噪声环境中,三种合并算法的效果不同。
Rake接收机的相关器的原理图如下图所示
假设采用M个相关器去接收M个多径信号分支,其中a1,a2,……,aM是每一条分支的乘性系数,它们的取值是根据所采用组合方式(例如最大比合并、等增益合并等)而可调的。不妨令相关器1与最强的多径支路m1同步,并且多径支路m2比多径支路m1延迟时间t1到达接收端。相关器2与多径支路m2同步,它与m2具有很好的相关性,但与m1的相关性则很差。以此类推,第M个相关器与m1时延tM-1的多径分量mM相关性很强,但与m1、m2、……mM-1等多径分量相关性则很差。因此如果一条多径分支受到衰落的影响,则由于各条支路的独立性,还会有其他没有受到衰落的信号分支,此时给衰落的信号分支设定一个很小的加权系数,就可以将该路的干扰抑制。Rake接收机的原理图如下图所示:
本实验使用MATLAB平台编写程序来实验。假设信源输出用16位Walsh码扩频,进入接收机的有三径支路;假设每条径之间延时半个码片,为了进行仿真,对Walsh码进行扩展,每个码字重复一次,则长度为32位,如[1 1 0]扩展为[1 1 1 1 0 0]. 四、程序
clear all;
Numusers=1;
Nc=16;
ISI_Length=1;
EbN0db=[0:1:30];
Tlen=8000;
Bit_Error_Number1=0;
Bit_Error_Number2=0;
Bit_Error_Number3=0;
power_unitary_factor1=sqrt(6/9);
power_unitary_factor1=sqrt(2/9);
power_unitary_factor1=sqrt(1/9);
s_initial=randsrc(1,Tlen);
wal2=[1 1;1 -1];
wal4=[wal2 wal2;wal2 wal2*(-1)];
wal8=[wal4 wal4;wal4 wal4*(-1)];
wal16=[wal8 wal8;wal8 wal8*(-1)];
s_spread=zeros(Numusers,Tlen*Nc);
ray1=zeros(Numusers,2*Tlen*Nc);
ray2=zeros(Numusers,2*Tlen*Nc);
ray3=zeros(Numusers,2*Tlen*Nc);
for j=1:Numusers
x0=s_initial(j,:).'*wal16(8,:);
x1=x0.';
s_spread(j,:)=(x1(:)).';
end
ray1(1:2:2*Tlen*Nc-1)=s_spread(1:Tlen*Nc);
ray1(2:2:2*Tlen*Nc)=ray1(1:2:2*Tlen*Nc-1);
ray2(ISI_Length+1:2*Tlen*Nc)=ray1(1:2*Tlen*Nc-ISI_Length);
ray3(2*ISI_Length+1:2*Tlen*Nc)=ray1(1:2*Tlen*Nc-2*ISI_Length);
for nEN=1:length(EbN0db)
en=10^(EbN0db(nEN)/10);
sigma=sqrt(32/(2*en));
demp=power_unitary_factor1*ray1+power_unitary_factor1*ray2+power_unitary_fa ctor1*ray3+(randn(1,2*Tlen*Nc)+randn(1,2*Tlen*Nc)*i)*sigma;
dt=reshape(demp,32,Tlen)';
wal16_d(1:2:31)=wal16(8,1:16);
wal16_d(2:2:32)=wal16(8,1:16);
rdata1=dt*wal16_d(1,:).';
wal16_delay1(1,2:32)=wal16_d(1,1:31);
rdata2=dt*wal16_delay1(1,:).';
wal16_delay2(1,3:32)=wal16_d(1,1:30);
rdata3=dt*wal16_delay2(1,:).';
p1=rdata1'*rdata1;
p2=rdata2'*rdata2;
p3=rdata3'*rdata3;
p=p1+p2+p3;
u1=p1/p;
u2=p2/p;
u3=p3/p;
rd_m1=real(rdata1*u1+rdata2*u2+rdata3*u3);
rd_m2=(real(rdata1+rdata1+rdata1))/3;
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
r_Data1=sign(rd_m1)';