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***********************%