estimator_ls_txdiv.m
资源名称:MIMO-OFDM.rar [点击查看]
上传用户:look542
上传日期:2009-06-04
资源大小:784k
文件大小:2k
源码类别:
传真(Fax)编程
开发平台:
Matlab
- 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);
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%