File Exchange

image thumbnail

EM for HMM Multivariate Gaussian processes

version 1.7 (21.5 KB) by

A fast implementation of the EM Algorithm for HMM Multivariate Gaussian Mixture



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?

Sebastien PARIS


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!

Sebastien PARIS

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?

Sebastien PARIS

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

Sebastien PARIS

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
MATLAB 7.5 (R2007b)

MATLAB Online Live Editor Challenge

Win cash prizes and have your live script featured on our website

Learn more

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

» Watch video