摘要
在通信技术的不断进步发展下,语音识别技术也取得了令人瞩目的成就,人们对语音识别技术的性能要求也越来越高。语音识别技术是通常以人们说话的内容作为识别对象的一项技术,凭借其安全高效、价格低廉、易于实现等特点,能与其它的语音处理技术结合从而创造出更复杂且实用性高的应用,对于计算机和社交生活的发展,其重要性日益突出。本文所研究的课题是基于Matlab的语音识别系统设计的研究,确切地来说是关于特定人的语音识别设计的研究。
本文主要介绍并运用了高斯混合模型(GMM)和MFCC(Mel频率倒谱系数)这两个算法来实现语音识别的过程。用高斯函数最大程度的近似表示信号的概率。首先,对语音信号进行预处理;其次通过Mel倒谱系数MFCC提取语音特征参数;设置一个模板库,用来存储大量并已提取特征参数的语音信号;将待识别的语音信号与模板库中的语音信号经过同一通道后进行比较,最终得到比较结果。由于在程序中难以观察到结果,故添加了MATLAB GUI界面,用户可以通过操作MATLAB GUI界面中的按钮观看到语音识别的基本过程,并且最终的识别结果也会清晰的显示在界面上。本次设计经过多次的实际操作,语音识别正确率可达百分之九十左右。
关键词:MATLAB GUI,GMM,MFCC
1 高斯混合模式及语音信号的预处理
1.1 高斯混合模式(GMM)介绍与数学原理
多个高斯模型的叠加就构成了所谓的高斯混合模型(GMM),高斯混合模型可以用概率来进行划分、量化任何事物,概率越高越属于这类事物,且可以拟合出任意的分布图形。任何事物的数学表现形式都是曲线,若干个高斯概率密度函数的和可以组合成一个事物,所以它的表达能力很强。任意曲线都可以用高斯函数来表示,曲线是用来描述一组数据的结果,与以往的存储数据比较,通过高斯混合模型更容易表达数据,且有完整的数学表达公式。所以如果用一条曲线来表示语音信号,那么这样的曲线就有了现实的意义。并且GMM能满足在数据维数增加的情况下也能对其进行训练分类,这也是语音识别运用到高斯混合模型的一个重要原因。
高斯混合模型(GMM)的数学原理是用高斯函数近似地表示曲线或曲面。
在二维的情况下,若干个高斯函数组合起来可以近似的看成是一个复杂的曲线。二维高斯函数的数学表达式如1-1为:
(2-1)
其中σ是标准差,μ是均值。任何一个曲面都可以用高斯函数来逼近。
在三维情况下,三维高斯混合模型和二维的情况差不多,二维表示的是表示曲线,而三维表示的是曲面。即用高斯函数近似的表示任何一个曲面。三维高斯函数的数学表达式以及其中字母代表的含义如1-2为:
(1-2)
其中 、 是均值, 、 是标准差,ρ是协方差。
N维情况下,也是和二维三维的情况一样,也是用高斯函数来近似表示N维信号。N维高斯函数表达式2-3为:
(1-3)
其中μ是均值向量,Σ是协方差矩阵。
2.1 语音信号的数字化处理
语音信号的数字化一般是由放大、增益控制、防混叠滤波、采样、模数转换以及编码几步骤组成。本文中主要介绍了防混叠滤波、采样、模数转换及编码。通过对原始语音信号进行采样、量化和编码,可以将其转换为幅度和时间离散的数字语音信号。第一步进行采样,由于模拟语音信号是一段连续且不间断的波形,将其分割成等间隔的若干份在时间上不连续但幅值上连续的离散模拟信号,且需满足采样定理(抽样频率大于信号的2倍带宽);第二步是进行量化,把分割好的在时间上不连续但幅值上连续的离散模拟信号的波形分成一个个点,即变成时间上不连续且幅值上也不连续的信号;最后编码,通过计算机特定的语言将这些点变换为二进制数字码[5]。
2.3 预加重处理
每个人的声学特征都不同,例如低高音的不同,且人在说话的时候易受嘴唇和声门激励等人类发声器官本身影响,在高于800hz的高频下,语音信号的平均功率谱容易衰减,对此要进行预加重处理。预加重在抗混叠滤波和A/D转换之前执行,通常,采用一阶FIR高通数字滤波器用于增强语音信号的高频的部分,减少嘴唇和声门效应的影响,突出显示语音的高频信号部分的共振峰,使语音信号的频谱更加均匀和平滑,易于提取高质量参数,并更好地分析信号。
在程序中,首先用audioread这个函数读取语音文件,并对信号进行模数转换;其次把语音信号变成双精度类型(double),达到比较高的精确度,最后进行预加重处理。
2.4 预滤波处理
A/D转换后用防混叠滤波器(应用上是一个频率为100hz~3.4khz的低通滤波器,具有优良的截止特性)作为平滑滤波器,防止混叠引起的失真和噪声、市电引起的频率干扰。
3 程序流程设计
3.2.1 创建文件
首先创建YUYINSHIBIE.m文件,先设置一个全局变量sc,把sc附一个内容并显示在listbox2上,并在listbox2上显示"请选择需要训练的语音库"这一字样。
3.2.2 录制语音库
下面对现场录音识别进行操作,用户在"请输入需要录制的语音名称"这一可编辑文本框里输入想命名的文件名,点击录制语音库,此时界面上显示"开始录音",本次设计是6秒的语音录制,6秒过后,界面则显示"结束录音",保存文件并在界面上可显示文件保存的路径。如下图4.7所示。
图4.7 录制语音库
3.2.3 添加语音库
接下来对按钮1进行编辑,如下列程序所示,把按钮1命名为"添加语音库"。需要先设置一个全局变量,读取文件夹的路径代码,然后读取文件夹里的说话人数,如果文件夹里没有语音文件,在listbox2中提示"抱歉,请在文件夹中放入需要训练的语音",如果文件夹里有语音文件则显示"需要训练的语音有',num2str(speakerNum),'个",如下图4.8所示。
图4.8 添加语音库
3.2.4 提取并训练语音库
下列程序是对按钮2,编辑成"提取并训练语音库"。在listbox2中提示用户"正在提取第',num2str(i),'个人",并停顿0.5秒,让用户更直观的观察。这段程序是实现经过预处理和高斯混合模型(GMM)),提取语音信号的特征并将其保存在一个模式库中,如下图4.9所示。
图4.9 提取训练语音库
3.2.5 选择识别语音
下列程序是对按钮3,编辑成 "选择识别的语音"。这段程序是让用户选择需要识别的语音文件,并对它进行预加重、特征提取等步骤。如下图4.10所示。
图4.10 选择识别语音
3.2.6 语音识别
下列程序是对按钮4,编辑成"开始识别"。这段程序是把选择的语音信号文件与模式库中的语音文件进行对比,得出的最终识别结果会显示在listbox2上,如下图4.11所示。
图4.11 识别结果
3.2.7 退出
添加一个按钮5,编辑成"退出"。用户可以根据退出按钮选择是继续执行还是退出观察。如下图4.12所示。
图4.12 退出界面
以上就基本完成语音识别的整个过程。
4 总结
通过这次毕业设计的制作与编写,我有了非常多的收获常言道,一个好的开始意味着成功的一半。在这次毕业设计的选题当中,我选择了一个自己非常感兴趣的题目,本课题研究的是基于Matlab的语音识别系统设计。在该次论文的编写上,我首先对语音识别技术做了一个基本的介绍,然后在分析语音信号的基础上,采用高斯混合模型(GMM)和MFCCC参数算法来保证语音特征识别的准确性。同时为了更直观的观测到语音识别的结果和实现算法的运行,利用MATLAB编写图形界面GUI。除此之外介绍了语音识别的各个功能模块,编写了一套基于MATLAB的语音识别程序,在编写程序中遇到了许多的困难,不断地查阅文献和请教老师同学。也介绍了程序的设计和运行。通过MATLAB强大的算法功能,能够非常准确地实现语音识别的检测。