wolffd@0: function [f, logscale] = fwd(engine, fpast, ev, t) wolffd@0: % Forwards pass. wolffd@0: wolffd@0: f.obslik = mk_hmm_obs_lik_vec(engine, ev); wolffd@0: transmat = engine.transprob; wolffd@0: f.past_alpha = fpast.alpha; wolffd@0: if engine.maximize wolffd@0: Q = length(fpast.alpha); wolffd@0: A = repmat(fpast.alpha, [1 Q]); wolffd@0: m = max(transmat .* A, [], 1); wolffd@0: [f.alpha, scale] = normalise(m(:) .* f.obslik); wolffd@0: else wolffd@0: [f.alpha, scale] = normalise((transmat' * fpast.alpha) .* f.obslik); wolffd@0: end wolffd@0: logscale = log(scale); wolffd@0: %f.xi = normalise((fpast.alpha * obslik') .* transmat); % t-1,t wolffd@0: f.t = t;