www.pudn.com > hmm--matlab.rar > train.m
function [hmm,pout] = train(samples,M)
%输入:
% samples--样本结构
% M--为每个状态知道pdf个数,如【3 3 3 3】
%输出:
% hmm--训练完成后的hmm
K = length(samples);
%计算语音参数
disp('正在计算语音参数……')
for k=1:K
if isfield(samples(k),'data')&~isempty(samples(k).data)
continue;
else
samples(k).data = mfcc(samples(k).wave);
end
end
hmm = inithmm(samples,M);
for loop =1:20
fprintf('\n第%d遍训练\n\n',loop)
hmm = baum(hmm,samples);
%计算总输出概率
pout(loop) = 0;
for k=1:K
pout(loop) = pout(loop)+viterbi(hmm,samples(k).data);
end
fprintf('总和输出概率(log)=%d\n',pout(loop));
%比较两个HMM的距离
if loop>1
if abs((pout(loop)-pout(loop-1))/pout(loop))<5e-6;
fprintf('收敛\n');
end
end
end
disp('迭代20次仍不收敛,退出');