www.gusucode.com > IEEE802.11a协议的无线通信仿真代码与资料 > 802.11a/decoder.m

    function out=decoder(data)

%***************维特比译码*******************%
N=length(data);
%d为初始权值,out为译码值
d0=0;a00=[0,0];b20=[1,1];out0=[0 0 zeros(1,N/2-3)];
d1=0;a01=[1,1];b21=[0,0];out1=[0 1 zeros(1,N/2-3)];
d2=0;a12=[1,0];b32=[0,1];out2=[1 0 zeros(1,N/2-3)];
d3=0;a13=[0,1];b33=[1,0];out3=[1 1 zeros(1,N/2-3)];
%***********第一步********%
rr=[data(1),data(2)];
aa=d0;
d0=aa+sum(abs(a00-rr));
d1=aa+sum(abs(a01-rr));
%*********第二步***********%
rrr=[data(3),data(4)];
bb=d0;
cc=d1;
d0=bb+sum(abs(a00-rrr));
d1=bb+sum(abs(a01-rrr));
d2=cc+sum(abs(a12-rrr));
d3=cc+sum(abs(a13-rrr));
%************第三步到第N/2-1步**************%
for n=5:2:N-3
    R=[data(n),data(n+1)];
    if sum(abs(a00-R))>=sum(abs(b20-R))
        A=d0;
        d0=d2+sum(abs(b20-R));
        a=out0;
        out0=out2;
        out0((n+1)/2)=0;
    else
        A=d0;
        d0=d0+sum(abs(a00-R));
        a=out0;
        out0((n+1)/2)=0;
    end
    if sum(abs(a01-R))>=sum(abs(b21-R))
        B=d1;
        d1=d2+sum(abs(b21-R));
        b=out1;
        out1=out2;
        out1((n+1)/2)=1;
    else
        B=d1;
        d1=A+sum(abs(a01-R));
        b=out1;
        out1=a;
        out1((n+1)/2)=1;
    end
    if sum(abs(a12-R))>=sum(abs(b32-R))
        d2=d3+sum(abs(b32-R));
        out2=out3;
        out2((n+1)/2)=0;
    else
        d2=B+sum(abs(a12-R));
        out2=b;
        out2((n+1)/2)=0;
    end 
    if sum(abs(a13-R))>=sum(abs(b33-R))
        d3=d3+sum(abs(b33-R));
        out3((n+1)/2)=1;
    else
        d3=B+sum(abs(a13-R));
        out3=b;
        out3((n+1)/2)=1;
    end
end
%*************第N/2步*****************%
RR=[data(N-1),data(N)];
d00=d0+sum(abs(a00-RR));
out00=[out0 0];
d20=d2+sum(abs(b20-RR));
out20=[out2 0];
%**************判决输出************%
if d00>d20
    out=out20;
else 
    out=out00;
end
%*******************The end***********************%