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

传真(Fax)编程

开发平台:

Matlab

  1. function [soft_out,ex_info]=constituent_decoder_logmap(in,app)
  2. %****************************************************************
  3. % 内容概述:子译码器。
  4. %          利用硬件化的方式实现TURBO码的LOG-MAP译码
  5. %          生成矩阵按照3GPP标准为[1 1 0 1;1 0 1 1]
  6. %          输入为经过高斯信道的RSC软输入,而输出为软输出和外部信息
  7. % 创 建 人:朱殿荣/QQ:235347/MSN:njzdr@msn.com
  8. % 单    位:南京邮电大学,通信工程系
  9. % 创建时间:2005年7月23日
  10. % 修改时间:2006年3月10日
  11. % 参考文献:《数字通信--基础与应用》
  12. %          《改进的Turbo码算法及其FPGA实现过程的研究》,天津大学,张宁,赵雅兴
  13. %        K.K.Loo, T.Alukaidey, S.A.Jimaa “High Performance Parallelized
  14. %           3GPP Turbo Decoder”, Personal Mobile Communications
  15. %        Conference 2003. 5th European (Conf. Publ. No. 492)
  16. % 版权声明:任何人均可复制、传播、修改此文件,同时需保留原始版权信息。
  17. %****************************************************************
  18.  
  19. x=in(1,:);              %输入系统位
  20. y=in(2,:);              %输入校验位
  21. in_length=length(in);
  22. %---初始化&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  23. Infty = -128;
  24. d=zeros(8,2,in_length);     %分支量度,8种可能状态,输入为0或者1
  25.                             %D(S,i,k)
  26. a=Infty*ones(8,in_length);  %前向分支量度,A(S,k)
  27. a(1,1)=0;                   %寄存器状态由全零开始
  28. b=Infty*ones(8,in_length+1);%后向分支量度,B(S,k)
  29. %b(8,in_length+1)=0;           %寄存器状态由全零结束
  30. %---计算度量和LLR&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  31. for k=1:in_length
  32.     d(1,2,k)=x(k)+y(k)+app(k);
  33.     d(2,2,k)=d(1,2,k);
  34.     d(7,2,k)=d(1,2,k);
  35.     d(8,2,k)=d(1,2,k);
  36.     
  37.     d(3,2,k)=x(k)+app(k);
  38.     d(4,2,k)=d(3,2,k);
  39.     d(5,2,k)=d(3,2,k);
  40.     d(6,2,k)=d(3,2,k);
  41.     d(3,1,k)=y(k);
  42.     d(4,1,k)=d(3,1,k);
  43.     d(5,1,k)=d(3,1,k);
  44.     d(6,1,k)=d(3,1,k);
  45.     
  46.     if k>1
  47.         a(1,k)=max(a(1,k-1),(a(2,k-1)+d(2,2,k-1)))...
  48.             +log(1+exp(-abs(a(1,k-1)-(a(2,k-1)+d(2,2,k-1)))));
  49.         a(2,k)=max((a(4,k-1)+d(4,1,k-1)),(a(3,k-1)+d(3,2,k-1)))...
  50.             +log(1+exp(-abs((a(4,k-1)+d(4,1,k-1))-(a(3,k-1)+d(3,2,k-1)))));
  51.         a(3,k)=max((a(5,k-1)+d(5,1,k-1)),(a(6,k-1)+d(6,2,k-1)))...
  52.             +log(1+exp(-abs((a(5,k-1)+d(5,1,k-1))-(a(6,k-1)+d(6,2,k-1)))));
  53.         a(4,k)=max(a(8,k-1),(a(7,k-1)+d(7,2,k-1)))...
  54.             +log(1+exp(-abs(a(8,k-1)-(a(7,k-1)+d(7,2,k-1)))));
  55.         a(5,k)=max(a(2,k-1),(a(1,k-1)+d(1,2,k-1)))...
  56.             +log(1+exp(-abs(a(2,k-1)-(a(1,k-1)+d(1,2,k-1)))));
  57.         a(6,k)=max((a(3,k-1)+d(3,1,k-1)),(a(4,k-1)+d(4,2,k-1)))...
  58.             +log(1+exp(-abs((a(3,k-1)+d(3,1,k-1))-(a(4,k-1)+d(4,2,k-1)))));
  59.         a(7,k)=max((a(6,k-1)+d(6,1,k-1)),(a(5,k-1)+d(5,2,k-1)))...
  60.             +log(1+exp(-abs((a(6,k-1)+d(6,1,k-1))-(a(5,k-1)+d(5,2,k-1)))));
  61.         a(8,k)=max(a(7,k-1),(a(8,k-1)+d(8,2,k-1)))...
  62.             +log(1+exp(-abs(a(7,k-1)-(a(8,k-1)+d(8,2,k-1)))));
  63.     end
  64.     
  65.     if k==in_length
  66.         b(1,k)=max(b(1,k+1),(b(5,k+1)+d(1,2,k)))...
  67.             +log(1+exp(-abs(b(1,k+1)-(b(5,k+1)+d(1,2,k)))));
  68.         b(2,k)=max(b(5,k+1),(b(1,k+1)+d(2,2,k)))...
  69.             +log(1+exp(-abs(b(5,k+1)-(b(1,k+1)+d(2,2,k)))));
  70.         b(3,k)=max((b(6,k+1)+d(3,1,k)),(b(2,k+1)+d(3,2,k)))...
  71.             +log(1+exp(-abs((b(6,k+1)+d(3,1,k))-(b(2,k+1)+d(3,2,k)))));
  72.         b(4,k)=max((b(2,k+1)+d(4,1,k)),(b(6,k+1)+d(4,2,k)))...
  73.             +log(1+exp(-abs((b(2,k+1)+d(4,1,k))-(b(6,k+1)+d(4,2,k)))));
  74.         b(5,k)=max((b(3,k+1)+d(5,1,k)),(b(7,k+1)+d(5,2,k)))...
  75.             +log(1+exp(-abs((b(3,k+1)+d(5,1,k))-(b(7,k+1)+d(5,2,k)))));
  76.         b(6,k)=max((b(7,k+1)+d(6,1,k)),(b(3,k+1)+d(6,2,k)))...
  77.             +log(1+exp(-abs((b(7,k+1)+d(6,1,k))-(b(3,k+1)+d(6,2,k)))));
  78.         b(7,k)=max(b(8,k+1),(b(4,k+1)+d(7,2,k)))...
  79.             +log(1+exp(-abs(b(8,k+1)-(b(4,k+1)+d(7,2,k)))));
  80.         b(8,k)=max(b(4,k+1),(b(8,k+1)+d(8,2,k)))...
  81.             +log(1+exp(-abs(b(4,k+1)-(b(8,k+1)+d(8,2,k)))));
  82.         %计算LLR--------------------------------------
  83.         l(k)=max([...
  84.             (a(1,k)+d(1,2,k)+b(5,k+1)),(a(2,k)+d(2,2,k)+b(1,k+1)),...
  85.             (a(3,k)+d(3,2,k)+b(2,k+1)),(a(4,k)+d(4,2,k)+b(6,k+1)),...
  86.             (a(5,k)+d(5,2,k)+b(7,k+1)),(a(6,k)+d(6,2,k)+b(3,k+1)),...
  87.             (a(7,k)+d(7,2,k)+b(4,k+1)),(a(8,k)+d(8,2,k)+b(8,k+1))...
  88.             ])-max([...
  89.             (a(1,k)+b(1,k+1)),(a(2,k)+b(5,k+1)),...
  90.             (a(3,k)+d(3,1,k)+b(6,k+1)),(a(4,k)+d(4,1,k)+b(2,k+1)),...
  91.             (a(5,k)+d(5,1,k)+b(3,k+1)),(a(6,k)+d(6,1,k)+b(7,k+1)),...
  92.             (a(7,k)+b(8,k+1)),(a(8,k)+b(4,k+1))...
  93.             ]);
  94.     end
  95. end
  96. for k=in_length-1:-1:1
  97.         b(1,k)=max(b(1,k+1),(b(5,k+1)+d(1,2,k)))...
  98.             +log(1+exp(-abs(b(1,k+1)-(b(5,k+1)+d(1,2,k)))));
  99.         b(2,k)=max(b(5,k+1),(b(1,k+1)+d(2,2,k)))...
  100.             +log(1+exp(-abs(b(5,k+1)-(b(1,k+1)+d(2,2,k)))));
  101.         b(3,k)=max((b(6,k+1)+d(3,1,k)),(b(2,k+1)+d(3,2,k)))...
  102.             +log(1+exp(-abs((b(6,k+1)+d(3,1,k))-(b(2,k+1)+d(3,2,k)))));
  103.         b(4,k)=max((b(2,k+1)+d(4,1,k)),(b(6,k+1)+d(4,2,k)))...
  104.             +log(1+exp(-abs((b(2,k+1)+d(4,1,k))-(b(6,k+1)+d(4,2,k)))));
  105.         b(5,k)=max((b(3,k+1)+d(5,1,k)),(b(7,k+1)+d(5,2,k)))...
  106.             +log(1+exp(-abs((b(3,k+1)+d(5,1,k))-(b(7,k+1)+d(5,2,k)))));
  107.         b(6,k)=max((b(7,k+1)+d(6,1,k)),(b(3,k+1)+d(6,2,k)))...
  108.             +log(1+exp(-abs((b(7,k+1)+d(6,1,k))-(b(3,k+1)+d(6,2,k)))));
  109.         b(7,k)=max(b(8,k+1),(b(4,k+1)+d(7,2,k)))...
  110.             +log(1+exp(-abs(b(8,k+1)-(b(4,k+1)+d(7,2,k)))));
  111.         b(8,k)=max(b(4,k+1),(b(8,k+1)+d(8,2,k)))...
  112.             +log(1+exp(-abs(b(4,k+1)-(b(8,k+1)+d(8,2,k)))));
  113.         %计算LLR--------------------------------------
  114.         l(k)=max([...
  115.             (a(1,k)+d(1,2,k)+b(5,k+1)),(a(2,k)+d(2,2,k)+b(1,k+1)),...
  116.             (a(3,k)+d(3,2,k)+b(2,k+1)),(a(4,k)+d(4,2,k)+b(6,k+1)),...
  117.             (a(5,k)+d(5,2,k)+b(7,k+1)),(a(6,k)+d(6,2,k)+b(3,k+1)),...
  118.             (a(7,k)+d(7,2,k)+b(4,k+1)),(a(8,k)+d(8,2,k)+b(8,k+1))...
  119.             ])-max([...
  120.             (a(1,k)+b(1,k+1)),(a(2,k)+b(5,k+1)),...
  121.             (a(3,k)+d(3,1,k)+b(6,k+1)),(a(4,k)+d(4,1,k)+b(2,k+1)),...
  122.             (a(5,k)+d(5,1,k)+b(3,k+1)),(a(6,k)+d(6,1,k)+b(7,k+1)),...
  123.             (a(7,k)+b(8,k+1)),(a(8,k)+b(4,k+1))...
  124.             ]);
  125. end
  126. soft_out=l;
  127. ex_info=soft_out-app-x;