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

传真(Fax)编程

开发平台:

Matlab

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