0
点赞
收藏
分享

微信扫一扫

【语音识别】基于隐马尔可夫链HMM实现0~9数字语音识别含Matlab源码

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 仿真结果

【语音识别】基于隐马尔可夫链HMM实现0~9数字语音识别含Matlab源码_语音识别

4 参考文献

[1]靳双燕. 基于隐马尔可夫模型的语音识别技术研究[D]. 郑州大学, 2013.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【语音识别】基于隐马尔可夫链HMM实现0~9数字语音识别含Matlab源码_差分_02

举报

相关推荐

隐马尔可夫模型(HMM)

0 条评论