📄 viterbi.m
字号:
function bits=Viterbi(V,framLEN,LD)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% V:送到解码器的待解bit流。
% framLEN:bit流V的长度。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bits =zeros(1,framLEN/2);
y_SI_SO=zeros(1,4);
a =zeros(1,64);
aa =zeros(1,64);
b =zeros(64,LD);
access=zeros(1,LD);
for j=1:framLEN/(2*LD)
z=0;
for i=(j-1)*LD+1:j*LD
y_SI_SO(1) = V(2*i-1)^2+V(2*i)^2; %与“00”的距离。
y_SI_SO(2) = V(2*i-1)^2+(V(2*i)-1)^2;%与“01”的距离。
y_SI_SO(3) = (V(2*i-1)-1)^2+(V(2*i)-1)^2;%与“11”的距离。
y_SI_SO(4) = (V(2*i-1)-1)^2+V(2*i)^2;%与“10”的距离。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
aa=a;
z=z+1;
if i==1
a(1) = y_SI_SO(1); b(1,z) = 1;
a(35)= y_SI_SO(3); b(35,z) = 1;
elseif i==2
a(1) = aa(1)+y_SI_SO(1); b(1,z) = 1;
a(35)= aa(1)+y_SI_SO(3); b(35,z) = 1;
a(12)= aa(35)+y_SI_SO(4); b(12,z) = 35;
a(42)= aa(35)+y_SI_SO(2); b(42,z) = 35;
elseif i==3
a(1) = aa(1)+y_SI_SO(1); b(1,z) = 1;
a(35)= aa(1)+y_SI_SO(3); b(35,z) = 1;
a(23)= aa(12)+y_SI_SO(1); b(23,z) = 12;
a(53)= aa(12)+y_SI_SO(3); b(53,z) = 12;
a(42)= aa(35)+y_SI_SO(2); b(42,z) = 35;
a(12)= aa(35)+y_SI_SO(4); b(12,z) = 35;
a(64)= aa(42)+y_SI_SO(2); b(64,z) = 42;
a(30)= aa(42)+y_SI_SO(4); b(30,z) = 42;
elseif i==4
a(1) = aa(1)+y_SI_SO(1); b(1,z) = 1;
a(35)= aa(1)+y_SI_SO(3); b(35,z) = 1;
a(23)= aa(12)+y_SI_SO(1); b(23,z) = 12;
a(53)= aa(12)+y_SI_SO(3); b(53,z) = 12;
a(45)= aa(23)+y_SI_SO(1); b(45,z) = 23;
a(15)= aa(23)+y_SI_SO(3); b(15,z) = 23;
a(59)= aa(30)+y_SI_SO(1); b(59,z) = 30;
a(25)= aa(30)+y_SI_SO(3); b(25,z) = 30;
a(42)= aa(35)+y_SI_SO(2); b(42,z) = 35;
a(12)= aa(35)+y_SI_SO(4); b(12,z) = 35;
a(64)= aa(42)+y_SI_SO(2); b(64,z) = 42;
a(30)= aa(42)+y_SI_SO(4); b(30,z) = 42;
a(6) = aa(53)+y_SI_SO(2); b(6,z) = 53;
a(40)= aa(53)+y_SI_SO(4); b(40,z) = 53;
a(20)= aa(64)+y_SI_SO(2); b(20,z) = 64;
a(50)= aa(64)+y_SI_SO(4); b(50,z) = 64;
elseif i==5
a(1) = aa(1)+y_SI_SO(1); b(1,z) = 1;
a(35)= aa(1)+y_SI_SO(3); b(35,z) = 1;
a(11)= aa(6)+y_SI_SO(1); b(11,z) = 6;
a(41)= aa(6)+y_SI_SO(3); b(41,z) = 6;
a(23)= aa(12)+y_SI_SO(1); b(23,z) = 12;
a(53)= aa(12)+y_SI_SO(3); b(53,z) = 12;
a(29)= aa(15)+y_SI_SO(1); b(29,z) = 15;
a(63)= aa(15)+y_SI_SO(3); b(63,z) = 15;
a(39)= aa(20)+y_SI_SO(1); b(39,z) = 20;
a(5) = aa(20)+y_SI_SO(3); b(5,z) = 20;
a(45)= aa(23)+y_SI_SO(1); b(45,z) = 23;
a(15)= aa(23)+y_SI_SO(3); b(15,z) = 23;
a(49)= aa(25)+y_SI_SO(1); b(49,z) = 25;
a(19)= aa(25)+y_SI_SO(3); b(19,z) = 25;
a(59)= aa(30)+y_SI_SO(1); b(59,z) = 30;
a(25)= aa(30)+y_SI_SO(3); b(25,z) = 30;
a(42)= aa(35)+y_SI_SO(2); b(42,z) = 35;
a(12)= aa(35)+y_SI_SO(4); b(12,z) = 35;
a(36)= aa(40)+y_SI_SO(2); b(36,z) = 40;
a(2) = aa(40)+y_SI_SO(4); b(2,z) = 40;
a(64)= aa(42)+y_SI_SO(2); b(64,z) = 42;
a(30)= aa(42)+y_SI_SO(4); b(30,z) = 42;
a(54)= aa(45)+y_SI_SO(2); b(54,z) = 45;
a(24)= aa(45)+y_SI_SO(4); b(24,z) = 45;
a(16)= aa(50)+y_SI_SO(2); b(16,z) = 50;
a(46)= aa(50)+y_SI_SO(4); b(46,z) = 50;
a(6) = aa(53)+y_SI_SO(2); b(6,z) = 53;
a(40)= aa(53)+y_SI_SO(4); b(40,z) = 53;
a(26)= aa(59)+y_SI_SO(2); b(26,z) = 59;
a(60)= aa(59)+y_SI_SO(4); b(60,z) = 59;
a(20)= aa(64)+y_SI_SO(2); b(20,z) = 64;
a(50)= aa(64)+y_SI_SO(4); b(50,z) = 64;
elseif i==6
a(1) = aa(1)+y_SI_SO(1); b(1,z) = 1;
a(35)= aa(1)+y_SI_SO(3); b(35,z) = 1;
a(3) = aa(2)+y_SI_SO(1); b(3,z) = 2;
a(33)= aa(2)+y_SI_SO(3); b(33,z) = 2;
a(9) = aa(5)+y_SI_SO(1); b(9,z) = 5;
a(43)= aa(5)+y_SI_SO(3); b(43,z) = 5;
a(11)= aa(6)+y_SI_SO(1); b(11,z) = 6;
a(41)= aa(6)+y_SI_SO(3); b(41,z) = 6;
a(21)= aa(11)+y_SI_SO(1); b(21,z) = 11;
a(55)= aa(11)+y_SI_SO(3); b(55,z) = 11;
a(23)= aa(12)+y_SI_SO(1); b(23,z) = 12;
a(53)= aa(12)+y_SI_SO(3); b(53,z) = 12;
a(29)= aa(15)+y_SI_SO(1); b(29,z) = 15;
a(63)= aa(15)+y_SI_SO(3); b(63,z) = 15;
a(31)= aa(16)+y_SI_SO(1); b(31,z) = 16;
a(61)= aa(16)+y_SI_SO(3); b(61,z) = 16;
a(37)= aa(19)+y_SI_SO(1); b(37,z) = 19;
a(7) = aa(19)+y_SI_SO(3); b(7,z) = 19;
a(39)= aa(20)+y_SI_SO(1); b(39,z) = 20;
a(5) = aa(20)+y_SI_SO(3); b(5,z) = 20;
a(45)= aa(23)+y_SI_SO(1); b(45,z) = 23;
a(15)= aa(23)+y_SI_SO(3); b(15,z) = 23;
a(47)= aa(24)+y_SI_SO(1); b(47,z) = 24;
a(13)= aa(24)+y_SI_SO(3); b(13,z) = 24;
a(49)= aa(25)+y_SI_SO(1); b(49,z) = 25;
a(19)= aa(25)+y_SI_SO(3); b(19,z) = 25;
a(51)= aa(26)+y_SI_SO(1); b(51,z) = 26;
a(17)= aa(26)+y_SI_SO(3); b(17,z) = 26;
a(57)= aa(29)+y_SI_SO(1); b(57,z) = 29;
a(27)= aa(29)+y_SI_SO(3); b(27,z) = 29;
a(59)= aa(30)+y_SI_SO(1); b(59,z) = 30;
a(25)= aa(30)+y_SI_SO(3); b(25,z) = 30;
a(42)= aa(35)+y_SI_SO(2); b(42,z) = 35;
a(12)= aa(35)+y_SI_SO(4); b(12,z) = 35;
a(44)= aa(36)+y_SI_SO(2); b(44,z) = 36;
a(10)= aa(36)+y_SI_SO(4); b(10,z) = 36;
a(34)= aa(39)+y_SI_SO(2); b(34,z) = 39;
a(4) = aa(39)+y_SI_SO(4); b(4,z) = 39;
a(36)= aa(40)+y_SI_SO(2); b(36,z) = 40;
a(2) = aa(40)+y_SI_SO(4); b(2,z) = 40;
a(62)= aa(41)+y_SI_SO(2); b(62,z) = 41;
a(32)= aa(41)+y_SI_SO(4); b(32,z) = 41;
a(64)= aa(42)+y_SI_SO(2); b(64,z) = 42;
a(30)= aa(42)+y_SI_SO(4); b(30,z) = 42;
a(54)= aa(45)+y_SI_SO(2); b(54,z) = 45;
a(24)= aa(45)+y_SI_SO(4); b(24,z) = 45;
a(56)= aa(46)+y_SI_SO(2); b(56,z) = 46;
a(22)= aa(46)+y_SI_SO(4); b(22,z) = 46;
a(14)= aa(49)+y_SI_SO(2); b(14,z) = 49;
a(48)= aa(49)+y_SI_SO(4); b(48,z) = 49;
a(16)= aa(50)+y_SI_SO(2); b(16,z) = 50;
a(46)= aa(50)+y_SI_SO(4); b(46,z) = 50;
a(6) = aa(53)+y_SI_SO(2); b(6,z) = 53;
a(40)= aa(53)+y_SI_SO(4); b(40,z) = 53;
a(8) = aa(54)+y_SI_SO(2); b(8,z) = 54;
a(38)= aa(54)+y_SI_SO(4); b(38,z) = 54;
a(26)= aa(59)+y_SI_SO(2); b(26,z) = 59;
a(60)= aa(59)+y_SI_SO(4); b(60,z) = 59;
a(28)= aa(60)+y_SI_SO(2); b(28,z) = 60;
a(58)= aa(60)+y_SI_SO(4); b(58,z) = 60;
a(18)= aa(63)+y_SI_SO(2); b(18,z) = 63;
a(52)= aa(63)+y_SI_SO(4); b(52,z) = 63;
a(20)= aa(64)+y_SI_SO(2); b(20,z) = 64;
a(50)= aa(64)+y_SI_SO(4); b(50,z) = 64;
else
[a(1),s]=min([aa(1)+y_SI_SO(1),aa(18)+y_SI_SO(3)]);
if s==1
b(1,z) = 1;
else
b(1,z) = 18;
end
[a(2),s]=min([aa(55)+y_SI_SO(2),aa(40)+y_SI_SO(4)]);
if s==1
b(2,z) = 55;
else
b(2,z) = 40;
end
[a(3),s]=min([aa(2)+y_SI_SO(1),aa(17)+y_SI_SO(3)]);
if s==1
b(3,z) = 2;
else
b(3,z) = 17;
end
[a(4),s]=min([aa(56)+y_SI_SO(2),aa(39)+y_SI_SO(4)]);
if s==1
b(4,z) = 56;
else
b(4,z) = 39;
end
[a(5),s]=min([aa(3)+y_SI_SO(1),aa(20)+y_SI_SO(3)]);
if s==1
b(5,z) = 3;
else
b(5,z) = 20;
end
[a(6),s]=min([aa(53)+y_SI_SO(2),aa(38)+y_SI_SO(4)]);
if s==1
b(6,z) = 53;
else
b(6,z) = 38;
end
[a(7),s]=min([aa(4)+y_SI_SO(1),aa(19)+y_SI_SO(3)]);
if s==1
b(7,z) = 4;
else
b(7,z) = 19;
end
[a(8),s]=min([aa(54)+y_SI_SO(2),aa(37)+y_SI_SO(4)]);
if s==1
b(8,z) = 54;
else
b(8,z) = 37;
end
[a(9),s]=min([aa(5)+y_SI_SO(1),aa(22)+y_SI_SO(3)]);
if s==1
b(9,z) = 5;
else
b(9,z) = 22;
end
[a(10),s]=min([aa(51)+y_SI_SO(2),aa(36)+y_SI_SO(4)]);
if s==1
b(10,z) = 51;
else
b(10,z) = 36;
end
[a(11),s]=min([aa(6)+y_SI_SO(1),aa(21)+y_SI_SO(3)]);
if s==1
b(11,z) = 6;
else
b(11,z) = 21;
end
[a(12),s]=min([aa(52)+y_SI_SO(2),aa(35)+y_SI_SO(4)]);
if s==1
b(12,z) = 52;
else
b(12,z) = 35;
end
[a(13),s]=min([aa(7)+y_SI_SO(1),aa(24)+y_SI_SO(3)]);
if s==1
b(13,z) = 7;
else
b(13,z) = 24;
end
[a(14),s]=min([aa(49)+y_SI_SO(2),aa(34)+y_SI_SO(4)]);
if s==1
b(14,z) = 49;
else
b(14,z) = 34;
end
[a(15),s]=min([aa(8)+y_SI_SO(1),aa(23)+y_SI_SO(3)]);
if s==1
b(15,z) = 8;
else
b(15,z) = 23;
end
[a(16),s]=min([aa(50)+y_SI_SO(2),aa(33)+y_SI_SO(4)]);
if s==1
b(16,z) = 50;
else
b(16,z) = 33;
end
[a(17),s]=min([aa(9)+y_SI_SO(1),aa(26)+y_SI_SO(3)]);
if s==1
b(17,z) = 9;
else
b(17,z) = 26;
end
[a(18),s]=min([aa(63)+y_SI_SO(2),aa(48)+y_SI_SO(4)]);
if s==1
b(18,z) = 63;
else
b(18,z) = 48;
end
[a(19),s]=min([aa(10)+y_SI_SO(1),aa(25)+y_SI_SO(3)]);
if s==1
b(19,z) = 10;
else
b(19,z) = 25;
end
[a(20),s]=min([aa(64)+y_SI_SO(2),aa(47)+y_SI_SO(4)]);
if s==1
b(20,z) = 64;
else
b(20,z) = 47;
end
[a(21),s]=min([aa(11)+y_SI_SO(1),aa(28)+y_SI_SO(3)]);
if s==1
b(21,z) = 11;
else
b(21,z) = 28;
end
[a(22),s]=min([aa(61)+y_SI_SO(2),aa(46)+y_SI_SO(4)]);
if s==1
b(22,z) = 61;
else
b(22,z) = 46;
end
[a(23),s]=min([aa(12)+y_SI_SO(1),aa(27)+y_SI_SO(3)]);
if s==1
b(23,z) = 12;
else
b(23,z) = 27;
end
[a(24),s]=min([aa(62)+y_SI_SO(2),aa(45)+y_SI_SO(4)]);
if s==1
b(24,z) = 62;
else
b(24,z) = 45;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -