File Exchange

image thumbnail

EM for HMM Multivariate Gaussian processes

version (21.5 KB) by Sebastien PARIS
A fast implementation of the EM Algorithm for HMM Multivariate Gaussian Mixture


Updated 27 Nov 2012

View License

em_ghmm : Expectation-Maximization algorithm for a HMM with Multivariate Gaussian measurement

[logl , PI , A , M , S] = em_ghmm(Z , PI0 , A0 , M0 , S0 , [options]);


Z Measurements (m x K x n1 x ... x nl)

PI0 Initial probabilities (d x 1) : Pr(x_1 = i) , i=1,...,d. PI0 can be (d x 1 x v1 x ... x vr)

A0 Initial state transition probabilities matrix Pr(x_{k} = i| x_{k - 1} = j) such
sum_{x_k}(A0) = 1 => sum(A , 1) = 1. A0 can be (d x d x v1 x ... x vr).

M0 Initial mean vector. M0 can be (m x 1 x d x v1 x ... x vr)

S0 Initial covariance matrix. S0 can be (m x m x d x v1 x ... x vr)

options nb_ite Number of iteration (default [30])
update_PI Update PI (0/1 = no/[yes])
update_A Update PI (0/1 = no/[yes])
update_M Update M (0/1 = no/[yes])
update_S Update S (0/1 = no/[yes])


logl Final loglikelihood (n1 x ... x nl x v1 x ... x vr)

PI Estimated initial probabilities (d x 1 x n1 x ... x nl v1 x ... x vr)

A Estimated state transition probabilities matrix (d x d x n1 x ... x nl v1 x ... x vr)

M Estimated mean vector (m x 1 x d x n1 x ... x nl v1 x ... x vr)

S Estimated covariance vector (m x m x d x n1 x ... x nl v1 x ... x vr)

Please run mexme_em_ghmm to compile mex files on your platform.

Run test_em_ghmm for demo

Comments and Ratings (13)

Xue Zhang

Hi, thanks for sharing. Can this code now be used in Multivariate gaussion distribution? I mean, the observations at specified timepoint is a signal map of different gaussion distribution?


No you can't model more than one gaussian .... sorry


Josiah (view profile)

Can this code be used for HMM based speech recognition (training and recognition) or does it need tweaking via Rabiners paper? I assume for speech you would need more than one gaussian per state?

mepe mepe

Ok, thank you for the quick response!

Unfortunatly, you can't do this job with this code ....

mepe mepe

How can I use your code for multvariate gaussian mixtures? I mean that every state of the HMM can have multiple gaussians. Can you please post an example?

Have a look to :

Lawrence R. Rabiner (February 1989). "A tutorial on Hidden Markov Models and selected applications in speech recognition". Proceedings of the IEEE 77 (2): 257–286.



Dylan (view profile)

Would you mind putting on the reference paper you used? Thanks.


Dylan (view profile)

wang linghua

Please read instructions how to compile mex-files in the top of each *.c files. eg. "mex -setup" and 'mex foo.c"

wang linghua

??? Invalid MEX-file 'D:\mtlwork\em_ghmm\sample_ghmm.dll': 找不到指定的程序。
Error in ==> test_em_ghmm at 19
[Ztrain , Xtrain]= sample_ghmm(Ntrain , PI , A , M , S , L);

liudaohai liudaohai

mex -output em_ghmm.dll em_ghmm.c

mex -f mexopts_intel10amd.bat -output em_ghmm.dll em_ghmm.c

??? Error using ==> mex
Unable to complete successfully


-Fix 2 bugs (Thanks to Jonathan for reporting)

-Fixed a bug introduced in the last update

-Minor update for Linux systems

-Fixed bug with Linux64 & GCC

Correct a bug in likelihood_mvgm.c when d=1

Fixed bug in the likelihood constant computation

-add mexme_em_ghmm and compatible with LCC compiler

MATLAB Release Compatibility
Created with R2007b
Compatible with any release
Platform Compatibility
Windows macOS Linux

MATLAB Online Live Editor Challenge

View the winning live scripts from faculty and students who participated in the recent challenge.

Learn more

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video