文档库 最新最全的文档下载
当前位置:文档库 › 简单的维特比译码

简单的维特比译码

其中trellis=ploy2trellis(3,[7,5]);
7为生成多项式g1=111,5为g2=101; r为接受序列
function [out1]= viterbi(r,trellis)%定义函数,输出及函数名,参量

N1=log2(trellis.numOutputSymbols); %表示输出端口数
M1=length(r);%译码码字长度
L1=M1/N1;%译码输出码长
%w=zeros(1,M1); %w表示判决输出;
%for mm=1:M1
% if abs(r(mm))>1
% w(mm)=1 ;
%else w(mm)=0;
% end
%end
%--------------------初始化参数(调用函数)----------------------------------------------
numStates=trellis.numStates; % 状态
numInputs=trellis.numInputSymbols;%输入
cur_metric=zeros(1,numStates)+Inf;%汉明码距
cur_metric(1)=0;
next_metric=-ones(1,numStates);%下一状态码距
path=zeros(numStates,L1);
sur_path=zeros(numStates,L1);
for k=1:L1 %输出序列码长
for st=1:numStates %状态
for i=0:numInputs-1 %当前输入
dout=dec2bin(trellis.outputs(st,i+1),N1)-48;
dist=sum((r((k-1)*N1+1:k*N1)-dout).^2); %计算汉明码距
nextState=trellis.nextStates(st,i+1)+1;
x=cur_metric(st)+dist;

if next_metric(nextState)<0 %判断是否有新的输入
next_metric(nextState)=x;
sur_path(nextState,1:k)=[path(st,1:k-1) i];
else
if xnext_metric(nextState)=x;
sur_path(nextState,1:k)=[path(st,1:k-1) i];
end
end
end
end
cur_metric=next_metric;
next_metric=-ones(1,numStates);
path=sur_path; %最佳路径
end
out1=path(1,:); %输出

相关文档