function [transition_mat, emission_mat, bins, em_pdf] = run_hmm(s_seq, s_mat, x)
if abs(x-round(x))~=0
disp('Argument must be an integer! Stopping.');
return;
end
nBins = x;
[freq, bins] = hist(s_seq, nBins);
bin_dist = (bins(2)-bins(1));
fprintf('Bin width: %f\n', bin_dist);
quant_error = 0;
for i = 1:length(s_seq)
for j = 1:nBins
dist = abs(bins - s_seq(i));
[minval, indx] = min(dist);
quant_error = quant_error + (s_seq(i) - bins(indx));
s_seq_ind(i) = indx;
end
end
fprintf('Total quantization error in indexing: %f\n', (quant_error));
[transition_mat, emission_mat] = hmmestimate(s_seq_ind, s_mat);
B = (0.3905/4)*[1 2 1];
A = [1 -0.9428 .3333];
bins = bins+(1.1*bin_dist);
em_pdf = (filter(B, A, emission_mat'))';
figure;
hold on;
legend_str = {};
for i = 1:size(emission_mat,1)
em_pdf(i, :) = em_pdf(i, :)/(bin_dist*sum(em_pdf(i, :)));
color = (i-1)/size(emission_mat,1);
plot(bins, em_pdf(i, :), 'Color', [sqrt(color), color, (color)^2]);
legend_str{i} = strcat('State ', num2str(i));
end
grid;
legend(legend_str);
title('Estimated Prob. Dist. Functions of State Emission values');
xlabel('Emission value');
ylabel('PDF value');
end
Best Answer