?? turbodecoding.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 + -