基于MATLAB的特定人语音识别软件开发与设计
2017-06-02蒲开放李智慧黄明慧王凤鑫王超
蒲开放 李智慧 黄明慧 王凤鑫 王超
摘要:本文介绍了基于MATLAB的特定人语音识别软件开发方法以及GUI界面设计,阐述了具体开发设计的过程。本识别方法以Mel频率倒谱系数作为特征参量,采用DTW技术进行识别,识别效果较好。本软件仍有待改进的地方,如:在有背景噪声的条件下如何提高识别率。
关键词:MATLAB;语音识别;Mel频率倒谱系数;DTW;GUI
中图分类号:TN912.34 文献标识码:A 文章编号:1007-9416(2017)04-0170-03
1 引言
语音识别主要指让机器听懂人说的话,即在各种情况下,准确的识别出语音的内容,从而根据其信息,执行人的各种意图[1]。当今,语音识别产品在人机交互应用中,已经占到越来越大的比例。语音识别系统根据对说话人的依赖程度,可以分为特定人和非特定人语音识别系统[2]。本文提出一种基于MATLAB的特定人语音识别系统,通过测试,能够达到试验要求。
2 系统功能及子模块介绍
基于MATLAB进行语音识别软件的开发与设计,识别过程分为录入语音、预处理、端点检测(即提取语音)、提取语音特征参数、与模板库中的特征参数逐一进行比较,然后选取失真测度最小的作为识别结果输出,其流程图如图1所示。
2.1 录入语音
MATLAB中录入语音可以通过wavrecord函数来录入语音。
2.2 预处理
预处理包括预加重、分帧、对语音信号加窗。
(1)预加重。预加重就是把语音信号乘以一个高通滤波器,用来对语音信号进行高频率提升,高通滤波器用一阶FIR滤波器来实现,公式为:
预加重对于语音信号有两个作用:
①增加一个零点,用来去除声门脉冲的高频频谱下跌,使得语音信號频谱变得更加平滑,所提取的语音特征符合原始声道模型;
②由于是乘以一个高通滤波器,不但对高频提升外,还把低频部分也进行衰减,同时降低基频对共振峰的检测的干扰。
(2)分帧。由于语音信号是时变的,处理时变的信号计算非常复杂,也不容易观察到语音信号的特征。但是在很短的时间内,即10ms-30ms内,语音信号可以看成非时变的。这就用到了语音的分帧技术。如果两帧不重叠,可能有一个跳变。为了使其平稳过渡,在相邻两帧设置重叠部分。
(3)加窗。语音信号经过采样后为,实际上是无限长的,需要处理的量将会很大。但进行分帧处理过后相当于乘以一个有限长的窗函数,这样就可以很好的进行运算。加窗函数的数学表达式为:
窗函数一般具有低通特性,窗函数的不同将会有不同的带宽和频谱泄漏。在语音分析中常用到的窗函数为矩形窗,汉明窗(Hamming)和海宁窗(Hanning)。本文采用的是汉明窗。
2.3 端点检测
在说话人识别的技术中,端点检测的好坏不仅关系到计算量的大小,而且关系到识别的准确率。端点检测的方法有如下几种:短时能量法、短时过零率、短时自相关函数、双门限端点检测、能熵比端点检测。本文采用双门限检测法,该方法结合了短时过零率和短时能量法两种方法。
在开始进行端点检测前,首先为短时能量和过零率分别确定两个门限。一个是较低的门限,其数值较小,对信号的变化较敏感,很容易被超过。另一个是比较高的门限,数值较大,信号必须达到一定的强度,该门限才可能被超过。
2.4 语音特征参数提取
语音信号的特征参数提取主要是提取每个人的发音特征,个性特征。这些特征经过语音处理所表现的就是共振峰,基音频率,频谱,平均基频,说同一句子时间长短的差异。而语音信号的特征提取就是要把这些参数提取出来,在训练阶段作为模板训练,形成模板库保存起来。在识别阶段,把测试语音的特征参数提取出来,与原来形成的模板库中的数据进行比较,最后识别说话人身份。选取特征参数的好坏直接影响到以后识别的准确率,因此如何准确完整的提取语音特征参数是当今说话人识别所面临的一个难题。
在众多的特征参数方法中,经过比较最后选定MFCC(Mel倒谱系数)做为特征提取的方法。它能很好的反应每个人的听觉特性,且它与频谱的非特性关系,决定了它是一种非常适合的特征参数。
MFCC提取语音信号特征参数的过程如图2所示。
(1)语音快速傅里叶变换。
对进行过预处理过的每一帧信号进行FFT变换,语音从时域数据变为频域数据,公式为:
(2)计算谱线能量。
利用式(5)对每一帧语音信号进行FFT傅里叶变换后的数据计算谱线的能量:
(3)计算通过Mel滤波器组的能量。
通过Mel滤波组计算在该Mel滤波器中每帧谱线的能量。在频域中相当把每帧的能量谱与Mel滤波器的频域响应相乘并且相加:
(4)利用式(7)计算DCT倒谱。
这样就求出了MFCC参数,即求取语音信号的特征参数的任务就完成了。
2.5 动态时间规整(DTW)
在实际生活中,语音信号具有相当大的随机性,即便是同一个人在不同时刻所讲的同一句话,发的同一个音,也不可能具有完全相同的时间长度。在进行模板匹配时,这些时间长度的变化会影响测度的估计,从而使识别率降低,因此时间规整处理就显得很有必要。DTW就是把时间规整和距离测度结合起来的一种非线性规整技术,动态时间规整就是要寻找一个时间规整函数,它将测试矢量的时间轴i非线性地映射到模板的时间轴j上,并使该函数满足
式(9)中,d[T(i),R(ω(i))]是第i帧测试矢量T(i)和第j帧模板矢量R(j)的距离测度;D则是处于最优时间规整情况下两矢量的距离。由于DTW不断地计算两矢量的距离以寻找最优的匹配路径,所以得到的两矢量匹配是累计距离最小的规整函数,这就保证了它们之间存在最大的声学相似特性[3]。
2.6 GUI界面设计
在MATLAB界面下点击新建GUI,进入到创建GUI的界面,先放入按钮,波形显示器等控件,然后加入静态文本等必要说明[4]。设计过程中的GUI如图3所示,然后保存。保存后,打开由系统自动为本图形用户界面所产生的M文件,然后在M文件中的各个子程序中加入相应的函数实体,然后运行,这样GUI界面就创建完毕。
3 实验结果
先点击训练中的“录音”按钮,对每个人录音一次,建立语音库,说话内容内容为“沈阳”。保存完毕后,点击调试下的“录音”按钮,然后随机选取语音库中的人进行“录音”,录音结束后,点击波形,就会显示出语音库中的模板波形,以及测试波形,短时能量波形、过零率波形,最后点击识别结果就会显示出系统对说话人的识别结果。经验证,目前的识别效果是100%。其中以“蒲开放”为识别人进行软件测试识别结果如图4所示 。现对图4中的波形逐一进行解释:
(1)模板波形就是语音库中的波形,测试波形就是待测试人的语音波形,两个波形都是由电脑自带的拾音器将声音转化为电压电流信号后显示出来的;
(2)短时能量波形:浊音的能量高,清音的能量低,由于图中有一定的时延,所以并未完全对齐,但还是可以看出上述规律;
(3)过零率波形:浊音的过零率低,清音的过零率高,由于图中有一定时延,所以也并未对齐,但仍然符合上述客观规律。
4 结语
本文利用Mel频率倒谱系数和DTW技术提出了基于MATLAB实现特定人语音识别的方法,并通过MATLAB GUI设计了操作界面,识别率较高。本软件仅建立了6个人的语音库,属于小容量的语音库,由于参与人数过少,识别率的可靠性不足,所以本软件仍有很大的改进空间,比如说:在有背景噪声的情况下如何提高识别的正确率。
参考文献
[1]赵力.语音信号处理[M].北京:机械工业出版社,2002.
[2]胡航.语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002.
[3]何英.MATLAB扩展编程[M].北京:清华大学出版社,2002.
[4]施晓红.精通GUI图形界面编程[M].北京:北京大学出版社,2003.