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

📄 logvit.m

📁 一本关于dsp的原著教材
💻 M
字号:
function [stateSeq,logProb] = logvit(x,means,vars,transitions)% LOGVIT Log version of the Viterbi algorithm applied to alignment%%    [STATESEQ,LOGPROB] = LOGVIT(X,MEANS,VARS,TRANSITIONS) returns the best%    state sequence and the likelihood of the 2-dimensional sequence X (one%    observation per row) with respect to a Markov model with N states%    having means MEANS and variances VARS (stored in N elements lists with%    empty matrices as first and last elements to symbolize the entry and%    exit states) and transition matrix TRANSITIONS.%      Alternately, LOGVIT(X,HMM) can be used, where HMM is an object of the%    form:%       HMM.means = MEANS;%       HMM.vars = VARS;%       HMM.trans = TRANSITIONS%if nargin == 2,  model = means;  means = model.means;  vars = model.vars;  evalc( 'logTrans = log(model.trans);' );end;numStates = length(means);nMinOne = numStates - 1;[numPts,dim] = size(x);log2pi = log(2*pi);for i=2:nMinOne,  invSig{i} = inv(vars{i});  logDetVars2(i) = - 0.5 * log(det(vars{i})) - log2pi;end;% Initialize the delta and psi vectors for the emitting statesfor i=2:nMinOne,  X = x(1,:)-means{i}';  delta(i) = logTrans(1,i) ...      - 0.5 * (X * invSig{i}) * X' + logDetVars2(i);  psi(1,i) = 1;end;delta = delta(:);% Recursionfor t = 2:numPts,  deltaBefore = delta;  for i = 2:nMinOne,    X = x(t,:)-means{i}';    [maxDelta,index] = max( deltaBefore(2:nMinOne) + logTrans(2:nMinOne,i) );    if index == 0; disp('argh'); end;    delta(i) = max( maxDelta ) - 0.5 * (X * invSig{i}) * X' + logDetVars2(i);    psi(t,i) = index + 1;  end;end;% TerminationstateSeq(numPts+2) = numStates; % Exit state[maxDelta,index] = max( delta(2:nMinOne) + logTrans(2:nMinOne,numStates) );logProb = maxDelta;stateSeq(numPts+1) = index + 1;% Backtrackingfor t = numPts:-1:2,  stateSeq(t) = psi(t,stateSeq(t+1));end;stateSeq(1) = 1; % Entry state

⌨️ 快捷键说明

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