train.m
资源名称:speech.rar [点击查看]
上传用户:ay_070428
上传日期:2014-12-04
资源大小:11427k
文件大小:1k
源码类别:
语音合成与识别
开发平台:
Matlab
- 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 =mfcc7(samples(k).wave);
- end
- end
- hmm = inithmm(samples, M);
- for loop = 1:40
- fprintf('n第%d遍训练nn',loop)
- hmm = baum(hmm, samples);
- %计算总输出概率
- pout(loop)=0;
- for k = 1:K
- pout(loop) = pout(loop) + viterbi(hmm, samples(k).data);
- end
- fprintf('总和输出概率(log)=%dn', pout(loop))
- %比较两个HMM的距离
- if loop>1
- if abs((pout(loop)-pout(loop-1))/pout(loop)) < 5e-6
- fprintf('收敛!n');
- return
- end
- end
- end
- disp('迭代40次仍不收敛, 退出');