?? estimator_mmse.m
字號:
function [ H_est , MSE ] = estimator_mmse( Recv , Training , Method , N_subc_Remain , H_ideal)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 進行基本的MMSE和MMSE-DFT信道估計
% 計算出均方誤差.
% 輸入: Recv, 頻域接收到的各個子載波上的復數信號, N_subc(子載波數) 行, N(訓練OFDM符號個數)列的復數向量
% Training , 發送的訓練序列 , N_subc 行, N 列的向量
% 注意: 訓練序列中不能有零, 否則出錯.
% Method, 信道估計的方法 ,正整數, 1--- MMSE估計, 2 ---MMSE-DFT估計的DFT改進
% N_subc_Remain, LS估計的DFT改進方法,所保留的子載波數. 為正整數值.
% 建議選取改值等于最大多徑時延對應的時域樣點數
%
%
% 輸出: H_est, 估計得到的各個子載波上的頻域響應, N_subc 行, 1列的復數向量
% MSE, 本次估計的均方誤差
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N_subc = size(Recv,1); % 子載波數
H_est = zeros(N_subc ,1);
N = size(Recv,2);
% 接收信號乘上訓練序列的共軛, 除以訓練序列的模值的平方,得到LS估計的信道響應
H_ls = Recv.*conj(Training)./abs(Training).^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 如果僅輸入兩個參數
if nargin == 2
H_est = H_ls; % LS估計
MSE = [];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 如果輸入五個參數
elseif nargin == 5
if Method == 1
H_est = H_ls; % LS估計
elseif Method == 2 % LS估計DFT改進
% 首先變換到時域
time_domain = ifft(fftshift(H_ls,1)) * sqrt(N_subc);
time_cut = zeros(N_subc,N);
leakage = 0; % 能量泄漏的子載波數
% 保留時域能量集中的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,: );
% 變換到頻域
H_ls_dft = fftshift(fft(time_cut) * 1/sqrt(N_subc),1);
H_est = H_ls_dft;
else
error('子程序estimator輸入參數不匹配!');
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 + -