📄 rayleigh.m
字号:
function fa_comp= rayleigh(fd, fs, Ns)
%*************************************************************************************
%function fade= rayleigh(fd, fs, Ns)
% Copyright 2002 The Mobile and Portable Radio Research Group
%
% function to generate Rayleigh faded waveform
% The input to the function are
% Doppler frequency
% Sampling Frequency
% Number of samples needed
% The output of the funtion is an array of complex number whose amplitude has Rayleigh
% distribution and the phase is uniformly distributed from -pi to +pi.
% ~~~~~~~~~~~~~~~~~~~~~~~~
% Written by James Hicks
% Modified by Fakhrul Alam
% ~~~~~~~~~~~~~~~~~~~~~~~~
%function fade= rayleigh(fd, fs, Ns)
% constants:
order= 3; % order of polynomial extrapolation
% along verticle assymptote of Doppler
% Spectra, SEZ.
% Create longer duration of fading envelope than needed in order
% to have a spectrum that is a power of two.
% Set the frequency spacing for the required sampling rate.
% Adjust Doppler shift to assure that assymptote is sampled.
N= 2^ceil(log2(Ns));
delta_f= fs/N; % (Hz) frequency spacing
kd= ceil(fd/delta_f);
% If Doppler shift is very small, envelope will be roughly constant: no
% apparent fade.
if(kd <= order) % assure at least one point outside interpolation keys
%fade= ones(Ns,1);
fa_comp=ones(Ns,1)*(1+j);
else
% compute actual adjusted Doppler Shift.
fm= delta_f*kd;
% Compute the Doppler Power Spectral Density
SEZ= zeros(kd+1,1);
f= (0:kd-1)*delta_f;
SEZ(1:kd)= 1.5./(pi*fm*sqrt(1-(f/fm).^2));
% Use Polynomial fit to get the component at f= fm
% replace infite value at f=fm with a polynomial extrapolation.
p= polyfit( f(kd-order:kd), SEZ(kd-order:kd).', order);
SEZ(kd+1)= polyval(p, fm);
I_RAND= [sqrt(2)*randn(1); randn(kd-1,1)+j*randn(kd-1,1); sqrt(2)*randn(1)];
Q_RAND= [sqrt(2)*randn(1); randn(kd-1,1)+j*randn(kd-1,1); sqrt(2)*randn(1)];
Io= sqrt(SEZ).*I_RAND;
Qo= sqrt(SEZ).*Q_RAND;
pad = 2^(nextpow2(2*Ns-1));
If= [Io; zeros(pad-2*kd-1,1); conj(Io(kd+1:-1:2))];
Qf= [Qo; zeros(pad-2*kd-1,1); conj(Qo(kd+1:-1:2))];
Ienv= real(ifft(If));
Qenv= real(ifft(Qf));
fade= sqrt(Ienv(Ns:2*Ns-1).^2 + Qenv(Ns:2*Ns-1).^2);
fa_comp=(Ienv(Ns:2*Ns-1)+j*Qenv(Ns:2*Ns-1))/ sqrt(mean(fade.^2));
%fade= fade/ sqrt(mean(fade.^2));
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -