基于Matlab的语音识别系统设计
在通信技术的不断进步发展下,语音识别技术也取得了令人瞩目的成就,人们对语音识别技术的性能要求也越来越高。语音识别技术是通常以人们说话的内容作为识别对象的一项技术,凭借其安全高效、价格低廉、易于实现等特点,能与其它的语音处理技术结合从而创造出更复杂且实用性高的应用,对于计算机和社交生活的发展,其重要性日益突出。本文所研究的课题是基于Matlab的语音识别系统设计的研究,确切地来说是关于特定人的语音识
系统简介
在通信技术的不断进步发展下,语音识别技术也取得了令人瞩目的成就,人们对语音识别技术的性能要求也越来越高。语音识别技术是通常以人们说话的内容作为识别对象的一项技术,凭借其安全高效、价格低廉、易于实现等特点,能与其它的语音处理技术结合从而创造出更复杂且实用性高的应用,对于计算机和社交生活的发展,其重要性日益突出。本文所研究的课题是基于Matlab的语音识别系统设计的研究,确切地来说是关于特定人的语音识别设计的研究。
本文主要介绍并运用了高斯混合模型(GMM)和MFCC(Mel频率倒谱系数)这两个算法来实现语音识别的过程。用高斯函数最大程度的近似表示信号的概率。首先,对语音信号进行预处理;其次通过Mel倒谱系数MFCC提取语音特征参数;设置一个模板库,用来存储大量并已提取特征参数的语音信号;将待识别的语音信号与模板库中的语音信号经过同一通道后进行比较,最终得到比较结果。由于在程序中难以观察到结果,故添加了MATLAB GUI界面,用户可以通过操作MATLAB GUI界面中的按钮观看到语音识别的基本过程,并且最终的识别结果也会清晰的显示在界面上。本次设计经过多次的实际操作,语音识别正确率可达百分之九十左右。
关键词:MATLAB GUI,GMM,MFCC
第1章 绪 论
1.1 语音识别技术的研究背景与意义
以语音信号为直接研究对象的语音识别技术,是通过对语音信号进行一系列处理并识别语音的一种模式。或者说,将语音信号转换为相应的命令形式,以便计算机可以识别和理解人们的语言,从而做出正确的反应。过去几十年来,语音识别技术获得了一系列令人瞩目的发展,基本形成了完整的语音识别理论体系[1]。并在人类的日常生活中得到充分地应用和发展。例如语音搜索、语音文档检索、歌曲识别甚至警察筛除犯罪嫌疑人等活动都运用到了语音识别。人类预计,语音识别技术将在未来十年内进入人类生活、生产、服务等各个领域。
随着科学技术的发展,与语音识别技术有关的产品也已经响应市场需求而推出,例如能够识别自认语音的机器人。在通信系统中,语音识别技术与其他自然语音处理技术的结合可以完全改变传统的通信服务模式。通过使用具有语音处理和语音技术功能的通信网络,可以查询和提取远程数据库系统中的信息。总之,语音识别技术和自然语言处理技术正逐渐成为信息技术中人机接口的关键技术,也许在不久的未来,人类可以将两者结合起来组合语音命令,取代以往只能操作按钮的控制。
语音识别具有重要研究作用,以其开发研制出的产品应用广泛,深入社会的各个行业,有着深刻的社会经济意义。
1.2 文献综述
1.2.1 国内研究
二十世纪八十年代开始,中国已经开始了语音识别技术的研究和探索,并获得了许多成就。国家实施了863计划,然后成立了一个专家小组,专门设立了语音识别技术研究项目。二十世纪初,中国科学院自动化研究所及其附属模型技术(Pattek)公司发布了针对不同计算机平台和应用的“天语”中文语音系列产品-PattekASR,从而结束了外国公司垄断中文语音识别产品的历史。众多高校建立的科学研究所都进行过对语音识别技术的研究。最具代表性的研究机构是中国科学院自动化研究所和清华大学电子工程系模式识别国家重点实验室。目前,我国的语音识别技术已基本达到国际先进水平,在世界上占有一席之地,与国外先进技术实力相当,其综合错误率可以掌控在百分之十之内[2]。
在语音识别技术的深入发展和广泛应用下,语音识别技术正逐步形成一套比较完善的理论体系,在移动互联网应用中发挥越来越大的作用,中国最大的搜索公司—百度,中国用户最多的互联网公司—腾讯,语音识别技术在生活服务、学习、娱乐等互联网中也占据着越来越高的地位[3]。
1.2.2 国外研究
语音识别在社会生活中得到了广泛的应用,也受到了国际科学界的重视。以戴维斯等人的Audry系统为例,只能识别几个英文字母作为语音识别技术研究的开始,它已经能够进行即兴对话和Siri语音交互。语音识别技术的发展已经走了70年。动态规划和线性预测分析技术、动态时间规整技术(DTW)基本成熟、矢量量化(VQ)和隐马尔科夫模型理论(HMM)的不断完善、HMM模型人工神经网络(ANN)的发明,都代表了语音识别技术的阶段历史发展,上个世纪九十年代后,语音识别技术开始在全球市场上使用。许多著名的技术公司都在语音识别系统的开发和研究上投入了大量资金,例如IBM推出NaturallySpeaking对Nuance的公司NuanceVoicePlatform的语音平台。
从国内外对语音识别技术的研究现状可以得出,语音识别技术将加剧对人类生产和生活的影响,扩大应用领域,在科研领域中仍占据重要地位。
1.3 课题研究主要内容
(1)本文主要围绕国内外语音识别技术的研究背景,意义和研究现状。语音识别技术之所以吸引了各国科学界的关注的原因,对于人类来说具体的重要意义。
(2)本文对语音识别技术设计系统方案,根据软件代码编写思路,介绍了高斯混合模型(GMM)的数学原理和算法及语音信号的预处理、语音信号的特征参数提取,语音识别的过程,还介绍了MFCC的算法。
(3)最后对程序的运行和设计做了简要介绍,也表明对本次毕业设计的总结及对课题设计的展望。
1.4 课题研究方法
(1)理论推导+文献研究法:根据所学的专业理论知识和查阅相关的专业书籍,针对语音识别研究目的以及课题的需要,对语音识别技术研究进行全面系统的设计和选择设计的方案。从而全面了解语音识别技术,不断发现问题,解决问题。
(2)仿真法:用MATLAB对设计的语音识别系统进行仿真、调试,并不断加以改进。
(3)实验法:对设计出的系统进行试验分析,不断改进直至达到预期效果。
1.5 方案设计思想方法
本文语音识别系统以MATLAB软件为平台。语音识别系统本质上是一种模式识别过程,首先输入需要识别的语音信号;其次对输入的语音信号进行分析和处理以过滤掉冗余信息;之后是提取出语音信号中具有区分性的语音特征,建立语音识别所需的参考模式库,并把处理过的语音特征保存到模板库;最后语音信号经过相同信道得到的语音参数与模板库里的语音匹配得到最终识别结果[4]。其研究基本思路方法如下图1.1展示。
图1.1 语音识别流程
第2章 高斯混合模式及语音信号的预处理
2.1 高斯混合模式(GMM)介绍与数学原理
多个高斯模型的叠加就构成了所谓的高斯混合模型(GMM),高斯混合模型可以用概率来进行划分、量化任何事物,概率越高越属于这类事物,且可以拟合出任意的分布图形。任何事物的数学表现形式都是曲线,若干个高斯概率密度函数的和可以组合成一个事物,所以它的表达能力很强。任意曲线都可以用高斯函数来表示,曲线是用来描述一组数据的结果,与以往的存储数据比较,通过高斯混合模型更容易表达数据,且有完整的数学表达公式。所以如果用一条曲线来表示语音信号,那么这样的曲线就有了现实的意义。并且GMM能满足在数据维数增加的情况下也能对其进行训练分类,这也是语音识别运用到高斯混合模型的一个重要原因。
高斯混合模型(GMM)的数学原理是用高斯函数近似地表示曲线或曲面。
在二维的情况下,若干个高斯函数组合起来可以近似的看成是一个复杂的曲线。二维高斯函数的数学表达式如2-1为:
(2-1)
其中σ是标准差,μ是均值。任何一个曲面都可以用高斯函数来逼近。
在三维情况下,三维高斯混合模型和二维的情况差不多,二维表示的是表示曲线,而三维表示的是曲面。即用高斯函数近似的表示任何一个曲面。三维高斯函数的数学表达式以及其中字母代表的含义如2-2为:
(2-2)
其中 、 是均值, 、 是标准差,ρ是协方差。
N维情况下,也是和二维三维的情况一样,也是用高斯函数来近似表示N维信号。N维高斯函数表达式2-3为:
(2-3)
其中μ是均值向量,Σ是协方差矩阵。
2.2 语音信号的数字化处理
语音信号的数字化一般是由放大、增益控制、防混叠滤波、采样、模数转换以及编码几步骤组成。本文中主要介绍了防混叠滤波、采样、模数转换及编码。通过对原始语音信号进行采样、量化和编码,可以将其转换为幅度和时间离散的数字语音信号。第一步进行采样,由于模拟语音信号是一段连续且不间断的波形,将其分割成等间隔的若干份在时间上不连续但幅值上连续的离散模拟信号,且需满足采样定理(抽样频率大于信号的2倍带宽);第二步是进行量化,把分割好的在时间上不连续但幅值上连续的离散模拟信号的波形分成一个个点,即变成时间上不连续且幅值上也不连续的信号;最后编码,通过计算机特定的语言将这些点变换为二进制数字码[5]。
2.3 预加重处理
每个人的声学特征都不同,例如低高音的不同,且人在说话的时候易受嘴唇和声门激励等人类发声器官本身影响,在高于800hz的高频下,语音信号的平均功率谱容易衰减,对此要进行预加重处理。预加重在抗混叠滤波和A/D转换之前执行,通常,采用一阶FIR高通数字滤波器用于增强语音信号的高频的部分,减少嘴唇和声门效应的影响,突出显示语音的高频信号部分的共振峰,使语音信号的频谱更加均匀和平滑,易于提取高质量参数,并更好地分析信号。
在程序中,首先用audioread这个函数读取语音文件,并对信号进行模数转换;其次把语音信号变成双精度类型(double),达到比较高的精确度,最后进行预加重处理。
2.4 预滤波处理
A/D转换后用防混叠滤波器(应用上是一个频率为100hz~3.4khz的低通滤波器,具有优良的截止特性)作为平滑滤波器,防止混叠引起的失真和噪声、市电引起的频率干扰。
第3章 提取语音信号特征参数
3.1 MFCC概述
梅尔频率倒谱(简称MFCC)是一种基于人类听力的模型,主要基于频率作为基本特征。它将频谱转化为基于梅尔标度频域提取出来的非线性频谱,然后将其转换为倒谱域上。用滤波器组计算MFCC参数,频带在梅尔刻度上是等宽的,信号能量通过滤波器输出,用作信号的基本特征,再进一步的处理,就可以作为语音信号的输入特征。由于人类的听觉特性,在不做任何前提假设和无限制的情况下,使用MFCC提取语音信号特性参数具有出色的抗干扰和识别能力。MFCC的过程主要是把经过预处理后的信号前后经过分帧、加窗、快速傅里叶变换(FFT)、Mel滤波器组、对数运算、离散余弦变换(DCT)、动态差分参数(一阶差分和二阶差分参数)的提取。对信号进行帧化并进行汉明窗处理,然后通过短时傅立叶变换获得频谱,并对频谱进行平方,即能量谱。然后用m个Mel带通滤波器进行滤波,对每个滤波器的输出进行对数运算,以获得对应频带对数的功率谱,并进行离散余弦变换。获得的MFCC特征用作静态特征以提取动态差分参数,得到动态特性[6]。提取语音信号过程与下图3.1所示。
图3.1 语音信号提取参数流程
3.2 语音信号的截取
在MATLAB中对语音信号的截取主要是通过epInSampleIndex=epdByVol(y, fs)函数来实现的,信号的MFCC特征参数可以通过melcepst函数计算[7]。人在说话的时候可能会有停顿且说话时也不能一次性表达完整,所以本次设计采取端点检测法,能在一段语音信号中准确检测出信号的始端和终端。系统对语音进行端点定位,然后去除语音前后多余的噪音段,所以本次语音识别设计采用端点检测法截取有效的语音信号。利用具有短期能量和短时平均过零率的特性的双门限算法,实现了语音信号端点的检测,有效消除语音的无声部分引起的噪声,减少处理信号的时间,提高性能[8]。
3.3 分帧
语音信号只有处于平稳的状态时才能更好地对信号进行处理和分析,由于语音信号具有短期稳定的特点,在短时间里能维持它的基本特征,因此要采用短期分析技术。把语音信号进行帧处理来变成平稳的状态,即分割成多个片段,这可以通过重叠信号来实现。移帧是指两个帧之间的重叠的部分。通常情况下,语音信号的帧长约为20ms,可以看做处于平稳的状态,帧移和帧长的比率通常是0-0.5。可用enframe函数对语音信号进行分帧。
3.4 加窗
在对语音信号进行分帧后,每一帧都会出现间断或重叠,且分割的帧越多,原始信号的误差越大,故在帧处理后要进行加窗,加窗后可以增加语音信号的连续性,且每一帧都能表现出周期函数的特性。故在本文对语音信号的处理中,增加的是汉明窗,用hamming函数来实现加窗。
3.5 快速傅里叶变换(FFT)
在时域中,很难看出语音信号的特性。为了将语音信号转换为频域中的能量分布以进行观察和研究,需要通过快速傅立叶变换来实现。频域中的不同能量具有其自身的特征,加窗后每一帧语音信号的快速傅立叶变换被分为n个复数,每一个点表示一个频率,这些点复数的模值就是该频率的幅度特性,可以得到每一帧语音信号在频域上的能量分布。用f=rfft(z.')函数来实现快速傅里叶变换。
3.6 应用Mel滤波器组
Mel滤波器组(一组非线性分布的三角带通滤波器),可以平滑经过快速傅里叶变换的频谱和具有消除谐波的作用,Mel滤波器组在低频处分布密集,高频处分布稀疏,能更容易让人耳接受,充分考虑到人类的听觉系统。Mel频率可以根据公式3-1表示:
(3-1)
其中,三角带通滤波器的设计为:假设语音信号的采样频率,滤波器的个数k=22,帧长N=256,由此得到语音信号的最大频率
又根据公式3-1求出最大梅尔频率为。
在梅尔标度的范围内,由于每个三角形滤波器的中心频率均等线性分布,可以由公式3-2得到两个相邻的三角滤波器的中心频率的间距:
(3-2)
在程序上用melbankm函数实现此过程的。
3.7 对数运算
由于人耳对声音的感知是非线性的,用对数运算这种非线性关系更好描述,最重要的是,对数运算后才能更好地进行倒谱分析。通过如下公式3-3计算出每个滤波器组输出的对数能量:
(3-3)
在程序上通过ath=sqrt(pth);y=log(max(m*abs(f(a:b,:)),ath))这个函数语句来实现[9]。
3.8 离散余弦变换(DCT)
离散余弦变换有很好的能量聚集效应,经过离散余弦变换,进一步压缩语音数据,将语音信号的信息块变成不同频率分量的系数集。就能得到MFCC系数,通过下列公式3-4来计算得到。
(3-4)
用c=rdct(y)函数来实现离散余弦变换。
3.9 动态差分参数的提取
由于语音信号在时域上是连续的,MFCC系数也只能反映语音信号的静态特性,为了使语音特性在时域上更加连贯,可以通过提取动态差分参数在特征维度上增加信息的维度,把语音信号的静态、动态特性结合起来,构成一个作为语音信号的最终特征参数[10]。通过下列公式3-5来实现。
(3-5)
其中Q代表倒谱系数的阶数,K代表一阶导数的时间差,代表第t个一阶差分,代表第t个倒谱系数。通过以上步骤,提取MFCC参数特征就完成了[11]。
第4章 MATLAB GUI与程序流程设计
4.1 MATLAB GUI
4.1.1 MATLAB GUI的背景介绍
图形用户界面(GUI)是指以图形方式显示人与计算机之间的通信,将晦涩难懂的计算机程序中的操作转变为用户易于理解的简单图形界面的界面,用户即可理解复杂的电脑语言背后所表达的内容,且操作简单便捷,从而实现人机交互,为用户带来良好体验。
20世纪80年代,苹果公司是第一个通过图形用户界面推广商业产品的公司。 在那时,用户可以根据自己的需要在屏幕上自由操作,得到大众的广泛使用。此后图形用户界面不断优化,逐步成熟,被广泛应用于计算机等电子设备们可以通过菜单操作界面,受到人们的热烈推从,此后GUI被广泛应用于计算机、智能手机等电子信息产品[12]。此章介绍GUI是为下一节做基础。
4.1.2 GUI界面的设计
创建一个GUI界面,在命令行中输入guide,然后按回车,如下图4.1所示。
图4.1 创建GUI界面
启动GUIDE快速入门,选择Blank GUI(Default),然后单击“确定”按钮,如下图4.2所示。
图4.2 选择保存界面
之后出现主界面,即用户使用的图形界面。在图形用户界面中添加程序所需的按钮或图标,就可以实现程序的操作。如下图4.3所示。在学习GUI界面中,我们必须了解主界面中每一个图标的含义,从而正确语音识别设计所需要的操作按钮。
图4.3 GUI界面
如下图4.4所示,从左到右所示分别为坐标轴框、面板、切换按钮、表、按钮组、ActiveX控制、单选按钮、复选框、按钮、滑动条、可编辑文本、静态文本。本次语音识别设计主要使用坐标轴、列表框、按钮和可编辑文本四个工具。
GUI坐标轴:通过GUI显示语音信号的波形。
GUI列表框:列表框可以直接呈现出用户选择的信息,针对不同的信息,可以执行不同的程序功能。用户能在计算机上直观的看到执行的过程,列表框也会显示相应的图形文字。
GUI按钮:单击按钮,将执行“按钮”下方的相关执行程序。实现相应功能的运行。
GUI可编辑文本:这是用户输入数字或文本的对话框,可以通过可编辑文本来命名所需的文件,并保存在相应的指定位置。
图4.4 工具图标
选择“按钮”工具放置在主页面相应的位置上,双击“按钮”工具,出现如下图4.5所示的界面,再对按钮进行编辑。
图4.5 图标按钮
所研究的语音识别系统主要有四个步骤,分为添加语音库、训练语音库、选择要识别的语音、开始识别。首先在GUI可编辑文本命名录制的语音,添加到语音库;添加语音库的目的是为了让用户添加指定的语音文件,训练语音库并保存到参考模式库中;用户选择需要识别的语音文件,通过回调程序函数开始识别需要识别的语音文件,把要识别的语音文件与参考模式库中的语音文件进行比较,以进行特征相似度测量,给出最终识别结果。在相应的位置上放置相应的工具,如下图4.6所示,此外,为了方便用户结束识别,添加一个退出按钮。
图4.6 语音识别GUI界面
4.2 程序流程设计
4.2.1 创建文件
首先创建YUYINSHIBIE.m文件,先设置一个全局变量sc,把sc附一个内容并显示在listbox2上,并在listbox2上显示“请选择需要训练的语音库”这一字样。
4.2.2 录制语音库
下面对现场录音识别进行操作,用户在“请输入需要录制的语音名称”这一可编辑文本框里输入想命名的文件名,点击录制语音库,此时界面上显示“开始录音”,本次设计是6秒的语音录制,6秒过后,界面则显示“结束录音”,保存文件并在界面上可显示文件保存的路径。如下图4.7所示。
图4.7 录制语音库
附录
function varargout = yuyinshibie(varargin)
% YUYINSHIBIE MATLAB code for yuyinshibie.fig
% YUYINSHIBIE, by itself, creates a new YUYINSHIBIE or raises the existing
% singleton*.
%
% H = YUYINSHIBIE returns the handle to a new YUYINSHIBIE or the handle to
% the existing singleton*.
%
% YUYINSHIBIE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in YUYINSHIBIE.M with the given input arguments.
%
% YUYINSHIBIE('Property','Value',...) creates a new YUYINSHIBIE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before yuyinshibie_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to yuyinshibie_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help yuyinshibie
% Last Modified by GUIDE v2.5 01-Jun-2019 10:22:04
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @yuyinshibie_OpeningFcn, ...
'gui_OutputFcn', @yuyinshibie_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before yuyinshibie is made visible.
function yuyinshibie_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to yuyinshibie (see VARARGIN)
% Choose default command line output for yuyinshibie
global sc
sc='';
set(handles.listbox2,'string',num2str(sc),'fontsize',10);
handles.output = hObject;
A='¢ÙÇëÑ¡ÔñÐèҪѵÁ·µÄÓïÒô¿â...';
sc=[sc,A,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes yuyinshibie wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = yuyinshibie_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global sc filepath
filepath = uigetdir;%¶ÁÈ¡Îļþ¼Ð·¾¶´úÂë
speakerData = dir(filepath);%¶ÁÈ¡Îļþ¼ÐÖеÄÓïÒôÊý¾Ý
speakerData(1:2) = [];
speakerNum=length(speakerData);%speakerNum:ÈËÊý£»
if speakerNum==0
B='±§Ç¸£¬ÇëÔÚÎļþ¼ÐÖзÅÈëÐèҪѵÁ·µÄÓïÒô.';
sc=[sc,B,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
else
C=['ÐèҪѵÁ·µÄÓïÒôÓÐ',num2str(speakerNum),'¸ö'];
D='Ç뿪ʼѵÁ·ÓïÒô¿â...';
sc=[sc,C,10];
sc=[sc,D,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global sc filepath speakerData speakerGmm
speakerData = dir(filepath);
filename=strcat(filepath,'\');
speakerData(1:2) = [];%È¥³ýǰÁ©ÐÐÎÞÊý¾Ý
speakerNum=length(speakerData);%speakerNum:ÈËÊý£»
if speakerNum==0
E='±§Ç¸£¬ÇëÔÚÎļþ¼ÐÖзÅÈëÐèҪѵÁ·µÄÓïÒô.';
sc=[sc,E,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
else
F='¢Ú¶ÁÈ¡ÓïÒôÎļþ²¢½øÐÐÌØÕ÷ÌáÈ¡...';
pause(0.5)
sc=[sc,F,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
for i=1:speakerNum
G=['ÕýÔÚÌáÈ¡µÚ',num2str(i),'¸öÈË',speakerData(i,1).name(1:end-4),'µÄÌØÕ÷'];
sc=[sc,G,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
pause(0.5)
[y, fs]=audioread([filename speakerData(i,1).name]);
y=double(y);
y=y/max(y);%Ô¤¼ÓÖØ
epInSampleIndex=epdByVol(y, fs); % ½ØÈ¡ÓïÒôµÄ¿ªÊ¼²¿·ÖÓë½áÊø²¿·Ö
y=y(epInSampleIndex(1):epInSampleIndex(2)); % ɾ³ýû˵»°µÄ²¿·Ö
speakerData(i).mfcc=melcepst(y,8000);%¼ÆËã÷¶ûƵÂʵ¹Æ×ϵÊý
H='Íê³É£¡£¡';
sc=[sc,H,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
end
G='¢ÛѵÁ·Ã¿¸öÓïÕߵĸß˹»ìºÏÄ£ÐÍ...';
gaussianNum=12;
pause(0.5)
sc=[sc,G,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
for i=1:speakerNum
H=['ΪµÚ',num2str(i),'¸öÓïÕß',speakerData(i,1).name(1:end-4),'ѵÁ·GMM'];
sc=[sc,H,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
[speakerGmm(i).mu, speakerGmm(i).sigm,speakerGmm(i).c] = gmm_estimate(speakerData(i).mfcc(:,5:12)',gaussianNum,20);
I='Íê³É£¡£¡';
sc=[sc,I,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
end
save speakerDate
save speakerGmm
end
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global pathall sc
[filename,pathname]=uigetfile('.wav');
pathall=strcat(pathname,filename);
lsz=['½ÓÏÂÀ´½«¶Ô',num2str(filename),'½øÐÐÓïÒôʶ±ð.'];
sc=[sc,lsz,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
[y,fs]=audioread(pathall); %¶ÁÈ¡ÓïÒôÎļþÊý¾Ý
axes(handles.axes1);
plot(y);
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global sc pathall speakerData speakerGmm
J='¢Üʶ±ðÖÐ...';
sc=[sc,J,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
pause(0.5)
[testing_data, fs] = audioread(pathall);
match= MFCC_feature_compare(testing_data,speakerGmm);
[max_1 index]=max(match);
K=['˵»°ÈËÊÇ',speakerData(index).name(1:end-4)];
sc=[sc,K,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% --- Executes on selection change in text2.
function text2_Callback(hObject, eventdata, handles)
% hObject handle to text2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns text2 contents as cell array
% contents{get(hObject,'Value')} returns selected item from text2
% --- Executes during object creation, after setting all properties.
function text2_CreateFcn(hObject, eventdata, handles)
% hObject handle to text2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
buttonoom=questdlg('È·¶¨ÒªÍ˵½ÏµÍ³Ö÷½çÃæÂð£¿','Í˳öϵͳÌáʾ','ÊÇ','·ñ','default');
A='ÊÇ';
B='·ñ';
C=buttonoom;
if strcmp(A,C)
close(yuyinshibie);
else strcmp(B,C);
end
% --- Executes on selection change in listbox2.
function listbox2_Callback(hObject, eventdata, handles)
% hObject handle to listbox2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns listbox2 contents as cell array
% contents{get(hObject,'Value')} returns selected item from listbox2
% --- Executes during object creation, after setting all properties.
function listbox2_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting all properties.
function text3_CreateFcn(hObject, eventdata, handles)
% hObject handle to text3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global sc
recObj=audiorecorder
pause(1)
K='¿ªÊ¼Â¼Òô...'
sc=[sc,K,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
recordblocking(recObj,6)
L='½áÊøÂ¼Òô...'
sc=[sc,L,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
myRecording=getaudiodata(recObj)
filepath=uigetdir %ÉèÖÃÎļþ´æ´¢Â·¾¶
filename=get(handles.edit1,'String') %ÉèÖÃÎļþ´æ´¢Ãû×Ö
yuyin=strcat(filepath,'\',filename,'.wav');
audiowrite(yuyin,myRecording,8000); %½«ÓïÒôÎļþ±£´æ
M=['±£´æÖÁ',num2str(yuyin),'ÖÐ...']
sc=[sc,M,10];
set(handles.listbox2,'string',num2str(sc),'fontsize',10,'fontname','KaiTi');
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting all properties.
function pushbutton2_CreateFcn(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
第5章 总结与展望
5.1 总结
通过这次毕业设计的制作与编写,我有了非常多的收获常言道,一个好的开始意味着成功的一半。在这次毕业设计的选题当中,我选择了一个自己非常感兴趣的题目,本课题研究的是基于Matlab的语音识别系统设计。在该次论文的编写上,我首先对语音识别技术做了一个基本的介绍,然后在分析语音信号的基础上,采用高斯混合模型(GMM)和MFCCC参数算法来保证语音特征识别的准确性。同时为了更直观的观测到语音识别的结果和实现算法的运行,利用MATLAB编写图形界面GUI。除此之外介绍了语音识别的各个功能模块,编写了一套基于MATLAB的语音识别程序,在编写程序中遇到了许多的困难,不断地查阅文献和请教老师同学。也介绍了程序的设计和运行。通过MATLAB强大的算法功能,能够非常准确地实现语音识别的检测。
5.2 展望
语音识别技术取得了引人瞩目的成绩,但还是有限制发展的因素,人类的语音功能是在复杂的社会环境中发展而来的,计算机要想实现与人类的语音功能还有一定的困难。语音识别易受说话人和环境噪声干扰的影响,但其安全高效、价格低廉、易于实现等优势足以吸引人们对其进行深刻研究。
随着计算机应用的飞速发展,语音识别在人类日常生活中有着广泛的应用,快捷、方便是人们越来越推崇的,也在移动互联网应用中扮演着越来越重要的角色,凸现出对社会科学技术的发展和人类生活的重要性。希望在不久的未来语音识别技术能有更大的突破,为人类带来更便捷的生活。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)