?? multipath.m
字號:
function output = multipath(input,Doppler_freq,factor,frame_Num, frame_idx)
% 函數(shù)功能:使用Jakes模型,對輸入的信號加上多徑效應(yīng)和多普勒頻移. 注意:未加高斯白噪聲
% 輸入:1) input,輸入信號樣點(diǎn)序列,行向量,樣點(diǎn)間隔20ns(系統(tǒng)基帶采樣速率假定為50MHz)
% 2) Doppler_freq,多普勒頻移(Hz)
% 3) factor, 對輸入時域樣點(diǎn)序列進(jìn)行分塊,多個時域樣點(diǎn)使用1個瑞利衰落系數(shù)。 這個變量為塊的樣點(diǎn)個數(shù)。
% 使用Jakes模型產(chǎn)生瑞利衰落序列, 當(dāng)多普勒頻移較小時,時域很多個樣點(diǎn)都近似相等。目的是減小運(yùn)算量和存儲空間。
% 如多普勒頻移為100Hz, 則相干時間為10ms. 而樣點(diǎn)間隔為20ns, 則10ms/20ns = 5*10^5個樣點(diǎn)信道變化不大。
% 如果為多載波CDMA系統(tǒng)或OFDM系統(tǒng),建議factor值為一個OFDM符號的樣點(diǎn)數(shù)(包括CP)
% 4) frame_Num,為總的仿真的幀數(shù)目
% 5) frame_idx,為當(dāng)前幀的序號,從1到frame_Num
% 輸出:output,輸出信號樣點(diǎn)序列,行向量,樣點(diǎn)間隔20ns , 系統(tǒng)帶寬50MHz
% 樣點(diǎn)間隔20ns
deltaT = 20*10^(-9);
% 每個時域樣點(diǎn)塊的時間寬度.
T_block = deltaT*factor;
% 信道的功率時延譜
% 城區(qū)指數(shù)衰落信道,等間隔取0us~ 5us 共6條徑
atten_power = exp(-[0:5]);
path_delay = [0:5]*50; % 20ns樣點(diǎn)間隔
% 求信號幅度衰減,并歸一化總功率
atten = sqrt( atten_power );
atten = atten./sqrt(sum(atten.*conj(atten)));
% 輸出樣值序列
output = zeros( 1,length(input) + max(path_delay) );
% 相干時間對應(yīng)的樣點(diǎn)數(shù)
Tc = round( (1/Doppler_freq)/deltaT );
% 計(jì)算如果每個點(diǎn)都加1個瑞利衰落系數(shù),總共需要的瑞利衰落樣點(diǎn)數(shù)
% 原則: 每條徑使用的瑞利衰落系數(shù)要獨(dú)立, 也就是截取Jakes模型時, 徑和徑之間的截取間隔要等于或
% 大于相干時間對應(yīng)的樣點(diǎn)數(shù). 我們截取時是等于相干時間對應(yīng)樣點(diǎn)數(shù).
len = length(input) + Tc * length(path_delay) * frame_Num;
% 如果考慮分塊和需要多產(chǎn)生一些樣點(diǎn)以方便截取,調(diào)用Jakes模型程序需要產(chǎn)生的瑞利衰落樣點(diǎn)數(shù)
% 乘15*Tc的目的是為了方便舍去Jakes模型產(chǎn)生的瑞利衰落系數(shù)前面幅度較大的部分
fading_len = ceil(( len + 15*Tc)/ factor);
if frame_idx == 1
% Jakes模型產(chǎn)生瑞利衰落序列
fading = Tap_Rayleigh_Jakes(Doppler_freq,T_block,fading_len);
% 截取Jakes模型產(chǎn)生瑞利衰落序列 ,舍去Jakes模型產(chǎn)生的瑞利衰落系數(shù)前面幅度較大的部分,
% 從10倍相干時間對應(yīng)的樣點(diǎn)數(shù)處開始截取
fading_trunc = fading( ceil(( 10*Tc + 1)/factor) : ceil((len + 10*Tc + 1)/factor) );
% 將Jakes模型產(chǎn)生的序列進(jìn)行功率歸一化
fading_jakes = fading_trunc./sqrt( sum(fading_trunc.*conj(fading_trunc)) / length(fading_trunc) );
% 為程序運(yùn)行速度考慮,每幀都生成一次衰落系數(shù)序列,運(yùn)行速度比較慢。可以在第1幀生成衰落系數(shù)序列
% 并保存下來,然后每幀,讀取保存的數(shù)據(jù),截取即可
save fading_jakes.mat fading_jakes;
else
load fading_jakes.mat;
end
for i = 1:length(path_delay)
% 每條徑, 對瑞利衰落序列進(jìn)行截取. 每條徑截取間隔為相干時間, 長度為輸入樣點(diǎn)長度.
fading_path = fading_jakes( ceil( ( (i-1)*Tc + (frame_idx-1)*Tc + 1)/ factor ) :...
ceil( ( (i-1)*Tc + (frame_idx-1)*Tc + length(input) ) / factor ) );
% 把瑞利衰落序列擴(kuò)展為每個樣點(diǎn)1個衰落系數(shù)
fading_path2 = reshape( repmat(fading_path ,factor ,1 ), 1 ,length(fading_path)*factor );
% 輸入序列點(diǎn)乘上瑞利衰落序列, 再乘上對應(yīng)徑的幅度衰落因子atten(i)
tmp_output = atten(i)*fading_path2(1:length(input)).*input;
% 多條徑疊加在一起,輸出
output = output + [zeros(1,path_delay(i)) tmp_output zeros(1,max(path_delay)-path_delay(i))];
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -