train.m
上传用户:ay_070428
上传日期:2014-12-04
资源大小:11427k
文件大小:1k
源码类别:

语音合成与识别

开发平台:

Matlab

  1. function [hmm, pout] = train(samples, M)
  2. %输入:
  3. %  samples -- 样本结构
  4. %  M       -- 为每个状态指定pdf个数,如:[3 3 3 3]
  5. %输出:
  6. %  hmm      -- 训练完成后的hmm
  7. K   = length(samples);
  8. % 计算语音参数
  9. disp('正在计算语音参数');
  10. for k = 1:K
  11. if isfield(samples(k),'data') & ~isempty(samples(k).data)
  12. continue;
  13. else
  14. samples(k).data =mfcc7(samples(k).wave);
  15. end
  16. end
  17. hmm = inithmm(samples, M);
  18. for loop = 1:40
  19. fprintf('n第%d遍训练nn',loop)
  20. hmm = baum(hmm, samples);
  21. %计算总输出概率
  22. pout(loop)=0;
  23. for k = 1:K
  24. pout(loop) = pout(loop) + viterbi(hmm, samples(k).data);
  25. end
  26. fprintf('总和输出概率(log)=%dn', pout(loop))
  27. %比较两个HMM的距离
  28. if loop>1
  29. if abs((pout(loop)-pout(loop-1))/pout(loop)) < 5e-6
  30. fprintf('收敛!n');
  31. return
  32. end
  33. end
  34. end
  35. disp('迭代40次仍不收敛, 退出');