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