1 / 7
文档名称:

viterbi译码matlab代码.doc

格式:doc   大小:19KB   页数:7页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

viterbi译码matlab代码.doc

上传人:xiarencrh 2020/8/2 文件大小:19 KB

下载得到文件列表

viterbi译码matlab代码.doc

文档介绍

文档介绍:viterbi译码matlab代码functionViterbi=viterbi()%卷积编码器g1=111,g2=101%x为输入的待译码序列x=[1,0,1,0,0,1,0,0,0,1,0,1,1,1];%x=[1,1,0,1,0,1,1,0,0,1]%x=[1,1,1,0,0,0,1,0,1,1]a=size(x);%输入序列的长度s=a(2)/2;%译码后的m序列长度为x的一半m=zeros(1,s);%最终结果存放ma=zeros(1,s+1);%存放Fa路径的mb=zeros(1,s+1);%存放Fb路径的mc=zeros(1,s+1);%存放Fc路径的md=zeros(1,s+1);%存放Fd路径的tempma=zeros(1,s+1);tempmb=zeros(1,s+1);tempmc=zeros(1,s+1);tempmd=zeros(1,s+1);Fa=0;Fb=0;Fc=0;Fd=0;fori=1:sifi==1d0=dis(x(1),x(2),0,0);d3=dis(x(1),x(2),1,1);Fa=Fa+d0Fb=Fb+d3ma(i)=0;mb(i)=0;mc(i)=0;md(i)=0;continue;elseifi==2d0=dis(x(3),x(4),0,0);d1=dis(x(3),x(4),0,1);d2=dis(x(3),x(4),1,0);d3=dis(x(3),x(4),1,1);%注意下面的顺序,不能错,否则会产生数据相关,要么加中间变量。Fc=Fb+d2Fd=Fb+d1Fb=Fa+d3Fa=Fa+d0ma(i)=0;mb(i)=0;mc(i)=2;md(i)=2;continue;elseifi>2d0=dis(x(2*i-1),x(2*i),0,0);d1=dis(x(2*i-1),x(2*i),0,1);d2=dis(x(2*i-1),x(2*i),1,0);d3=dis(x(2*i-1),x(2*i),1,1);%下面开始进行加比较选,选F值小的路径tempa=Fa;tempb=Fb;tempc=Fc;tempd=Fd;ifFa+d0<Fc+d3tempa=Fa+d0;tempma=ma;tempma(i)=0;elsetempa=Fc+d3;tempma=mc;tempma(i)=1;endifFa+d3<Fc+d0tempb=Fa+d3;tempmb=ma;tempmb(i)=0;elsetempb=Fc+d0;tempmb=mc;tempmb(i)=1;endifFb+d2<Fd+d1tempc=Fb+d2;tempmc=mb;tempmc(i)=2;elsetempc=Fd+d1;tempmc=md;tempmc(i)=3;endifFb+d1<Fd+d2tempd=Fb+d1;tempmd=mb;tempmd(i)=2;elsetempd=Fd+d2;tempmd=md;tempmd(i)=3;endFa=tempa;Fb=tempb;Fc=tempc;Fd=tempd;ma=tempma;mb=tempmb;mc=tempmc;md=tempmd;endend%最后F取最小值