I am working on channel modeling for cognitive radio using HMM. I've written a MATLAB program for forward, backward and Baum-Welch algorithm for multiple sequences. After given some random input and running the program for 1000 to 4000 iterations I'm getting some results. But I'm not getting how to interpret my results.

Will be glad if anyone can talk about inputting matrix/log-likelihood/transition matrix/emission matrix.

  • 1
    $\begingroup$ Maybe providing a small sample of your data could help in getting more focused answers. $\endgroup$
    – chl
    Commented Oct 22, 2013 at 10:44
  • $\begingroup$ Berkan makes a good point: if you're able to program you're own HMM implementation, you must have some understanding of these parameters. Can you possibly elaborate on what specifically is confusing you? $\endgroup$
    – David Marx
    Commented Nov 21, 2013 at 14:51

1 Answer 1


For MatLab, I would recommend using the HMM toolbox. It allows you to do pretty much all you would need from an HMM model.

If you feel strongly about using your own code, before running on a real dataset, you should probably validate your Baum Welch implementation by checking whether it actually returns sensible results. You can use an experimental setup similar to below. Please note that I am using the HMM toolbox functions, but it is more the order of steps that I am trying to draw your attention to.

M = 3; % number of observation levels
N  = 2; % number of states

% A - "true" parameters (of your validation model)
prior0 = normalise(rand(N ,1));
transmat0 = mk_stochastic(rand(N ,N ));
obsmat0 = mk_stochastic(rand(N ,M));

% B- using the real parameters in step A, simulate a sequence of states and corresponding observations
n_seq = 5;  % you want to generate 5 multiple sequences
seq_len= 100; % you want each sequence to be of length 100
obs_seq, state_seq = dhmm_sample(prior0, transmat0, obsmat0, n_seq, seq_len);

% C- like you say you do, generate some initial guesses of the real parameters (from step A) that you want to learn
prior1 = normalise(rand(N ,1));
transmat1 = mk_stochastic(rand(N ,N ));
obsmat1 = mk_stochastic(rand(N ,M));

% D - train based on your guesstimates using EM (Baum-Welch)
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);

% E- Finally, compare whether your trained values in step D are actually similar to the real values (that generated your data) from Step A. 
% The simplest way to do that is to print them side by side or look at the absolute differences...


The interpretations of the transition matrix, observation (emission) matrix and loglikelihoods is a broad topic. I assume you already have a fair understanding since you could implement your own Baum-Welch. The easiest and best read on HMMs (in my opinion) is Rabiner's paper. I would recommend having a look at this if you haven't yet.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.