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

📄 viterbi.m

📁 sttc
💻 M
字号:
function [mindist,ind,survpath,dist,srx,data] = viterbi (distance,v,M,g1,g2) 
% trellis viterbi, finding survivor path in trellis
% distance = Tx symbol to Rx symbol distance
% v = memory on generator
% M = M-psk
% mindist = minimum distance
% ind = matrix index of survivor path
% survpath = state on survivor path
% disthat = inter node distance
% dist = minimum distance at each node each state 

numstate = 2^v;
dist = [];
[brs kol]=size (distance);
[trellis1,trellis2,statego]=gen2trellis(g1,g2,M);
for a = 1:kol
    if a == 1
        dist(:,a) = distance(1:numstate,a);
    else
        disthat = [];
        for b=0:M-1
            for bb=1:numstate
                if bb < 5
                    disthat(bb,b+1) = dist(b*(v-1)+1,a-1)+ distance(b*numstate+bb,a);
                else
                    disthat(bb,b+1) = dist(b*(v-1)+2,a-1)+ distance(b*numstate+bb,a);
                end
            end            
        end
        disthat;
        for b=1:numstate
            dist(b,a)=min (disthat(b,:));
        end
    end
end
state= 0;
for a = 1:kol
    p = statego(state+1,1)+1;
    q = statego(state+1,4)+1; 
    [mindist(:,a) ind(:,a)] = min (dist(p:q,a));
    if p ~= 1
        ind(:,a)=ind(:,a)+4;
    end
    state = ind(:,a)-1;
    
end
survpath = ind -1;
demap = [0 0;0 1;1 0;1 1]';
for a = 1:kol
    if a == 1
        srx(1,a) = trellis1(1,ind(1,a));
        srx(2,a) = trellis2(1,ind(1,a));
        data(1,2*(a-1)+1:2*(a-1)+2)= demap(:,ind(1,a))';
    else
        dd =find (survpath(1,a) == statego(ind(1,a-1),:));
        srx(1,a) = trellis1(ind(1,a-1),dd);
        srx(2,a) = trellis2(ind(1,a-1),dd);
        data(1,2*(a-1)+1:2*(a-1)+2)= demap(:,dd)';
    end
end

⌨️ 快捷键说明

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