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

传真(Fax)编程

开发平台:

Matlab

  1. %****************************************************************
  2. % 内容概述:利用硬件化的方式实现TURBO码的p-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月16日
  9. % 修改时间:
  10. % 参考文献:《数字通信--基础与应用》
  11. %          《High performace parallelised 3GPP Turbo Decoder》
  12. %          《改进的Turbo码算法及其FPGA实现过程的研究》,天津大学,张宁,赵雅兴
  13. % 版权声明:任何人均可复制、传播、修改此文件,同时需保留原始版权信息。
  14. %****************************************************************
  15. clear;
  16. x=[0.8 -0.7 0.86 0.68];   %输入系统位 对应输入信息是 [1 -1 1 1]
  17. y=[0.9 0.96 -0.69 0.85];    %输入校验位
  18. %---初始化&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  19. Infty = -128;
  20. pi=1;
  21. d(1:2,1:4)=zeros(2,4);        %分支量度,2种可能结果,输入为-1或者1
  22.                                 %D(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. va1(1:8,1)=zeros(8,1);
  28. va0(1:8,1)=zeros(8,1);
  29. va0_index=[2 1 4 3 6 5 8 7]';
  30. a2a_index=([4 0 1 5 6 2 3 7]+1)';
  31. vb1(1:8,1)=zeros(8,1);
  32. vb0(1:8,1)=zeros(8,1);
  33. vb0_index=[5 6 7 8 1 2 3 4]';
  34. b2b_index=([1 2 5 6 0 3 4 7]+1)';
  35. %计算分支量度D-----------------
  36. %k=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  37. k=1;
  38. d(1,k)=pi*(x(k)+y(k));
  39. d(2,k)=pi*(x(k)-y(k));
  40. %k=1时的前向状态量度已经初始化,无需计算。
  41. %k=2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  42. k=2;
  43. d(1,k)=pi*(x(k)+y(k));
  44. d(2,k)=pi*(x(k)-y(k));
  45. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  46. va1=a(:,k-1)+[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
  47. va0=a(:,k-1)-[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
  48. va0=va0(va0_index);
  49. a(:,k)=max(va0,va1);
  50. a(a2a_index,k)=a(:,k);
  51. %k=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  52. k=3;
  53. d(1,k)=pi*(x(k)+y(k));
  54. d(2,k)=pi*(x(k)-y(k));
  55. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  56. va1=a(:,k-1)+[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
  57. va0=a(:,k-1)-[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
  58. va0=va0(va0_index);
  59. a(:,k)=max(va0,va1);
  60. a(a2a_index,k)=a(:,k);
  61. %k=4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  62. k=4;
  63. d(1,k)=pi*(x(k)+y(k));
  64. d(2,k)=pi*(x(k)-y(k));
  65. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  66. va1=a(:,k-1)+[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
  67. va0=a(:,k-1)-[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
  68. va0=va0(va0_index);
  69. a(:,k)=max(va0,va1);
  70. a(a2a_index,k)=a(:,k);
  71. %开始计算后向分支度量
  72. vb1=b(:,k+1)+[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  73. vb0=b(:,k+1)-[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  74. vb0=vb0(vb0_index);
  75. b(:,k)=max(vb0,vb1);
  76. b(b2b_index,k)=b(:,k);
  77. %开始计算LLR;
  78. llr_a=a(b2b_index,k);
  79. llr(k)=max(llr_a+vb1)-max(llr_a+vb0);
  80. %k=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  81. k=3;
  82. %计算后向分支度量
  83. vb1=b(:,k+1)+[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  84. vb0=b(:,k+1)-[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  85. vb0=vb0(vb0_index);
  86. b(:,k)=max(vb0,vb1);
  87. b(b2b_index,k)=b(:,k);
  88. %计算LLR;
  89. llr_a=a(b2b_index,k);
  90. llr(k)=max(llr_a+vb1)-max(llr_a+vb0);
  91. %k=2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  92. k=2;
  93. %计算后向分支度量
  94. vb1=b(:,k+1)+[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  95. vb0=b(:,k+1)-[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  96. vb0=vb0(vb0_index);
  97. b(:,k)=max(vb0,vb1);
  98. b(b2b_index,k)=b(:,k);
  99. %计算LLR;
  100. llr_a=a(b2b_index,k);
  101. llr(k)=max(llr_a+vb1)-max(llr_a+vb0);
  102. %k=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  103. k=1;
  104. %计算后向分支度量
  105. vb1=b(:,k+1)+[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  106. vb0=b(:,k+1)-[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
  107. vb0=vb0(vb0_index);
  108. b(:,k)=max(vb0,vb1);
  109. b(b2b_index,k)=b(:,k);
  110. %计算LLR;
  111. llr_a=a(b2b_index,k);
  112. llr(k)=max(llr_a+vb1)-max(llr_a+vb0);