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

传真(Fax)编程

开发平台:

Matlab

  1. function sym = modulation_sym(bit_to_mod)
  2. % 得到调制方式
  3. mod_type = size(bit_to_mod,1);
  4. switch mod_type
  5.     
  6.     % BPSK调制
  7.     case    1 
  8.         % 比特的映射关系: 0: -1, 1: 1
  9.         mapping_matrix = [ -1  1 ];
  10.         % 把输入比特映射为符号
  11.         sym = mapping_matrix(bit_to_mod + 1);
  12.   
  13.     % QPSK调制
  14.     case    2
  15.         % 比特的映射关系,00:-3/4*pi,01:3/4*pi,10: -1/4*pi,11: 1/4*pi
  16.         mapping_matrix = exp(j*[-3/4*pi 3/4*pi -1/4*pi 1/4*pi]);
  17.         index = [2 1]*bit_to_mod;
  18.         % 把输入比特映射为符号
  19.         sym = mapping_matrix(index + 1);
  20.     % 8PSK调制    
  21.     case    3
  22.         % 映射关系参见说明文档
  23.         mapping_matrix = exp(j*[0  1/4*pi 3/4*pi 1/2*pi  -1/4*pi -1/2*pi pi -3/4*pi ]);  
  24.         index = [4 2 1]*bit_to_mod ;
  25.         sym = mapping_matrix(index + 1);
  26.         
  27.         
  28.     % 16QAM调制    
  29.     case    4
  30.         % 映射关系参见说明文档
  31.         m=1;
  32.         for k=-3:2:3
  33.             for l=-3:2:3
  34.                 % 对符号能量进行归一化
  35.                 mapping_vector(m) = (k+j*l)/sqrt(10);
  36.             m=m+1;
  37.             end;
  38.         end;
  39.         mapping_vector = mapping_vector([0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10]+1);
  40.         index = [8 4 2 1]*bit_to_mod ;
  41.         sym = mapping_vector(index + 1);
  42.         
  43.     % 64QAM调制         
  44.     case    6
  45.         % 映射关系参见说明文档
  46.         m=1;
  47.         for k=-7:2:7
  48.             for l=-7:2:7
  49.                 % 对符号能量进行归一化
  50.                 mapping_vector(m) = (k+j*l)/sqrt(42); 
  51.             m=m+1;
  52.             end;
  53.         end;
  54.         mapping_vector = mapping_vector(...
  55.          [[ 0  1  3  2  7  6  4  5]...
  56.          8+[ 0  1  3  2  7  6  4  5]... 
  57.          24+[ 0  1  3  2  7  6  4  5]...
  58.          16+[ 0  1  3  2  7  6  4  5]...
  59.          56+[ 0  1  3  2  7  6  4  5]...
  60.          48+[ 0  1  3  2  7  6  4  5]...
  61.          32+[ 0  1  3  2  7  6  4  5]...
  62.          40+[ 0  1  3  2  7  6  4  5]]+1);
  63.         index = [32 16 8 4 2 1]*bit_to_mod ;
  64.         sym = mapping_vector(index + 1);
  65.     otherwise
  66.         error('调制方式有误! 子程序modulation_sym出错'); 
  67. end