?? channel_gen.m
字號:
function h_time = channel_gen( Power, Doppler, N_samlpe_ofdm, T_sample, N_ofdm, N_frame, idx_frame, N_Tx_ant, N_Rx_ant )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 得到時域信道的參數(shù)
% 輸入: Power, 功率衰減向量(實(shí)際衰減,非dB值)
% Doppler, 多普勒頻移(Hz)
% N_samlpe_ofdm, 每個OFDM符號占多少個樣點(diǎn),包括循環(huán)前綴
% T_sample, 時域樣點(diǎn)時間間隔(秒)
% N_ofdm, 每幀中的OFDM符號個數(shù)
% N_frame, 仿真的幀總數(shù)目
% idx_frame, 當(dāng)前的幀編號
% N_Tx_ant, 發(fā)送天線數(shù)
% N_Rx_ant, 接收天線數(shù)
% 輸出: 時域信道響應(yīng)h_time, 安排如下:
% 1) 不同行表示不同徑的信道, 不同徑獨(dú)立, 已經(jīng)乘以了功率衰減 ,共length(Delay)行
% 2) 不同列表示本幀中的不同OFDM符號的信道,考慮每個OFDM符號的所有樣點(diǎn)經(jīng)歷相同衰減,一個OFDM符號一個信道參數(shù)
% 不同列時域信道響應(yīng)的差異是由多普勒頻移造成的,反映了信道的時變性。共N_ofdm列
% 3) 不同矩陣第三維表示不同天線對之間的信道參數(shù),不同天線之間獨(dú)立,共N_Tx_ant * N_Rx_ant個
% 其順序?yàn)? 第1條發(fā)送天線和第1條接收天線(1-->1)的信道, 2-->1,...,N_Tx_ant-->1, ...,
% 1-->2, 2-->2, ..., N_Tx_ant-->2,依次下去。
% 單天線信道,設(shè)置 N_Tx_ant = N_Rx_ant = 1 即可
% 說明:
% 1) 調(diào)用本程序,程序根據(jù)當(dāng)前幀的編號輸出本幀的時域信道響應(yīng),多次調(diào)用,產(chǎn)生的不同幀信道參數(shù)獨(dú)立
% 2) 瑞利衰落系數(shù)產(chǎn)生的方法: 每條徑的瑞利衰落系數(shù)序列由Jakes模型截取. 為保證不同徑的瑞利衰落獨(dú)立,
% 不同天線的瑞利衰落獨(dú)立, 我們截取的距離要等于或大于相干時間對應(yīng)的多徑時延樣點(diǎn)數(shù).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 臨時變量
N_ant_pair = N_Tx_ant * N_Rx_ant; % 收發(fā)天線對數(shù)目
N_path = length(Power); % 多徑數(shù)目
min_fd = 1/(N_ofdm*N_samlpe_ofdm*T_sample*100); % 是否使用Jakes模型的臨界多普勒頻移值
Tc = round( 1/(Doppler * T_sample * N_samlpe_ofdm) ); % 相干時間對應(yīng)的OFDM符號數(shù)
T_sym = T_sample*N_samlpe_ofdm; % OFDM符號周期
T_cut = Tc*12; % 截取Jakes模型的變量
Power = Power./sum(Power); % 功率歸一化
% 返回變量
h_time = zeros(N_path , N_ofdm , N_ant_pair);
% 如果多普勒頻移大于預(yù)先設(shè)定最小值
if Doppler > min_fd
% 否則如果是第1幀,生成所有幀,所有OFDM符號,所有徑的瑞利衰落向量,并保存為數(shù)據(jù)文件
if idx_frame == 1
% 計(jì)算需要產(chǎn)生的瑞利衰落樣點(diǎn)序列的長度 fading_len
% 原則: 每條徑使用的瑞利衰落系數(shù)要獨(dú)立, 也就是截取Jakes模型時, 徑和徑之間的截取間隔要等于或
% 大于相干時間對應(yīng)的OFDM符號數(shù).
% 從產(chǎn)生的瑞利衰落的幅度圖plot(abs(jakes_coff))可以看出, 前面一部分系數(shù)幅度變化不合理
% 我們加 T_cut, 目的是截取位置靠后,舍去前面幅度較大的部分
fading_len = N_ofdm * N_frame * N_path * N_ant_pair + Tc * N_frame * N_path * N_ant_pair + T_cut;
jakes_coff = Tap_Rayleigh_Jakes(Doppler , T_sym , fading_len );
% 截取Jakes模型產(chǎn)生瑞利衰落序列
fading_trunc = jakes_coff(10*Tc + 1 : end );
% 將Jakes模型產(chǎn)生的序列進(jìn)行功率歸一化
fading_jakes = fading_trunc./sqrt( sum(fading_trunc.*conj(fading_trunc)) / length(fading_trunc) );
% 保存產(chǎn)生的瑞利衰落數(shù)據(jù)
save fading_jakes.mat fading_jakes;
else
% 如果不是第一幀,調(diào)出保存的數(shù)據(jù)
load fading_jakes.mat;
end
end
% 按照當(dāng)前的幀編號,提取出本幀的數(shù)據(jù), 并返回
for ant = 1:N_ant_pair
for p = 1:N_path
if Doppler > min_fd
% 每條徑的瑞利衰落系數(shù)
fading_path = fading_jakes((ant - 1)*Tc + (p-1)*Tc + (idx_frame - 1)*Tc + 1: ...
(ant - 1)*Tc + (p - 1)*Tc + (idx_frame - 1)*Tc + N_ofdm );
else
% 使用randn + j*randn 方式產(chǎn)生N_path條徑,1列的復(fù)高斯向量,本幀所有符號都使用同一衰減
% 因?yàn)槎嗥绽疹l移很小時,使用Jakes模型要產(chǎn)生大量的點(diǎn),才能滿足截取的距離要等于相干時間對應(yīng)的
% 多徑時延樣點(diǎn)數(shù),非常費(fèi)時,有時是不可能的。當(dāng)幀時間長度 ( N_ofdm*N_samlpe_ofdm*T_sample ) >> 1/(Doppler),
% 產(chǎn)生的不同符號的瑞利衰落系數(shù)非常接近,可以使用同一個衰落系數(shù)
fading_path = repmat( ( randn(1) + j*randn(1) )/sqrt(2) ,1,N_ofdm );
end
% 把每條徑的幅度乘上瑞利衰落序列
path_tmp = sqrt(Power(p)) * fading_path;
% 返回的數(shù)據(jù)
h_time(p,:,ant) = path_tmp ;
end
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -