📄 estimator_ls_txdiv.m
字号:
function H = estimator_ls_txdiv(K,K0,N_Tx_ant,N_Rx_ant,pilot_rx,pilot_tx,frame,ts,pilot_n,var_noise,option,N_pilot_sym_ts)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S = zeros(K*N_Tx_ant,K);
WJ = zeros(K*N_Tx_ant,K0*N_Tx_ant);
h_p = zeros(K,1,N_Rx_ant*N_Tx_ant);
H_p = zeros(K,1,N_Rx_ant*N_Tx_ant);
global h_t;
for nr = 1:N_Rx_ant
if (frame == 1)&(ts == 1)&(pilot_n == 1) % 为加快系统仿真速度,矩阵A,Q,inv(Q)都只在第1帧计算
% 发送的频域导频样点
for nt = 1:N_Tx_ant
S((nt-1)*K + 1:nt*K,:) = diag(pilot_tx(:,1,nt));
end
% 映射矩阵
J = [eye(K0,K0); zeros(K - K0,K0)];
% fft(J)和 W*J等效,W为FFT矩阵
% 进行fftshift的原因是,加信道时进行了fftshift,以保证频域信道响应的零频率点,对应OFDM的零号(中心)子载波
WJ0 = fftshift(fft(J),1);
for nt = 1:N_Tx_ant
WJ((nt-1)*K + 1:nt*K,(nt-1)*K0 + 1:nt*K0) = WJ0;
end
A = S.'*WJ;
Q = A'*A;
inv_Q = inv(Q);
save ce_txdiv.mat A inv_Q Q;
else
load ce_txdiv.mat;
end
% 接收到的频域导频样点
x = pilot_rx(:,1,nr);
% 多天线LS估计算法
p = A'*x;
h = inv_Q*p;
% 把估计出的值放在对应的时域信道相应位置
for nt = 1:N_Tx_ant
h_p( 1:K0,1,(nr-1)*N_Tx_ant + nt) = h((nt-1)*K0+1:nt*K0);
end
h_t(:,(ts-1)*N_pilot_sym_ts + pilot_n,:) = h_p;
end
% 对得到的信道响应进行加权修正
if option == 1
sigma2_l = sum( abs(h_p).^2 ,3 )/(N_Tx_ant*N_Rx_ant);
sigma2 = var_noise;
alfa_l = (sigma2_l./(sigma2_l + sigma2)) ./ ( sum( sigma2_l.^2./(sigma2_l + sigma2) ) );
h_p = repmat(alfa_l,[1,1,N_Tx_ant*N_Rx_ant]).*h_p;
end
% 得到频域信道响应值
H = fftshift(fft(h_p),1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -