wolffd@0: function obslik = mk_hmm_obs_lik_vec(bnet, evidence) wolffd@0: % MK_HMM_OBS_LIK_VEC Make the observation likelihood vector for one slice wolffd@0: % obslik = mk_obs_lik(bnet, evidence) wolffd@0: % wolffd@0: % obslik(i) = Pr(y(t) | X(t)=i) wolffd@0: % evidence{i,1} contains the evidence on node i in slice t-1 wolffd@0: % evidence{i,2} contains the evidence on node i in slice t wolffd@0: wolffd@0: ns = bnet.node_sizes; wolffd@0: ss = length(bnet.intra); wolffd@0: onodes = find(~isemptycell(evidence(:))); wolffd@0: hnodes = find(isemptycell(evidence(:))); wolffd@0: ens = ns; wolffd@0: ens(onodes) = 1; wolffd@0: Q = prod(ens(hnodes)); wolffd@0: obslik = zeros(1,Q); wolffd@0: dom = (1:ss)+ss; wolffd@0: bigpot = dpot(dom, ens(dom)); wolffd@0: onodes1 = find(~isemptycell(evidence(:,1))); wolffd@0: for i=onodes1(:)' wolffd@0: e = bnet.equiv_class(i,2); wolffd@0: fam = family(bnet.dag, i, 2); wolffd@0: pot = convert_to_pot(bnet.CPD{e}, 'd', fam, evidence); wolffd@0: bigpot = multiply_by_pot(bigpot, pot); wolffd@0: end wolffd@0: m = pot_to_marginal(bigpot); wolffd@0: obslik = m.T(:);