?? estimator_ls.m
字號:
function [H_est , MSE] = estimator_ls( Recv , Training , Method , N_subc_Remain , H_ideal , Idx_max_tap)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 進行基本的LS和LS-DFT信道估計
% 如果僅輸入兩個參數(shù), 則進行基本LS信道估計, 得到各子載波上的信道估計值
% 如果使用全部的五個參數(shù), 則可以進行LS和LS的DFT改進算法, 并調(diào)整信道估計器參數(shù), 計算出
% 均方誤差.
% 輸入: Recv, 頻域接收到的各個子載波上的復數(shù)信號, N_subc(子載波數(shù)) 行, N(訓練OFDM符號個數(shù))列的復數(shù)向量
% Training , 發(fā)送的訓練序列 , N_subc 行, N 列的向量
% 注意: 訓練序列中不能有零, 否則出錯.
% Method, 信道估計的方法 ,正整數(shù), 1--- LS估計, 2 ---LS估計的DFT改進
% N_subc_Remain, LS估計的DFT改進方法,所保留的子載波數(shù). 為正整數(shù)值.
% 建議選取改值等于最大多徑時延對應的時域樣點數(shù)
% Idx_max_tap, 行向量,保存時域最強徑對應的時域樣點編號數(shù)。
% 輸出: H_est, 估計得到的各個子載波上的頻域響應, N_subc 行, 1列的復數(shù)向量
% MSE, 本次估計的均方誤差
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N_subc = size(Recv,1); % 子載波數(shù)
H_est = zeros(N_subc ,1);
N = size(Recv,2);
% 接收信號乘上訓練序列的共軛, 除以訓練序列的模值的平方,得到LS估計的信道響應
H_ls = Recv.*conj(Training)./abs(Training).^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 如果僅輸入兩個參數(shù)
if nargin == 2
H_est = H_ls; % LS估計
MSE = [];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 如果輸入五個或六個參數(shù)
else
time_cut = zeros(N_subc,N);
if Method == 1
H_est = H_ls; % LS估計
else % LS估計DFT改進
% 首先變換到時域
time_domain = ifft(fftshift(H_ls,1)) * sqrt(N_subc);
% 保留一段時域樣點
if Method == 2
leakage = 0; % 能量泄漏的子載波數(shù)
% 保留時域能量集中的N_subc_Remain個樣點
time_cut( 1: N_subc_Remain,: ) = time_domain( 1: N_subc_Remain,: );
% 保留能量泄漏的leakage個樣點
time_cut( N_subc - leakage : N_subc,: ) = time_domain( N_subc - leakage : N_subc,: );
% 保留最強徑對應的時域樣點
elseif Method == 3
% 把時域響應的最強徑對應的響應取出
time_cut(Idx_max_tap,:,:) = time_domain(Idx_max_tap,:,:);
end
% 變換到頻域
H_ls_dft = fftshift(fft(time_cut) * 1/sqrt(N_subc),1);
H_est = H_ls_dft;
end
% 計算均方誤差
diff = H_ideal - H_est;
MSE = sum(sum( abs(diff).^2 )) / (N_subc*N) ;
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -