Home > ACA-Code > ToolViterbi.m

ToolViterbi

PURPOSE ^

computes path through a probability matrix with Viterbi

SYNOPSIS ^

function [p, P_res] = ToolViterbi(P_E, P_T, p_s, bUseLogLikelihood)

DESCRIPTION ^

computes path through a probability matrix with Viterbi
>
> @param P_E: emmission probability matrix (S X N)
> @param P_T: transition probability matrix (S X S)
> @param p_s: start probability vector (S X 1)
> @param bUseLogLikelihood: flag (default: false)
>
> @retval p path vector with matrix row indices (N)
> @retval P_res probability matrix
 ======================================================================

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 %computes path through a probability matrix with Viterbi
0002 %>
0003 %> @param P_E: emmission probability matrix (S X N)
0004 %> @param P_T: transition probability matrix (S X S)
0005 %> @param p_s: start probability vector (S X 1)
0006 %> @param bUseLogLikelihood: flag (default: false)
0007 %>
0008 %> @retval p path vector with matrix row indices (N)
0009 %> @retval P_res probability matrix
0010 % ======================================================================
0011 function [p, P_res] = ToolViterbi(P_E, P_T, p_s, bUseLogLikelihood)
0012  
0013     if (nargin < 4)
0014         bUseLogLikelihood = false;
0015     end
0016         
0017     if (~bUseLogLikelihood)
0018         % initialization
0019         I  = zeros(size(P_E));
0020         P_res = zeros(size(P_E));
0021         P_res(:, 1) = P_E(:, 1) .* p_s;
0022 
0023         % recursion
0024         for n = 2:size(P_E, 2)
0025             for s = 1:size(P_E, 1)
0026                 % find max of preceding times trans prob
0027                 [p_max, I(s, n)] = max(P_res(:, n-1) .* P_T(:, s));
0028                 P_res(s, n) = P_E(s, n) * p_max;
0029             end
0030         end
0031     else
0032         % initialization
0033         P_E = log(P_E); % hope for non-zero entries
0034         P_T = log(P_T); % hope for non-zero entries
0035         p_s = log(p_s); % hope for non-zero entries
0036         I = zeros(size(P_E));
0037         P_res = zeros(size(P_E));
0038 
0039         P_res(:, 1) = P_E(:, 1) + p_s; 
0040     
0041         % recursion
0042         for n = 2:size(P_E, 2)
0043             for s = 1:size(P_E, 1)
0044                 % find max of preceding times trans prob
0045                 [p_max, I(s, n)] = max(P_res(:, n-1) + P_T(:, s));
0046                 P_res(s, n) = P_E(s, n) + p_max;
0047             end
0048         end
0049     end
0050         
0051     % traceback
0052     p = zeros(1,size(P_E, 2));  
0053     % start with the last element, then count down
0054     [prob, p(end)] = max(P_res(:, end));
0055     for n = size(P_E, 2)-1:-1:1
0056         p(n) = I(p(n+1), n+1);
0057     end   
0058 end

Generated on Fri 22-Apr-2022 20:59:51 by m2html © 2005