wolffd@0: function [trans_mat, trans_cov, obs_mat, obs_cov, init_state, init_cov] = dbn_to_lds(bnet) wolffd@0: % DBN_TO_LDS Compute the Linear Dynamical System parameters from the Gaussian DBN. wolffd@0: % [trans_mat, trans_cov, obs_mat, obs_cov, init_state, init_cov] = dbn_to_lds(bnet) wolffd@0: wolffd@0: onodes = bnet.observed; wolffd@0: ss = length(bnet.intra); wolffd@0: num_nodes = ss*2; wolffd@0: assert(isequal(bnet.cnodes_slice, 1:ss)); wolffd@0: [W,D,mu] = extract_params_from_gbn(bnet); wolffd@0: wolffd@0: hnodes = mysetdiff(1:ss, onodes); wolffd@0: bs = bnet.node_sizes(:); % block sizes wolffd@0: wolffd@0: obs_mat = W(block(hnodes,bs), block(onodes,bs))'; wolffd@0: u = block(onodes,bs); wolffd@0: obs_cov = D(u,u); wolffd@0: wolffd@0: trans_mat = W(block(hnodes,bs), block(hnodes + ss, bs))'; wolffd@0: u = block(hnodes + ss, bs); wolffd@0: trans_cov = D(u,u); wolffd@0: wolffd@0: u = block(hnodes,bs); wolffd@0: init_cov = D(u,u); wolffd@0: init_state = mu(u); wolffd@0: wolffd@0: