diff toolboxes/FullBNT-1.0.7/netlab3.3/mdn2gmm.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdn2gmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function gmmmixes = mdn2gmm(mdnmixes)
+%MDN2GMM Converts an MDN mixture data structure to array of GMMs.
+%
+%	Description
+%	GMMMIXES = MDN2GMM(MDNMIXES) takes an MDN mixture data structure
+%	MDNMIXES containing three matrices (for priors, centres and
+%	variances) where each row represents the corresponding parameter
+%	values for a different mixture model  and creates an array of GMMs.
+%	These can then be used with the standard Netlab Gaussian mixture
+%	model functions.
+%
+%	See also
+%	GMM, MDN, MDNFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check argument for consistency
+errstring = consist(mdnmixes, 'mdnmixes');
+if ~isempty(errstring)
+  error(errstring);
+end
+
+nmixes = size(mdnmixes.centres, 1);
+% Construct ndata structures containing the mixture model information.
+% First allocate the memory.
+tempmix = gmm(mdnmixes.dim_target, mdnmixes.ncentres, 'spherical');
+f = fieldnames(tempmix);
+gmmmixes = cell(size(f, 1), 1, nmixes);
+gmmmixes = cell2struct(gmmmixes, f,1);
+
+% Then fill each structure in turn using gmmunpak.  Assume that spherical
+% covariance structure is used.
+for i = 1:nmixes
+  centres = reshape(mdnmixes.centres(i, :), mdnmixes.dim_target, ...
+    mdnmixes.ncentres)';
+  gmmmixes(i) = gmmunpak(tempmix, [mdnmixes.mixcoeffs(i,:), ...
+      centres(:)', mdnmixes.covars(i,:)]);
+end
+