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

传真(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];   %输入系统位
  17. y=[0.9 0.96 -0.69 0.85];    %输入校验位
  18. %---初始化&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  19. Infty = -128;
  20. d(1:2,1:4)=zeros(2,4);        %分支量度,2种可能结果,输入为-1或者1
  21.                                 %D(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. va1(1:8,1)=zeros(8,1);
  27. va0(1:8,1)=zeros(8,1);
  28. va0_index=[2 1 4 3 6 5 8 7]';
  29. a2a_index=([4 0 1 5 6 2 3 7]+1)';
  30. vb1(1:8,1)=zeros(8,1);
  31. vb0(1:8,1)=zeros(8,1);
  32. vb0_index=[5 6 7 8 1 2 3 4]';
  33. b2b_index=([1 2 5 6 0 3 4 7]+1)';
  34. %计算分支量度D-----------------
  35. %k=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  36. k=1;
  37. d(1,k)=x(k)+y(k);
  38. d(2,k)=x(k)-y(k);
  39. %k=1时的前向状态量度已经初始化,无需计算。
  40. %k=2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  41. k=2;
  42. d(1,k)=x(k)+y(k);
  43. d(2,k)=x(k)-y(k);
  44. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  45. 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)];
  46. 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)];
  47. va0=va0(va0_index);
  48. a(:,k)=max(va0,va1);
  49. a(a2a_index,k)=a(:,k);
  50. %k=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  51. k=3;
  52. d(1,k)=x(k)+y(k);
  53. d(2,k)=x(k)-y(k);
  54. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  55. 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)];
  56. 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)];
  57. va0=va0(va0_index);
  58. a(:,k)=max(va0,va1);
  59. a(a2a_index,k)=a(:,k);
  60. %k=4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  61. k=4;
  62. d(1,k)=x(k)+y(k);
  63. d(2,k)=x(k)-y(k);
  64. %其他分支量度为0,已经在初始化时设定,每个k时无需计算。
  65. 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)];
  66. 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)];
  67. va0=va0(va0_index);
  68. a(:,k)=max(va0,va1);
  69. a(a2a_index,k)=a(:,k);
  70. %开始计算后向分支度量
  71. 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)];
  72. 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)];
  73. vb0=vb0(vb0_index);
  74. b(:,k)=max(vb0,vb1);
  75. b(a2a_index,k)=a(:,k);