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

传真(Fax)编程

开发平台:

Matlab

  1. function st_coded = st_coding( mod_sym,N_Tx_ant,N_data_sym,ST_Code)
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. % 发送分集 , 2发或4发
  4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5. [N_subc,N_sym] = size(mod_sym);
  6. st_coded = zeros(N_subc,N_data_sym,N_Tx_ant);
  7. % 如果有发送分集
  8. if N_Tx_ant ~= 1
  9.     % 使用空时分组码
  10.     if ST_Code == 1
  11.         st_coded = zeros(N_subc,N_sym, N_Tx_ant);
  12.         if (mod(N_sym,N_Tx_ant))
  13.             error('空时编码器输入符号不匹配,子程序st_coding出错');
  14.         else
  15.             for n = 1:N_sym/N_Tx_ant    
  16.                 % 一次送入空时编码器的OFDM符号有N_Tx_ant个
  17.                 coded_tmp = stbc_code_TX( mod_sym( :,(n-1)*N_Tx_ant+1 : n*N_Tx_ant ) );
  18.                 % coded_tmp的结构: 每列代表一条天线发出的数据,有N_Tx_ant*N_subc
  19.                 % 个样点, N_Tx_ant个不同时刻;一共有N_Tx_ant列,代表不同天线的数据
  20.                 % 转化为st_coded的结构:有 N_subc行, 代表不同时间OFDM符号的N_Tx_ant列, 
  21.                 % 矩阵第三维为N_Tx_ant个,代表不同天线的数据
  22.                 if N_Tx_ant == 2
  23.                     for ant = 1:N_Tx_ant
  24.                         tmp = reshape(coded_tmp(:,ant), N_subc, N_Tx_ant);
  25.                         % 把调整后的符号块,放在输出符号的相应位置
  26.                         % 进行发送天线功率的归一化
  27.                         st_coded(:, (n-1)*N_Tx_ant+1:n*N_Tx_ant ,ant) = tmp/sqrt(N_Tx_ant);
  28.                     end
  29.                 elseif N_Tx_ant == 4
  30.                     for ant = 1:N_Tx_ant
  31.                         tmp = reshape(coded_tmp(:,ant), N_subc, N_Tx_ant*2);
  32.                         % 把调整后的符号块,放在输出符号的相应位置
  33.                         % 进行发送天线功率的归一化
  34.                         st_coded(:, (n-1)*N_Tx_ant*2+1:n*N_Tx_ant*2 ,ant) = tmp/sqrt(N_Tx_ant);
  35.                     end
  36.                 end
  37.             end
  38.         end
  39.         
  40.     % 使用分层空时码
  41.     elseif ST_Code == 2
  42.         for ant = 1:N_Tx_ant
  43.            % 注意:一定要进行发送天线功率的归一化!
  44.            st_coded(:,:,ant) = mod_sym(:,ant:N_Tx_ant:N_sym)/sqrt(N_Tx_ant);    
  45.         end
  46.         
  47.     end
  48.     
  49.     % 如果没有发送分集
  50. else
  51.     st_coded = mod_sym;
  52. end