⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 turbodecoding.m

📁 自己编写的turbo码编码译码程序,大家可以参考一下.
💻 M
字号:
function [data_out,len_out]=turbodecoding(data_in,datap_in,datap2_in,len_in,fb_num);
len_out=len_in;
data_out=zeros(1,len_out);

led=zeros(1,len_in);
for i=1:fb_num
    daf=zeros(4,len_in+1);
    dbd=zeros(4,len_in+1);
    dgm=zeros(8,len_in);
   for in=1:len_in
     dgm(1,in)=0;
     dgm(2,in)=led(1,in)+data_in(1,in)+datap_in(1,in);
     dgm(3,in)=led(1,in)+data_in(1,in);
     dgm(4,in)=datap_in(1,in);
     dgm(5,in)=led(1,in)+data_in(1,in)+datap_in(1,in);
     dgm(6,in)=0;
     dgm(7,in)=datap_in(1,in);
     dgm(8,in)=led(1,in)+data_in(1,in);
   end
   
   for in=1:len_in+1
       if(in==1)
           daf(1,in)=1;daf(2,in)=0;daf(3,in)=0;daf(4,in)=0;
       else
           daf(1,in)=max(daf(1,in-1)+dgm(1,in-1),daf(3,in-1)+dgm(5,in-1));
           daf(2,in)=max(daf(1,in-1)+dgm(2,in-1),daf(3,in-1)+dgm(6,in-1));
           daf(3,in)=max(daf(2,in-1)+dgm(3,in-1),daf(4,in-1)+dgm(7,in-1));
           daf(4,in)=max(daf(2,in-1)+dgm(4,in-1),daf(4,in-1)+dgm(8,in-1));
       end
   end
   
   for in=len_in+1:-1:1
       if(in==len_in+1)
           dab(1,in)=1;dab(2,in)=0;dab(3,in)=0;dab(4,in)=0;
       else
           dab(1,in)=max(dab(1,in+1)+dgm(1,in),dab(2,in+1)+dgm(2,in));
           dab(2,in)=max(dab(3,in+1)+dgm(3,in),dab(4,in+1)+dgm(4,in));
           dab(3,in)=max(dab(1,in+1)+dgm(5,in),dab(2,in+1)+dgm(6,in));
           dab(4,in)=max(dab(3,in+1)+dgm(7,in),dab(4,in+1)+dgm(8,in));
       end
   end
   
   for in=1:len_in
       ldk_tmp(1,in)=max(max(daf(1,in)+dgm(2,in)+dab(2,in+1),daf(2,in)+dgm(3,in)+dab(3,in+1)),max(daf(3,in)+dgm(5,in)+dab(1,in+1),daf(4,in)+dgm(8,in)+dab(4,in+1)));
       ldk(1,in)=ldk_tmp(1,in)-max(max(daf(1,in)+dgm(1,in)+dab(1,in+1),daf(2,in)+dgm(4,in)+dab(4,in+1)),max(daf(3,in)+dgm(6,in)+dab(2,in+1),daf(4,in)+dgm(7,in)+dab(3,in+1)));
       l1ed(1,in)=ldk(1,in)/2-data_in(1,in)-led(i);
   end
   %interving
   a_inv=[1,0,0,0,0,0,0,0,0,0,0,0];
	for i_inv=1:len_in
        if(i_inv==1)
            ad(i_inv)=1;
        else
	        ad(i_inv)=a_inv(1)*2048+a_inv(2)*1024+a_inv(3)*512+a_inv(4)*256+a_inv(5)*128+a_inv(6)*64+a_inv(7)*32+a_inv(8)*16+a_inv(9)*8+a_inv(10)*4+a_inv(11)*2+a_inv(12)+1;
	        x_inv=xor(xor(a_inv(1),a_inv(12)),xor(a_inv(4),a_inv(6)));
	        for j_inv=11:-1:1
	            a_inv(j_inv+1)=a_inv(j_inv);
            end
	        a_inv(1)=x_inv;  
        end
        
        l1ed_inv(1,ad(i_inv))=l1ed(1,i_inv);
    end
    
   %dec2 
  for in=1:len_in
     dgm(1,in)=0;
     dgm(2,in)=l1ed_inv(in)+datap2_in(in);
     dgm(3,in)=l1ed_inv(in);
     dgm(4,in)=datap2_in(in);
     dgm(5,in)=l1ed_inv(in)+datap2_in(in);
     dgm(6,in)=0;
     dgm(7,in)=datap2_in(in);
     dgm(8,in)=l1ed_inv(in);
   end
   
   for in=1:len_in+1
       if(in==1)
           daf(1,in)=1;daf(2,in)=0;daf(3,in)=0;daf(4,in)=0;
       else
           daf(1,in)=max(daf(1,in-1)+dgm(1,in-1),daf(3,in-1)+dgm(5,in-1));
           daf(2,in)=max(daf(1,in-1)+dgm(2,in-1),daf(3,in-1)+dgm(6,in-1));
           daf(3,in)=max(daf(2,in-1)+dgm(3,in-1),daf(4,in-1)+dgm(7,in-1));
           daf(4,in)=max(daf(2,in-1)+dgm(4,in-1),daf(4,in-1)+dgm(8,in-1));
       end
   end
   
   for in=len_in+1:-1:1
       if(in==len_in+1)
           dab(1,in)=1;dab(2,in)=0;dab(3,in)=0;dab(4,in)=0;
       else
           dab(1,in)=max(dab(1,in+1)+dgm(1,in),dab(2,in+1)+dgm(2,in));
           dab(2,in)=max(dab(3,in+1)+dgm(3,in),dab(4,in+1)+dgm(4,in));
           dab(3,in)=max(dab(1,in+1)+dgm(5,in),dab(2,in+1)+dgm(6,in));
           dab(4,in)=max(dab(3,in+1)+dgm(7,in),dab(4,in+1)+dgm(8,in));
       end
   end
   
   for in=1:len_in
       ldk_tmp(1,in)=max(max(daf(1,in)+dgm(2,in)+dab(2,in+1),daf(2,in)+dgm(3,in)+dab(3,in+1)),max(daf(3,in)+dgm(5,in)+dab(1,in+1),daf(4,in)+dgm(8,in)+dab(4,in+1)));
       ldk(1,in)=ldk_tmp(1,in)-max(max(daf(1,in)+dgm(1,in)+dab(1,in+1),daf(2,in)+dgm(4,in)+dab(4,in+1)),max(daf(3,in)+dgm(6,in)+dab(2,in+1),daf(4,in)+dgm(7,in)+dab(3,in+1)));
       l2ed(1,in)=ldk(1,in)/2-data_in(1,in)-led(i);
   end
   %deinterving
   for i_inv=1:len_in   
        l2ed_inv(i_inv)=l2ed(1,ad(i_inv));
        led(i_inv)=l2ed_inv(i_inv);
   end
end
for j=1:len_in
    if(led(j)>=0)
        data_out(1,j)=1;
    else
        data_out(1,j)=0;
    end
end

    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -