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

📄 viterbi.m

📁 在高斯信道下
💻 M
字号:
function decov_out=viterbi(G,k,channel_out)
L=size(G,2)/k;
n=size(G,1);
org_state=2^((L-1)*k);
state_matrix(1:org_state,1:org_state)=inf;
input_matrix(1:org_state,1:org_state)=inf;

for i=0:org_state-1
    bi_org=binary(i,(L-1)*k);
    for j=0:2^k-1
      bi_in=binary(j,k)  ;
    [memory_con,next_state]=change(bi_org,bi_in,L);
    out=rem(memory_con*G',2);
    de_out=deci2(out);
    state_matrix(i+1,next_state+1)=de_out+1;
    input_matrix(i+1,next_state+1)=j;
end
end;
depth=length(channel_out)/n;
channel_out_matrix=reshape(channel_out,n,depth);
state_net(1:org_state,1:depth)=inf;
route_net(1:org_state,1:depth)=inf;
for i=1:depth,
   
    if i<=L
        step=2^((L-i)*k);
    else
        step=1;
    end;
   
    for j=0:ceil(step/2):org_state-1;
    
     flag(1:org_state)=inf;
       for s=0:step:org_state-1
            bj=binary(state_matrix(s+1,j+1)-1,n);
              distance=0;
             for t=1:n
                
                 if bj==inf
                     distance=inf;
                     break;
                 end
               distance=distance+metric(channel_out_matrix(t,i),bj(t));
           end
           if i==1
               flag(s+1)=distance;
           else
              flag(s+1)=distance+state_net(s+1,i-1);
          end
       end
    [state_distance,state_point]=min(flag);
    state_net(j+1,i)=state_distance;
    route_net(j+1,i)=state_point;
  end

end
[min_metric,min_point]=min(state_net(:,depth));
min_out(depth+1)=min_point;

for i=depth+1:-1:1
      if i==1
        break;
    else
    min_out(i-1)=route_net(min_out(i),i-1);
end
end
j=1;
for i=1:depth,
    date=input_matrix(min_out(i),min_out(i+1));
    decov_out(j:j+k-1)=binary(date,k);
    j=j+k;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -