瑞利衰落信道的matlab仿真
瑞利衰落信道(Rayleigh fading channel)是一种无线电信号传播环境的统计模型。
这种模型假设信号通过无线信道之后,其信号幅度是随机的,即“衰落”,并且其包络服从瑞利分布。
模型的适用
瑞利衰落模型适用于描述建筑物密集的城镇中心地带的无线信道。
密集的建筑和其他物体使得无线设备的发射机和接收机之间没有直射路径,而且使得无线信号被衰减、反射、折射、衍射。
在曼哈顿的实验证明,当地的无线信道环境确实接近于瑞利衰落。
[3]通过电离层和对流层反射的无线电信道也可以用瑞利衰落来描述,因为大气中存在的各种粒子能够将无线信号大量散射。
瑞利衰落属于小尺度的衰落效应,它总是叠加于如阴影、衰减等大尺度衰落效应上。
信道衰落的快慢与发射端和接收端的相对运动速度的大小有关。
相对运对导致接收信号的多普勒频移。
图中所示即为一固定信号通过单径的瑞利衰落信道后,在1秒内的能量波动,这一瑞利衰落信道的多普勒频移最大分别为10Hz和100Hz,在GSM1800MHz的载波频率上,其相应的移动速度分别为约6千米每小时和60
千米每小时。
特别需要注意的是信号的“深衰落”现象,此时信号能量的衰减达到数千倍,即30~40分贝。
性质
多普勒功率普密度
,
瑞利衰落信道的仿真
根据上文所述,瑞利衰落信道可以通过发生实部和虚部都服从独立的高斯分布变量来仿真生成。
不过,在有些情况下,研究者只对幅度的波动感兴趣。
针对这种情况,有两种方法可以仿真产生瑞利衰落信道。
这两种方法的目的是产生一个信号,有着上文所示的多普勒功率谱或者等效的自相关函数。
这个信号就是瑞利衰落信道的冲激响应。
Jakes模型和clark模型
本次只以下图所示的模型来仿真单路信号的产生。
课本上也有相关的分析。
仿真结果如下:当终端移动速度为30km/h时,瑞利分布的包络为:
当终端移动速度为100km/h时,瑞利分布的包络为:
瑞利分布的概率密度函数为:
与书上相符,因标准化时令r’=r/sqrt(2),故上图下标正确。
附源程序:
fc=900*10.^6; %Carrier frequency
wc=2*pi*fc;
v1=30*1000/3600; %Receiver speed[km/h] c=300*10^6; %Light speed
wm=wc*(v1/c); %Maximum shift
fm=wm/(2*pi); %Doppler shift
N =128*100;
% generate Doppler power spectrum
deltaf = 2*fm/(N-1);
T = 1/deltaf;
sf0 = 1.5/(pi*fm);
for n = 1:(N-2)/2
sf(n) = 1.5/(pi*fm*sqrt(1-(n*deltaf/fm)^2));
end
classicf = [fliplr(sf),sf0,sf];
figure(1);
plot(classicf);
% generate two normally distributed random variables gaussN_re1 = randn(1,(N-2)/2);
gaussN_im1 = randn(1,(N-2)/2);
gaussN_pos1 = gaussN_re1 + i*gaussN_im1;
gaussN_neg1 = conj(gaussN_pos1);
gaussN1 = [fliplr(gaussN_neg1),0,gaussN_pos1]; gaussN_re2 = randn(1,(N-2)/2);
gaussN_im2 = randn(1,(N-2)/2);
gaussN_pos2 = gaussN_re2 + i*gaussN_im2; gaussN_neg2 = conj(gaussN_pos2);
gaussN2 = [fliplr(gaussN_neg2),0,gaussN_pos2]; % generating flat Rayleigh fading channel
x = ifft(sqrt(classicf).*gaussN1);
y = ifft(sqrt(classicf).*gaussN2);
rayleigh_amp = sqrt(abs(x).^2+abs(y).^2); rayleigh_db = 20*log10(rayleigh_amp);
figure(2);
plot(rayleigh_db);
figure(3)
r = sqrt(0.5*(gaussN_re1.^2 + gaussN_re2.^2)); step = 0.1; range = 0:step:3;
h = hist(r, range);
fr_approx = h/(step*sum(h));
fr = (range/0.5).*exp(-range.^2);
plot(range, fr_approx,'ko', range, fr,'k'); grid;。