wolffd@0: function b = back(engine, bfuture, f, t) wolffd@0: wolffd@0: if f.t ~= t wolffd@0: error('mixed up time stamps') wolffd@0: end wolffd@0: wolffd@0: b.t = t; wolffd@0: b.obslik = f.obslik; wolffd@0: bb_future = bfuture.beta .* bfuture.obslik; wolffd@0: if engine.maximize wolffd@0: B = repmat(bb_future(:)', length(bfuture.beta), 1); wolffd@0: b.beta = normalise(max(engine.transprob .* B, [], 2)); wolffd@0: else wolffd@0: b.beta = normalise((engine.transprob * bb_future)); wolffd@0: end wolffd@0: b.gamma = normalise(f.alpha .* b.beta); wolffd@0: if t > 1 wolffd@0: bb_t = b.beta .* b.obslik; wolffd@0: b.xi = normalise((engine.transprob .* (f.past_alpha * bb_t'))); % t-1,t wolffd@0: end wolffd@0: