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

传真(Fax)编程

开发平台:

Matlab

  1. %****************************************************************
  2. % 内容概述:利用硬件化的方式实现TURBO码的MAX-LOG-MAP译码
  3. %          生成矩阵按照3GPP标准为[1 1 0 1;1 0 1 1]
  4. %          未使用另外一个译码器反馈的外部信息
  5. %          输入为经过高斯信道的RSC软输入,而输出为软输出
  6. % 创 建 人:朱殿荣/QQ:235347/MSN:njzdr@msn.com
  7. % 单    位:南京邮电大学,通信工程系
  8. % 创建时间:2005年7月7日
  9. % 修改时间:
  10. % 参考文献:《数字通信--基础与应用》
  11. %          《改进的Turbo码算法及其FPGA实现过程的研究》,天津大学,张宁,赵雅兴
  12. % 版权声明:任何人均可复制、传播、修改此文件,同时需保留原始版权信息。
  13. %****************************************************************
  14. clear;
  15. x=[0.1 -0.7 0.86 0.68];   %输入系统位
  16. y=[0.9 0.96 -0.69 0.85];    %输入校验位
  17. %---初始化&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  18. %Infty = 1e10;
  19. Infty = -128;
  20. d(1:8,1:2,1:4)=zeros(8,2,4);    %分支量度,8种可能状态,输入为0或者1
  21.                                 %D(S,i,k)
  22. a(1:8,1:4)=Infty*ones(8,4);     %前向分支量度,A(S,k)
  23. a(1,1)=0;                       %寄存器状态由全零开始
  24. b(1:8,1:5)=Infty*ones(8,5);     %后向分支量度,B(S,k)
  25. b(1,5)=0;                       %寄存器状态由全零结束
  26. %计算分支量度D-----------------
  27. %k=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  28. k=1;
  29. d(1,2,k)=x(k)+y(k);
  30. d(2,2,k)=d(1,2,k);
  31. d(7,2,k)=d(1,2,k);
  32. d(8,2,k)=d(1,2,k);
  33. d(3,2,k)=x(k);
  34. d(4,2,k)=d(3,2,k);
  35. d(5,2,k)=d(3,2,k);
  36. d(6,2,k)=d(3,2,k);
  37. d(3,1,k)=y(k);
  38. d(4,1,k)=d(3,1,k);
  39. d(5,1,k)=d(3,1,k);
  40. d(6,1,k)=d(3,1,k);
  41. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  42. %k=1时的前向状态量度已经初始化,无需计算。
  43. %k=2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  44. k=2;
  45. d(1,2,k)=x(k)+y(k);
  46. d(2,2,k)=d(1,2,k);
  47. d(7,2,k)=d(1,2,k);
  48. d(8,2,k)=d(1,2,k);
  49. d(3,2,k)=x(k);
  50. d(4,2,k)=d(3,2,k);
  51. d(5,2,k)=d(3,2,k);
  52. d(6,2,k)=d(3,2,k);
  53. d(3,1,k)=y(k);
  54. d(4,1,k)=d(3,1,k);
  55. d(5,1,k)=d(3,1,k);
  56. d(6,1,k)=d(3,1,k);
  57. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  58. a(1,k)=max((a(1,k-1)+d(1,1,k-1)),(a(2,k-1)+d(2,2,k-1)));
  59. a(2,k)=max((a(4,k-1)+d(4,1,k-1)),(a(3,k-1)+d(3,2,k-1)));
  60. a(3,k)=max((a(5,k-1)+d(5,1,k-1)),(a(6,k-1)+d(6,2,k-1)));
  61. a(4,k)=max((a(8,k-1)+d(8,1,k-1)),(a(7,k-1)+d(7,2,k-1)));
  62. a(5,k)=max((a(2,k-1)+d(2,1,k-1)),(a(1,k-1)+d(1,2,k-1)));
  63. a(6,k)=max((a(3,k-1)+d(3,1,k-1)),(a(4,k-1)+d(4,2,k-1)));
  64. a(7,k)=max((a(6,k-1)+d(6,1,k-1)),(a(5,k-1)+d(5,2,k-1)));
  65. a(8,k)=max((a(7,k-1)+d(7,1,k-1)),(a(8,k-1)+d(8,2,k-1)));
  66. %k=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  67. k=3;
  68. d(1,2,k)=x(k)+y(k);
  69. d(2,2,k)=d(1,2,k);
  70. d(7,2,k)=d(1,2,k);
  71. d(8,2,k)=d(1,2,k);
  72. d(3,2,k)=x(k);
  73. d(4,2,k)=d(3,2,k);
  74. d(5,2,k)=d(3,2,k);
  75. d(6,2,k)=d(3,2,k);
  76. d(3,1,k)=y(k);
  77. d(4,1,k)=d(3,1,k);
  78. d(5,1,k)=d(3,1,k);
  79. d(6,1,k)=d(3,1,k);
  80. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  81. a(1,k)=max((a(1,k-1)+d(1,1,k-1)),(a(2,k-1)+d(2,2,k-1)));
  82. a(2,k)=max((a(4,k-1)+d(4,1,k-1)),(a(3,k-1)+d(3,2,k-1)));
  83. a(3,k)=max((a(5,k-1)+d(5,1,k-1)),(a(6,k-1)+d(6,2,k-1)));
  84. a(4,k)=max((a(8,k-1)+d(8,1,k-1)),(a(7,k-1)+d(7,2,k-1)));
  85. a(5,k)=max((a(2,k-1)+d(2,1,k-1)),(a(1,k-1)+d(1,2,k-1)));
  86. a(6,k)=max((a(3,k-1)+d(3,1,k-1)),(a(4,k-1)+d(4,2,k-1)));
  87. a(7,k)=max((a(6,k-1)+d(6,1,k-1)),(a(5,k-1)+d(5,2,k-1)));
  88. a(8,k)=max((a(7,k-1)+d(7,1,k-1)),(a(8,k-1)+d(8,2,k-1)));
  89. %k=4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  90. k=4;
  91. d(1,2,k)=x(k)+y(k);
  92. d(2,2,k)=d(1,2,k);
  93. d(7,2,k)=d(1,2,k);
  94. d(8,2,k)=d(1,2,k);
  95. d(3,2,k)=x(k);
  96. d(4,2,k)=d(3,2,k);
  97. d(5,2,k)=d(3,2,k);
  98. d(6,2,k)=d(3,2,k);
  99. d(3,1,k)=y(k);
  100. d(4,1,k)=d(3,1,k);
  101. d(5,1,k)=d(3,1,k);
  102. d(6,1,k)=d(3,1,k);
  103. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  104. a(1,k)=max((a(1,k-1)+d(1,1,k-1)),(a(2,k-1)+d(2,2,k-1)));
  105. a(2,k)=max((a(4,k-1)+d(4,1,k-1)),(a(3,k-1)+d(3,2,k-1)));
  106. a(3,k)=max((a(5,k-1)+d(5,1,k-1)),(a(6,k-1)+d(6,2,k-1)));
  107. a(4,k)=max((a(8,k-1)+d(8,1,k-1)),(a(7,k-1)+d(7,2,k-1)));
  108. a(5,k)=max((a(2,k-1)+d(2,1,k-1)),(a(1,k-1)+d(1,2,k-1)));
  109. a(6,k)=max((a(3,k-1)+d(3,1,k-1)),(a(4,k-1)+d(4,2,k-1)));
  110. a(7,k)=max((a(6,k-1)+d(6,1,k-1)),(a(5,k-1)+d(5,2,k-1)));
  111. a(8,k)=max((a(7,k-1)+d(7,1,k-1)),(a(8,k-1)+d(8,2,k-1)));
  112. %前向状态量度和分支量度计算完毕,最后的后向状态量度已经处于初始化状态
  113. %可以开始计算后向状态量度以及LLR
  114. b(1,k)=max((b(1,k+1)+d(1,1,k)),(b(5,k+1)+d(5,2,k)));
  115. b(2,k)=max((b(5,k+1)+d(5,1,k)),(b(1,k+1)+d(1,2,k)));
  116. b(3,k)=max((b(6,k+1)+d(6,1,k)),(b(2,k+1)+d(2,2,k)));
  117. b(4,k)=max((b(2,k+1)+d(2,1,k)),(b(6,k+1)+d(6,2,k)));
  118. b(5,k)=max((b(3,k+1)+d(3,1,k)),(b(7,k+1)+d(7,2,k)));
  119. b(6,k)=max((b(7,k+1)+d(7,1,k)),(b(3,k+1)+d(3,2,k)));
  120. b(7,k)=max((b(8,k+1)+d(8,1,k)),(b(4,k+1)+d(4,2,k)));
  121. b(8,k)=max((b(4,k+1)+d(4,1,k)),(b(8,k+1)+d(8,2,k)));
  122. %计算LLR--------------------------------------
  123. l(k)=max([...
  124.     (a(1,k)+d(1,2,k)+b(5,k+1)),(a(2,k)+d(2,2,k)+b(1,k+1)),...
  125.     (a(3,k)+d(3,2,k)+b(2,k+1)),(a(4,k)+d(4,2,k)+b(6,k+1)),...
  126.     (a(5,k)+d(5,2,k)+b(7,k+1)),(a(6,k)+d(6,2,k)+b(3,k+1)),...
  127.     (a(7,k)+d(7,2,k)+b(4,k+1)),(a(8,k)+d(8,2,k)+b(8,k+1))...
  128.     ])-max([...
  129.     (a(1,k)+d(1,1,k)+b(1,k+1)),(a(2,k)+d(2,1,k)+b(5,k+1)),...
  130.     (a(3,k)+d(3,1,k)+b(6,k+1)),(a(4,k)+d(4,1,k)+b(2,k+1)),...
  131.     (a(5,k)+d(5,1,k)+b(3,k+1)),(a(6,k)+d(6,1,k)+b(7,k+1)),...
  132.     (a(7,k)+d(7,1,k)+b(8,k+1)),(a(8,k)+d(8,1,k)+b(3,k+1))...
  133.     ]);
  134. % k=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  135. k=3;
  136. b(1,k)=max((b(1,k+1)+d(1,1,k)),(b(5,k+1)+d(5,2,k)));
  137. b(2,k)=max((b(5,k+1)+d(5,1,k)),(b(1,k+1)+d(1,2,k)));
  138. b(3,k)=max((b(6,k+1)+d(6,1,k)),(b(2,k+1)+d(2,2,k)));
  139. b(4,k)=max((b(2,k+1)+d(2,1,k)),(b(6,k+1)+d(6,2,k)));
  140. b(5,k)=max((b(3,k+1)+d(3,1,k)),(b(7,k+1)+d(7,2,k)));
  141. b(6,k)=max((b(7,k+1)+d(7,1,k)),(b(3,k+1)+d(3,2,k)));
  142. b(7,k)=max((b(8,k+1)+d(8,1,k)),(b(4,k+1)+d(4,2,k)));
  143. b(8,k)=max((b(4,k+1)+d(4,1,k)),(b(8,k+1)+d(8,2,k)));
  144. %计算LLR--------------------------------------
  145. l(k)=max([...
  146.     (a(1,k)+d(1,2,k)+b(5,k+1)),(a(2,k)+d(2,2,k)+b(1,k+1)),...
  147.     (a(3,k)+d(3,2,k)+b(2,k+1)),(a(4,k)+d(4,2,k)+b(6,k+1)),...
  148.     (a(5,k)+d(5,2,k)+b(7,k+1)),(a(6,k)+d(6,2,k)+b(3,k+1)),...
  149.     (a(7,k)+d(7,2,k)+b(4,k+1)),(a(8,k)+d(8,2,k)+b(8,k+1))...
  150.     ])-max([...
  151.     (a(1,k)+d(1,1,k)+b(1,k+1)),(a(2,k)+d(2,1,k)+b(5,k+1)),...
  152.     (a(3,k)+d(3,1,k)+b(6,k+1)),(a(4,k)+d(4,1,k)+b(2,k+1)),...
  153.     (a(5,k)+d(5,1,k)+b(3,k+1)),(a(6,k)+d(6,1,k)+b(7,k+1)),...
  154.     (a(7,k)+d(7,1,k)+b(8,k+1)),(a(8,k)+d(8,1,k)+b(3,k+1))...
  155.     ]);
  156. % k=2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  157. k=2;
  158. b(1,k)=max((b(1,k+1)+d(1,1,k)),(b(5,k+1)+d(5,2,k)));
  159. b(2,k)=max((b(5,k+1)+d(5,1,k)),(b(1,k+1)+d(1,2,k)));
  160. b(3,k)=max((b(6,k+1)+d(6,1,k)),(b(2,k+1)+d(2,2,k)));
  161. b(4,k)=max((b(2,k+1)+d(2,1,k)),(b(6,k+1)+d(6,2,k)));
  162. b(5,k)=max((b(3,k+1)+d(3,1,k)),(b(7,k+1)+d(7,2,k)));
  163. b(6,k)=max((b(7,k+1)+d(7,1,k)),(b(3,k+1)+d(3,2,k)));
  164. b(7,k)=max((b(8,k+1)+d(8,1,k)),(b(4,k+1)+d(4,2,k)));
  165. b(8,k)=max((b(4,k+1)+d(4,1,k)),(b(8,k+1)+d(8,2,k)));
  166. %计算LLR--------------------------------------
  167. l(k)=max([...
  168.     (a(1,k)+d(1,2,k)+b(5,k+1)),(a(2,k)+d(2,2,k)+b(1,k+1)),...
  169.     (a(3,k)+d(3,2,k)+b(2,k+1)),(a(4,k)+d(4,2,k)+b(6,k+1)),...
  170.     (a(5,k)+d(5,2,k)+b(7,k+1)),(a(6,k)+d(6,2,k)+b(3,k+1)),...
  171.     (a(7,k)+d(7,2,k)+b(4,k+1)),(a(8,k)+d(8,2,k)+b(8,k+1))...
  172.     ])-max([...
  173.     (a(1,k)+d(1,1,k)+b(1,k+1)),(a(2,k)+d(2,1,k)+b(5,k+1)),...
  174.     (a(3,k)+d(3,1,k)+b(6,k+1)),(a(4,k)+d(4,1,k)+b(2,k+1)),...
  175.     (a(5,k)+d(5,1,k)+b(3,k+1)),(a(6,k)+d(6,1,k)+b(7,k+1)),...
  176.     (a(7,k)+d(7,1,k)+b(8,k+1)),(a(8,k)+d(8,1,k)+b(3,k+1))...
  177.     ]);
  178. % k=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  179. k=1;
  180. b(1,k)=max((b(1,k+1)+d(1,1,k)),(b(5,k+1)+d(5,2,k)));
  181. b(2,k)=max((b(5,k+1)+d(5,1,k)),(b(1,k+1)+d(1,2,k)));
  182. b(3,k)=max((b(6,k+1)+d(6,1,k)),(b(2,k+1)+d(2,2,k)));
  183. b(4,k)=max((b(2,k+1)+d(2,1,k)),(b(6,k+1)+d(6,2,k)));
  184. b(5,k)=max((b(3,k+1)+d(3,1,k)),(b(7,k+1)+d(7,2,k)));
  185. b(6,k)=max((b(7,k+1)+d(7,1,k)),(b(3,k+1)+d(3,2,k)));
  186. b(7,k)=max((b(8,k+1)+d(8,1,k)),(b(4,k+1)+d(4,2,k)));
  187. b(8,k)=max((b(4,k+1)+d(4,1,k)),(b(8,k+1)+d(8,2,k)));
  188. %计算LLR--------------------------------------
  189. l(k)=max([...
  190.     (a(1,k)+d(1,2,k)+b(5,k+1)),(a(2,k)+d(2,2,k)+b(1,k+1)),...
  191.     (a(3,k)+d(3,2,k)+b(2,k+1)),(a(4,k)+d(4,2,k)+b(6,k+1)),...
  192.     (a(5,k)+d(5,2,k)+b(7,k+1)),(a(6,k)+d(6,2,k)+b(3,k+1)),...
  193.     (a(7,k)+d(7,2,k)+b(4,k+1)),(a(8,k)+d(8,2,k)+b(8,k+1))...
  194.     ])-max([...
  195.     (a(1,k)+d(1,1,k)+b(1,k+1)),(a(2,k)+d(2,1,k)+b(5,k+1)),...
  196.     (a(3,k)+d(3,1,k)+b(6,k+1)),(a(4,k)+d(4,1,k)+b(2,k+1)),...
  197.     (a(5,k)+d(5,1,k)+b(3,k+1)),(a(6,k)+d(6,1,k)+b(7,k+1)),...
  198.     (a(7,k)+d(7,1,k)+b(8,k+1)),(a(8,k)+d(8,1,k)+b(3,k+1))...
  199.     ]);