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

传真(Fax)编程

开发平台:

Matlab

  1. function h_time = time_channel_para(  ch, N_Tx_ant, N_Rx_ant, N_sym , T_sym, fs, N_subc, ...
  2.                 PrefixRatio,N_frame,frame)
  3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  4. % 得到时域信道的参数
  5. % 时域信道响应h_time的安排如下:
  6. % 1) 一行为一条径的信道参数, 每个OFDM符号一个参数, 要乘以功率衰减因子,共N_sym个
  7. % 2) 不同行表示不同径的信道参数, 不同径之间的参数独立, 共N_path个
  8. % 3) 矩阵第三维表示不同天线对之间的信道参数, 不同天线之间的参数独立,共N_Tx_ant * N_Rx_ant个
  9. % 其顺序为: 第1条发送天线和第1条接收天线(1-->1)的信道, 2-->1,...,N_Tx_ant-->1, ...,
  10. % 1-->2, 2-->2, ..., N_Tx_ant-->2,依次下去。
  11. % 4) 不同cell结构体表示不同用户的信道参数, 其参数独立
  12. % 5) 不同数据包/帧间的信道参数也独立
  13. % 产生的方法: 每条径的瑞利衰落系数序列由Jakes模型截取. 为保证不同径的瑞利衰落独立,
  14. % 不同天线的瑞利衰落独立, 我们截取的距离要等于或大于相干时间对应的多径时延样点数. 
  15. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  16. N_ant_pair = N_Tx_ant * N_Rx_ant;
  17. Sym_sample = N_subc * (1 + PrefixRatio);
  18. h_time = zeros(ch.N_path , N_sym , N_ant_pair);
  19. if ch.fd > 5       
  20.                       
  21.     % 相干时间对应的OFDM符号数
  22.     coherent_time = round( (1/ch.fd) * fs /Sym_sample ) ;
  23.     
  24.     if frame == 1
  25.     % 使用Jakes模型产生瑞利衰落系数 
  26.     % 计算瑞利衰落样点序列的长度
  27.     % 原则: 每条径使用的瑞利衰落系数要独立, 也就是截取Jakes模型时, 径和径之间的截取间隔要等于或
  28.     % 大于相干时间对应的OFDM符号数.
  29.     % 乘13*coherent_time的目的是从12倍相干时间对应的OFDM符号数处开始截取,舍去前面幅度较大的部分
  30.     % 从产生的瑞利衰落的幅度图plot(abs(jakes_coff))可以看出, 前面一部分系数幅度变化不合理, 舍去
  31.     % 有N_tran_sym个OFDM符号的前导训练序列,所以是 N_sym 
  32.     len = N_sym * N_frame * ch.N_path * N_ant_pair + coherent_time * N_frame * ch.N_path * N_ant_pair;
  33.     fading_len = ceil( len + 11*coherent_time );
  34.     jakes_coff = Tap_Rayleigh_Jakes(ch.fd, T_sym , fading_len );
  35.     % plot(abs(jakes_coff));
  36.     % 截取Jakes模型产生瑞利衰落序列 ,从第12s倍相干时间对应的OFDM符号数处开始截取
  37.     fading_trunc =  jakes_coff(10*coherent_time + 1 : len + 10*coherent_time + 1 );
  38.     % 将Jakes模型产生的序列进行功率归一化
  39.     fading_jakes = fading_trunc./sqrt( sum(fading_trunc.*conj(fading_trunc)) / length(fading_trunc) );
  40.     
  41.     save fading_jakes.mat fading_jakes;
  42.     
  43.     else
  44.         load fading_jakes.mat;
  45.     end
  46. end
  47. for ant = 1:N_ant_pair
  48.     for p = 1:ch.N_path    
  49.         if ch.fd <= 5       % 多普勒频移很小,一条径的数据可以使用相同的瑞利衰落系数
  50.             fading_path = repmat(( randn(1,1) + j*randn(1,1) )/sqrt(2) ,1 , N_sym  );   
  51.         else    
  52.         % 每条径的瑞利衰落系数
  53.             fading_path = fading_jakes((ant-1)*coherent_time + (p-1)*coherent_time + (frame-1)*coherent_time + 1: ...
  54.                                 (ant-1)*coherent_time + (p-1)*coherent_time + (frame-1)*coherent_time + N_sym  );
  55.             
  56.         % 每条径加随机相位               
  57.             fading_path =  fading_path * exp( j*2*pi*rand(1,1) );              
  58.         end            
  59.         % 把每条径的幅度乘上瑞利衰落序列
  60.         path_tmp =  sqrt(ch.Power(p)) * fading_path;
  61.         h_time(p,:,ant) = path_tmp ;
  62.         
  63.     end
  64. end
  65.