发布时间:2025-12-09 21:46:31 浏览次数:4
前文略
详细代码见最后
第3章 RAKE接收机的仿真
3.1 蒙特卡洛仿真模型
发送信号通过延迟产生多径经过WLASH码扩频后进入衰落信道,解扩后由分集合并长生判决输出。判决输出和发送信号比较得出误码率。框图如下:
图3-1 RAKE接收机蒙特卡洛框图
3.2 程序流程
3.2.1 初状态设定
基于扩频因子=该阶WALSH码数量=该阶扩频码的码片长度,因此采用16位WALSH扩频码时,设定扩频因子为16。
数据长度假定为5000,数据源即为1行5000列矩阵。初始误比特率为0。以三径代表多径,其功率因子分别设为5/9,3/9,1/9。
3.2.2 WALSH矩阵产生
除了时分正交的那种正交码外,正交码设计中最重要也最基本的设计是Walsh码,它定义为Hadamard矩阵的行(或列)。N阶Walsh码的全体码字构成了一个线性分组码,其码长是N,信息数是
,这种码的最小码距是 。N越大,纠错能力越强。也可以不做这样的映射,直接以某一个码字的信号
代表一个N进制信息符号,它就是一种N进制的正交调制(与MFSK完全相同,差别只是基函数)。根据正交调制的性质,N越大,抗噪声能力也越强。
二阶Hadamard矩阵是
(4-1)
四阶是
(4-2)
其余可相应递推得到16位WALSH码矩阵。
3.2.3 扩频
(1)经过半个码片的延迟,产生3径;
(2)以WALSH码矩阵中某一行向量为扩频码进行扩频作为基本信号,再将每个扩频后输出重复为两次,有利于下面的延迟(延迟了半个码元)即得到第一径扩频输入信号;
(3)产生第二径和第三径扩频输入信号。
3.2.4 获得接收信号
由于噪声系数:
(4-3)
接收信号demp由信号与噪声组成,可知
(4-4)
其中,ray1,ray2,ray3为扩频后每径信号;power_unitary_factor1,power_unitary_factor2,power_unitary_factor3为每径功率因子。分别解扩后可得每径解扩输出rdata1,rdata2,rdata3。
分别采用最大比合并、等增益合并、选择式合并三种方法得到判决输出r_Data1,r_Data2,r_Data3。
流程图如下:
图3-2 RAKE接收机软件仿真流程图
3.3
单用户RAKE接收机误码性能仿真
(1)分别比较得出误码数量,
(2)用误码数量除以数据源数量得到误比特率,
(3)作出各信噪比下3种合并方式的误比特率曲线图,如图3-4所示。
图3-4中比较了信号接收采用RAKE接收机时,不同的分集合并策略对平均误比特率的影响。可见三种分集合并方法有效提高了接收机的误码性能,且相同条件下最大合并比(MRC)性能最好,其次是等增益合并(EGC),最后是选择式合并(SDC)。上述结论和传统理论比较接近。
图中,仿真结果以误码率(BER/FEF)和信躁比(E/N)的关系曲线给出。显然最大比合并方式时误码率最低。从仿真过程可以看出,RAKE接收机能比较好的解决多径问题。白噪声干扰对RAKE接收机误码率影响不大,而随着噪声功率增加,RAKE接收机的误码率迅速上升。
图3-4 单用户RAKE接收机误码率仿真图
3.4 多用户RAKE接收机误码性能仿真
通过for循环得到16用户状态下三种合并方式误比特率曲线图。
图3-5和图3-6中,仿真结果以误码率(BER/FEF)和信躁比(E/N)的关系曲线给出。图中同信噪比情况下采用最大比合并方式时误码率比选择式合并方式时低近一半,较等增益合并方式时也略低。
图3-5 16用户RAKE接收机误码率仿真图
其中某一用户(如第5用户)三种合并方式误比特率曲线图。如下:
图3-6 16用户RAKE接收机中第5用户误码率仿真图
从仿真过程可以看出,RAKE接收机能比较好的解决多径问题。随着干扰功率增加,RAKE接收机的误码率迅速上升,但白噪声干扰对RAKE接收机误码率影响不大。且随用户增多,码间串扰增大,对信噪比要求变高。但相比未采用RAKE接收机时对信噪比要求低。
图3-7 32用户RAKE接收机误码率仿真图
图3-8 32用户RAKE接收机中第5用户误码率仿真图
若用户改为32,则扩频因子变为32,WALSH码矩阵利用公式(4-1)和(4-2)相应递推得到32位WALSH码矩阵。噪声系数改为
结果如图3-7和图3-8所示。
图3-7和图3-8中,仿真结果以误码率(BER/FEF)和信躁比(E/N)的关系曲线给出。显然最大比合并方式时误码率最低。
从仿真过程可以看出,RAKE接收机能比较好的解决多径问题。随着干扰用户功率增加,RAKE接收机的误码率迅速上升,但白噪声干扰对RAKE接收机误码率影响不大。且随用户增多,码间串扰增大,对信噪比要求变高。但随用户增多,在误码率维持大致不变时,信噪比增加比例可逐渐降低。但相比未采用RAKE接收机时对信噪比要求低。
3.5 本章小结
通过对单用户、16用户、32用户RAKE接收机在最大合并比、等增益合并比、选择式合并三种合并方式下的误码性能仿真比较可知,RAKE接收机应采用最大合并比方式最为理想,且更适用于多用户接收。
%隆誉信息
%rake接收机
12.5.19
clear all
close all
for Numusers=[1 5 10 16 32]%用户数
Nc=16; %扩频因子
ISI_Length=1; %每径延时为ISI_Length/2
EbN0db = [0:3:40];%信噪比dB
Tlen=5000;%数据长度
%误比特率的初始值设定为0,三种合并方式
Bit_Error_Number1=0;
Bit_Error_Number2=0;
Bit_Error_Number3=0;
%多径包括三径,每径功率因子
power_unitary_factor1=sqrt(5/9);
power_unitary_factor2=sqrt(3/9);
power_unitary_factor3=sqrt(1/9);
s_initial=randsrc(1,Tlen);%随机产生-1,1的数据,作为主用户
s_initial_other=randsrc(Numusers-1,Tlen);%其他用户的数据,可以看做是主用户的干扰
%产生Walsh
矩阵 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);
%对主用户进行扩频,使用walsh码
for i=1
x0=s_initial(i,:).'*Wal16(8,:);
x1=x0.';
s_Spread(i,:)=(x1(:)).';
end
%对其他用户不进行walsh扩频
for i=2:1:Numusers
x0=s_initial_other(i-1,:).'*ones(1,length(Wal16(8,:)));
x1=x0.';
s_Spread(i,:)=(x1(:)).';
end
%将每个扩频后输出重复为两次,有利于下面的延迟(延迟了半个码元)
for i=1:Numusers
ray1(i,1:2:2*Tlen*Nc-1)=s_Spread(i,1:Tlen*Nc);
ray1(i,2:2:2*Tlen*Nc)=ray1(i,1:2:2*Tlen*Nc-1);
%产生第二径和第三径信号
ray2(i,ISI_Length+1:2*Tlen*Nc)=ray1(i,1:2*Tlen*Nc-ISI_Length);
ray3(i,2*ISI_Length+1:2*Tlen*Nc)=ray1(i,1:2*Tlen*Nc-2*ISI_Length);
end
for nEN = 1:length(EbN0db)%对每个信噪比进行仿真
en =
10^(EbN0db(nEN)/10); % 对数形式的信噪比换为自然数
sigma =
sqrt((32/(2*en)));%计算相应的噪声
%下面为rake接收部分
%接收到的信号记为demp,将主用户和其他用户的干扰信号叠加进入信道 demp=zeros(1,length(ray1(1,:)));
for
i=1:Numusers
demp=demp+power_unitary_factor1*ray1(i,:)+power_unitary_factor2*ray2(i,:)+power_unitary_factor3*ray3(i,:);
end
%加入信道的噪声
demp=demp+(randn(1,2*Tlen*Nc)+randn(1,2*Tlen*Nc)*i)*sigma; dt=reshape(demp,32,Tlen)';%调制矩阵的结构,便于处理
%将Walsh码重复为两次
Wal16_d(1:2:31)=Wal16(8,1:16);
Wal16_d(2:2:32)=Wal16(8,1:16);
%解扩后rdata1为第一径输出
rdata1=dt*Wal16_d(1,:).';
%将Walsh码延迟半个码片
Wal16_delay1(1,2:32)=Wal16_d(1,1:31);
%解扩后rdata2为第二径输出
rdata2=dt*Wal16_delay1(1,:).';
%将Walsh码延迟一个码片
Wal16_delay2(1,3:32)=Wal16_d(1,1:30);
Wal16_delay2(1,1:2)=Wal16_d(1,31:32);
%%%
这里略去部分代码%%%%%%%5%
r_Data1=sign(rd_m1)';%判决:小于0判决为-1,大于0判决为1
r_Data2=sign(rd_m2)';
r_Data3=sign(rd_m3)';
%计算误比特率
Bit_Error_Number1=length(find(r_Data1(1:Tlen)~=s_initial(1:Tlen)));%比较原始信号和接受判决信号的差别,统计误比特数
Bit_Error_Rate1(nEN)=Bit_Error_Number1/(Tlen);%计算误比特率
Bit_Error_Number2=length(find(r_Data2(1:Tlen)~=s_initial(1:Tlen)));
Bit_Error_Rate2(nEN)=Bit_Error_Number2/(Tlen);
Bit_Error_Number3=length(find(r_Data3(1:Tlen)~=s_initial(1:Tlen)));
Bit_Error_Rate3(nEN)=Bit_Error_Number3/(Tlen); end
figure()
semilogy(EbN0db,Bit_Error_Rate1,'*-');hold
on;%画出BER-SNR曲线,采用半对数坐标
semilogy(EbN0db,Bit_Error_Rate2,'o-'); hold on;
semilogy(EbN0db,Bit_Error_Rate3,'+-');
legend('最大比合并','等增益合并','选择式合并');
xlabel('信噪比');
ylabel('误比特率');
title('三种分集合并方式性能比较');
end