estimator_ls_txdiv.m
上传用户:look542
上传日期:2009-06-04
资源大小:784k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. 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)
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
  3. S = zeros(K*N_Tx_ant,K);
  4. WJ = zeros(K*N_Tx_ant,K0*N_Tx_ant);
  5. h_p = zeros(K,1,N_Rx_ant*N_Tx_ant);
  6. H_p = zeros(K,1,N_Rx_ant*N_Tx_ant);
  7. global h_t;
  8. for nr = 1:N_Rx_ant
  9.     
  10.     if (frame == 1)&(ts == 1)&(pilot_n == 1) % 为加快系统仿真速度,矩阵A,Q,inv(Q)都只在第1帧计算
  11.         % 发送的频域导频样点
  12.         for nt = 1:N_Tx_ant
  13.             S((nt-1)*K + 1:nt*K,:) = diag(pilot_tx(:,1,nt));  
  14.         end
  15.         % 映射矩阵
  16.         J = [eye(K0,K0); zeros(K - K0,K0)];
  17.         % fft(J)和 W*J等效,W为FFT矩阵
  18.         % 进行fftshift的原因是,加信道时进行了fftshift,以保证频域信道响应的零频率点,对应OFDM的零号(中心)子载波
  19.         WJ0 = fftshift(fft(J),1);
  20.         for nt = 1:N_Tx_ant
  21.             WJ((nt-1)*K + 1:nt*K,(nt-1)*K0 + 1:nt*K0) = WJ0;
  22.         end
  23.         A = S.'*WJ;
  24.         Q = A'*A;
  25.         inv_Q = inv(Q);
  26.         save ce_txdiv.mat A inv_Q Q;
  27.     else 
  28.         load ce_txdiv.mat;
  29.     end
  30.     % 接收到的频域导频样点
  31.     x = pilot_rx(:,1,nr);     
  32.     % 多天线LS估计算法
  33.     p = A'*x;
  34.     h = inv_Q*p;
  35.     
  36.     
  37.     % 把估计出的值放在对应的时域信道相应位置
  38.     for nt = 1:N_Tx_ant
  39.         h_p( 1:K0,1,(nr-1)*N_Tx_ant + nt) = h((nt-1)*K0+1:nt*K0);
  40.     end
  41.     
  42.     h_t(:,(ts-1)*N_pilot_sym_ts + pilot_n,:) = h_p;
  43.     
  44. end
  45. % 对得到的信道响应进行加权修正
  46. if option == 1
  47.     sigma2_l = sum( abs(h_p).^2 ,3 )/(N_Tx_ant*N_Rx_ant);
  48.     sigma2 = var_noise;
  49.     alfa_l = (sigma2_l./(sigma2_l + sigma2)) ./ ( sum( sigma2_l.^2./(sigma2_l + sigma2) ) ); 
  50.     h_p = repmat(alfa_l,[1,1,N_Tx_ant*N_Rx_ant]).*h_p;
  51. end
  52. % 得到频域信道响应值
  53. H = fftshift(fft(h_p),1);
  54. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%