1 简介
语音识别技术是机器学习的重要内容之一,涉及信息处理,人工智能和模式识别等多个学科内容,已经在社会生活中得到广泛的应用.语音识别是让机器听懂人的语言,理解人的意图,并对其做出相应的反应,实现人与机器的交互通信.本文基于隐马尔可夫模型(Hidden Markov Model),建立了一套语音识别仿真系统. 本文首先分析语音信号的预处理过程,提出采用双门限法,即将短时能量和短时过零率相结合,对语音信号进行端点检测.相对于单一方法的端点检测方法能得到更精确的语音段,为语音信号的后续处理奠定了基础. 接着详细阐述了两种特征参数提取方法,包括线性预测倒谱系数(LPCC)和Mel倒谱系数(MFCC),并分析了MFCC的一阶差分系数,得出结合一阶差分后的倒谱参数,可将语音识别率提高4%左右.最后,本文着重研究了基于HMM的语音识别算法,在Matlab平台上实现了一个较为完整的语音识别仿真过程,包含语音库的建立,预处理,特征参数提取,训练(即参数选择),识别等过程.
2 部分代码
function ccc = mfcc(x)
% 归一化mel滤波器组系数
bank=melbankm(24,256,8000,0,0.5,'m');
bank=full(bank);
bank=bank/max(bank(:));
% DCT系数,12*24
for 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,:);
end
dtm = dtm / 3;
%合并mfcc参数和一阶差分mfcc参数
ccc = [m dtm];
%去除首尾两帧,因为这两帧的一阶差分参数为0
ccc = ccc(3:size(m,1)-2,:);
3 仿真结果
4 参考文献
[1]靳双燕. 基于隐马尔可夫模型的语音识别技术研究[D]. 郑州大学, 2013.