wolffd@0: % Make an HMM with autoregressive Gaussian observations (switching AR model) wolffd@0: % X1 -> X2 wolffd@0: % | | wolffd@0: % v v wolffd@0: % Y1 -> Y2 wolffd@0: wolffd@0: seed = 0; wolffd@0: rand('state', seed); wolffd@0: randn('state', seed); wolffd@0: wolffd@0: intra = zeros(2); wolffd@0: intra(1,2) = 1; wolffd@0: inter = zeros(2); wolffd@0: inter(1,1) = 1; wolffd@0: inter(2,2) = 1; wolffd@0: n = 2; wolffd@0: wolffd@0: Q = 2; % num hidden states wolffd@0: O = 2; % size of observed vector wolffd@0: wolffd@0: ns = [Q O]; wolffd@0: dnodes = 1; wolffd@0: onodes = [2]; wolffd@0: bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'observed', onodes); wolffd@0: wolffd@0: bnet.CPD{1} = tabular_CPD(bnet, 1); wolffd@0: bnet.CPD{2} = gaussian_CPD(bnet, 2); wolffd@0: bnet.CPD{3} = tabular_CPD(bnet, 3); wolffd@0: bnet.CPD{4} = gaussian_CPD(bnet, 4); wolffd@0: wolffd@0: wolffd@0: T = 10; % fixed length sequences wolffd@0: wolffd@0: engine = {}; wolffd@0: %engine{end+1} = hmm_inf_engine(bnet); wolffd@0: engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); wolffd@0: %engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet)); wolffd@0: %engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet)); wolffd@0: wolffd@0: inf_time = cmp_inference_dbn(bnet, engine, T, 'check_ll',1); wolffd@0: learning_time = cmp_learning_dbn(bnet, engine, T, 'check_ll', 1); wolffd@0: