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

📄 viterbi.m

📁 北邮《通信原理基于Matlab的计算机仿真》书的源码 m文件 好不容易弄来的
💻 M
字号:
function [out] = viterbi(r,trellis)
%软判决译码方式,2PSK,
N = log2(trellis.numOutputSymbols);
L = length(r)/N;
numStates = trellis.numStates;
numInputs = trellis.numInputSymbols;
mem = log2(numStates);

cur_metric= zeros(1,numStates)+Inf;
cur_metric(1)=0;

next_metric = -ones(1,numStates);
path = zeros(numStates,L);
sur_path = zeros(numStates,L);

for k=1:L                    %译码时刻
    for st = 1:numStates     %状态
        for i=0:numInputs-1   %输入
            dout = dec2bin( trellis.outputs(st,i+1),N )- 48;
            dout = 2*dout-1;
            dist = sum( (r((k-1)*N+1:k*N) - dout ).^2 ); %计算欧式距离s
            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 x < next_metric(nextState)  %比较,输入支路的度量
                   next_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

out = path(1,:);

⌨️ 快捷键说明

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