📄 viterbi.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 + -