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

📄 viterbi.m

📁 数字电视的交织和解交织算法
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -