interleaving_3GPP.asv
上传用户:hnyfjx
上传日期:2013-06-30
资源大小:2149k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. function [R,C,matrix_unpermutation,s,q,r,U,matrix_intra_row_permutationed]=interleaving_3GPP(x)
  2. %****************************************************************
  3. % 内容概述:3GPP标准交织器
  4. % 创 建 人:朱殿荣/QQ:235347/MSN:njzdr@msn.com
  5. % 单    位:南京邮电大学,通信工程系
  6. % 创建时间:2005年9月11日
  7. % 修改时间:
  8. % 参考文献:《3GPP TS 25.212 V6.5.0 (2005-06)》
  9. % 版权声明:任何人均可复制、传播、修改此文件,同时需保留原始版权信息。
  10. %****************************************************************
  11. %   K Number of bits input to Turbo code internal interleaver
  12. %   R Number of rows of rectangular matrix
  13. %   C Number of columns of rectangular matrix
  14. %   p Prime number
  15. %   v Primitive root
  16. %   T   Inter-row permutation patterns
  17. K=length(x);
  18. %(1) Determine the number of rows of the rectangular matrix, R
  19. if K>=40 & K<=159
  20.     R=5;
  21.     T=[4, 3, 2, 1, 0]+1;
  22. elseif (K>=160 & K<=200)|(K>=481 & K<=530)
  23.     R=10;
  24.     T=[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]+1;
  25. elseif (K>=2281 & K<=2480)|(K>=3161 & K<=3210)
  26.     R=20;
  27.     T=[19, 9, 14, 4, 0, 2, 5, 7, 12, 18, 16, 13, 17, 15, 3, 1, 6, 11, 8, 10]+1;
  28. else
  29.     R=20;
  30.     T=[19, 9, 14, 4, 0, 2, 5, 7, 12, 18, 10, 8, 13, 17, 3, 1, 16, 6, 15, 11]+1;
  31. end
  32. %(2) Determine the prime number to be used in the intra-permutation, p,
  33. %and the number of columns of rectangular matrix, C
  34. p_table=[7 11 13 17 19 23 29 31 37 41 43 ...
  35.     47 53 59 61 67 71 73 79 83 89 97 ...
  36.     101 103 107 109 113 127 131 137 139 149 151 ...
  37.     157 163 167 173 179 181 191 193 197 199 211 ...
  38.     223 227 229 233 239 241 251 257];
  39. if K>=481 & K<=530
  40.     p=53;
  41.     C=p;
  42. else
  43.     %Find minimum prime number p from p_table
  44.     ii=1;
  45.     while (p_table(ii)+1)*R<K
  46.         ii=ii+1;
  47.     end
  48.     p=p_table(ii);
  49.     %determine C 
  50.     if K<=(p-1)*R
  51.         C=p-1;
  52.     elseif K>(p-1)*R & K<=R*p
  53.         C=p;
  54.     elseif K>R*p
  55.         C=p+1;
  56.     end
  57. end
  58.         
  59. %(3)Write the input bit sequence into the R*C rectangular matrix row by row
  60. if K~=R*C
  61.     x(1,(K+1):(R*C))=0; %dummy bits are padded 
  62. end
  63. matrix_unpermutation=(reshape(x,C,R))';
  64. %注意:这里的reshape是按照列排序的,还需要转置一下
  65. %----------------------------Intra-row and inter-row permutations
  66. v_table=[
  67.      3     2     2     3     2     5     2     3     2     6     3 ...
  68.      5     2     2     2     2     7     5     3     2     3     5 ...
  69.      2     5     2     6     3     3     2     3     2     2     6 ...
  70.      5     2     5     2     2     2    19     5     2     3     2 ...
  71.      3     2     6     3     7     7     6     3     ];
  72. %(1) Select a primitive root v from the table
  73.  v=v_table(ii);
  74.  
  75. %(2) Construct the base sequence s(j)   for intra-row permutation
  76. s(1)=1;
  77. for j=2:p-1
  78.     s(j)=mod(v*s(j-1),p);
  79. end
  80. %(3)    determine the prime integer qi
  81. q(1)=1;
  82. q(1,2:R)=6;
  83. for i=2:R
  84.     while ((gcd(q(i),p-1)==1) & (q(i)>6) & (q(i)>q(i-1)))==0
  85.         q(i)=q(i)+1;
  86.     end
  87. end
  88. %(4) Permute the sequence  qi to make the sequence  ri
  89. r(T)=q;
  90. %(5) Perform the i-th (i = 0, 1, …, R - 1) intra-row permutation
  91. for i=1:R
  92.     for j=1:p-1
  93.         if C==p
  94.             U(i,j)=s(mod(j*r(i),p-1)+1);
  95.             U(i,p)=0;
  96.         elseif C==p+1
  97.             U(i,j)=s(mod(j*r(i),p-1)+1);
  98.             U(i,p)=0;
  99.             U(i,p+1)=p;
  100.             if K==R*C
  101.                 temp=U(R,p+1);
  102.                 U(R,p+1)=U(R,1);
  103.                 U(R,1)=temp;
  104.             end
  105.         elseif C==p-1
  106.             U(i,j)=s(mod(j*r(i),p-1)+1)-1;
  107.         end
  108.     end
  109. end
  110. matrix_intra_row_permutationed(U+1)=matrix_unpermutation;
  111. for i=1:C
  112.     matrix_intra_row_permutationed(
  113.     
  114.                 
  115.             
  116.         
  117.         
  118.     
  119.     
  120.  
  121. %p_table=[7    47   101   157   223;...
  122. %    11    53   103   163   227;...
  123. %    13    59   107   167   229;...
  124. %    17    61   109   173   233;...
  125. %    19    67   113   179   239;...
  126. %    23    71   127   181   241;...
  127. %    29    73   131   191   251;...
  128. %    31    79   137   193   257;...
  129. %    37    83   139   197     0;...
  130. %    41    89   149   199     0;...
  131. %    43    97   151   211     0];
  132.