Daniel@0: function gmmmixes = mdn2gmm(mdnmixes) Daniel@0: %MDN2GMM Converts an MDN mixture data structure to array of GMMs. Daniel@0: % Daniel@0: % Description Daniel@0: % GMMMIXES = MDN2GMM(MDNMIXES) takes an MDN mixture data structure Daniel@0: % MDNMIXES containing three matrices (for priors, centres and Daniel@0: % variances) where each row represents the corresponding parameter Daniel@0: % values for a different mixture model and creates an array of GMMs. Daniel@0: % These can then be used with the standard Netlab Gaussian mixture Daniel@0: % model functions. Daniel@0: % Daniel@0: % See also Daniel@0: % GMM, MDN, MDNFWD Daniel@0: % Daniel@0: Daniel@0: % Copyright (c) Ian T Nabney (1996-2001) Daniel@0: % David J Evans (1998) Daniel@0: Daniel@0: % Check argument for consistency Daniel@0: errstring = consist(mdnmixes, 'mdnmixes'); Daniel@0: if ~isempty(errstring) Daniel@0: error(errstring); Daniel@0: end Daniel@0: Daniel@0: nmixes = size(mdnmixes.centres, 1); Daniel@0: % Construct ndata structures containing the mixture model information. Daniel@0: % First allocate the memory. Daniel@0: tempmix = gmm(mdnmixes.dim_target, mdnmixes.ncentres, 'spherical'); Daniel@0: f = fieldnames(tempmix); Daniel@0: gmmmixes = cell(size(f, 1), 1, nmixes); Daniel@0: gmmmixes = cell2struct(gmmmixes, f,1); Daniel@0: Daniel@0: % Then fill each structure in turn using gmmunpak. Assume that spherical Daniel@0: % covariance structure is used. Daniel@0: for i = 1:nmixes Daniel@0: centres = reshape(mdnmixes.centres(i, :), mdnmixes.dim_target, ... Daniel@0: mdnmixes.ncentres)'; Daniel@0: gmmmixes(i) = gmmunpak(tempmix, [mdnmixes.mixcoeffs(i,:), ... Daniel@0: centres(:)', mdnmixes.covars(i,:)]); Daniel@0: end Daniel@0: