【语音识别】基于隐马尔可夫链HMM实现0~9数字语音识
别含Matlab源码
1 简介
语音识别技术是机器学习的重要内容之一,涉及信息处理,人工智能和模式识别等多个学科内容,已经在社
会生活中得到广泛的应用.语音识别是让机器听懂人的语言,理解人的意图,并对其做出相应的反应,实现人
与机器的交互通信.本文基于隐马尔可夫模型(Hidden Markov Model),建立了一套语音识别仿真系统. 本
文首先分析语音信号的预处理过程,提出采用双门限法,即将短时能量和短时过零率相结合,对语音信号进
行端点检测.相对于单一方法的端点检测方法能得到更精确的语音段,为语音信号的后续处理奠定了基础.
接着详细阐述了两种特征参数提取方法,包括线性预测倒谱系数(LPCC)和Mel倒谱系数(MFCC),并分析了
MFCC的一阶差分系数,得出结合一阶差分后的倒谱参数,可将语音识别率提高4%左右.最后,本文着重研究
了基于HMM的语音识别算法,在Matlab平台上实现了一个较为完整的语音识别仿真过程,包含语音库的建
立,预处理,特征参数提取,训练(即参数选择),识别等过程.
2 部分代码
3 仿真结果
function ccc = mfcc(x)% 归一化mel滤波器组系数
bank=melbankm(24,256,8000,0,0.5,'m');bank=full(bank);bank=bank/max(bank(:));% DCT
系数,12*24for k=1:12 n=0:23; dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));end% 归一化倒
谱提升窗口w = 1 + 6 * sin(pi * [1:12] ./ 12);w = w/max(w);% 预加重滤波器
xx=double(x);xx=filter([1 -0.9375],1,xx);% 语音信号分帧xx=enframe(xx,256,80);% 计算
每帧的MFCC参数for i=1:size(xx,1) y = xx(i,:); s = y' .* hamming(256); t =
abs(fft(s)); t = t.^2; c1=dctcoef * log(bank * t(1:129)); c2 = c1.*w';
m(i,:)=c2';end%差分系数dtm = zeros(size(m));for i=3:size(m,1)-2 dtm(i,:) =
-2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);enddtm = dtm / 3;%合并mfcc参数和一阶
差分mfcc参数ccc = [m dtm];%去除首尾两帧,因为这两帧的一阶差分参数为0ccc =
ccc(3:size(m,1)-2,:);
评论1