图6.2 GUI打开方式
(1)组件面板
在GUI界面中放置组件,首先单击工具栏中的按钮,光标变成十字形后使用十字形光标的中心点来确定组件左上角的位置,或者通过在界面区域内单击并拖动鼠标来确定组件的大小。如图6.3给出的一个添加组件的示例。
GUI组件布置完成后,可以使用菜单栏中最后一个三角形按钮或Tools菜单中的ActivateFigure选项来观察GUIDE的设计结果。这时会自动生成一个FIG文件和一个M文件,FIG文件会提示保存路径。双击界面区域内的按钮就会弹出属性窗口,可以修改自己需要的属性。
图6.3 添加组件示例
26
(2)编程回调函数
布置完GUI组件后,接下来最重要的一步就是编程每个按钮的回调函数,实现自己需要的功能,其编程过程为:
① 右键单击按钮,待弹出选择窗口时,选择最后一项即views callbacks;
② 鼠标放在views callbacks后就会弹出子选择窗口,根据自己的按钮属性选择相应的函数回调;
③选择完函数后,则会自动跳到M文件中该按钮所对应的回调函数,在该段函数中,可以编写自己需要实现该按钮的功能的代码。
待所有按钮的功能的回调函数都编写完毕后,点击保存,然后点击菜单栏中的三角形按钮,则会弹出用户开发界面,在该用户开发界面中,用户可以单击按钮以实现该按钮所拥有的功能。如图6.4所示。 6.3 作品演示
在MATLAB R2011B的命令窗口中输入guide后,选择自己弄好的GUI的路径,打开GUI。然后单击菜单栏中的三角形按钮则弹出如图6.4的用户开发界面。
在本次设计中,从运行界面可以看出,参考模块及测试模块均有相同的功能,即录音、暂停、播放、保存及读取。
用户可以通过麦克风在点击录音后,录制孤立词,带录制完毕,可以点击播放进行回放自己所录制好的语音,通过保存(uiputfile函数),用户就可以录制自己所需要的语音个数。通过读取(uigetfile函数),用户可以打开语音所在的文件并读取到axes中。
图6.4 运行界面
27
点击语音识别后,则会自动开始进行对之前录制好的参考模板库与测试模板库的语音之间的匹配。如图6.5所示,并将所得到的结果在MATLAB命令窗口显示出来,可以看到,识别率可以达到80%以上,对端点检测算法进行微修改,识别率可以达到90%以上。
图6.5 运行结果
7 结论
通过本次设计,了解了语音识别的历史及在语音识别过程中每个算法的原理。本设
计中,通过MATLAB软件进行语音录制、播放、保存及打开到语音信号预处理,进行信号的端点检测vad,提取特征参数MFCC,分别建立一个参考库及一个测试库。然后通过DTW算法进行匹配,计算矩阵距离dist,最终将结果在MATLAB命令窗口显示出来。在本次设计中,遇到很多难题。比如:语音信号的保存及打开函数;端点检测算法的运行等等,不过通过论坛上网友的解答及图书馆的书籍。均解决了这些问题。
通过本次设计,也存在着不少需要改进的地方,比如:用户交互界面不够完善,功能比较单一;算法不够精确,有待进行算法改进;本设计只局限于孤立词识别-DTW算法,而不能进行少量词汇量的语音识别;DTW算法只针对于特定人语音识别,可以用HMM算法更换DTW算法,因为HMM算法可以用于非特定人语音识别方面。
28
参 考 文 献
何强,何英.MATLAB扩展编程[M].北京:清华大学出版社,2002.
胡金平,陈若珠,李战明.基于语音识别中DTW改进算法的研究.兰州:TP391.42 雷学堂,徐火希.基于MATLAB的语音滤波实验设计:实验技术与管理,1002-4956(2007)
04-0038-04,第24卷,第4期,2007年4月
刘保柱,苏彦华,张宏林.MATLAB 7.0从入门到精通(修订版).北京:人民邮电出版
社,2010.5
实验一语音信号端点检测最终报告:
http://wenku.http://www.wodefanwen.com//view/f301e6d13186bceb19e8bbc9.html 实验三语音信号的特征提取最终实验报告:
http://wenku.http://www.wodefanwen.com//view/7bff350516fc700abb68fcc8.html
王嘉梅.基于MATLAB的数字信号处理与时间开发.西安:西安电子科技大学出版社,
2007.12
王倩,吴国平,陈琳.特定人语音识别算法-DTW算法:武汉 TP312 熊伟,罗云贵.语音识别的MFCC 算法研究.武汉:2010年第三期
杨熙,苏娟,赵鹏.MATLAB环境下的语音识别系统:语音技术,1002-8684(2007)
02-0051-03,TN912
张雪英.数字语音处理及MATLAB仿真.北京:电子工业出版社,2010.7
张震,王化清.语音信号特征提取中Mel倒谱系MFCC的改进算法.郑州:计算机工程与
应用,1002-8331(2008)22-0054-02,2008,44(22)
朱旻昊,张忠能.DTW算法的研究和改进:TP311,2010年底26卷第9期
29
附 录
附录A 语音识别主函数
function varargout = bishe(varargin) % BISHE MATLAB code for bishe.fig
% BISHE, by itself, creates a new BISHE or raises the existing % singleton*.
% H = BISHE returns the handle to a new BISHE or the handle to % the existing singleton*.
% BISHE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in BISHE.M with the given input arguments. % BISHE('Property','Value',...) creates a new BISHE or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before bishe_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application % stop. All inputs are passed to bishe_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose \ % instance to run (singleton)\
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help bishe % Last Modified by GUIDE v2.5 14-Apr-2013 11:52:05 % Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @bishe_OpeningFcn, ... 'gui_OutputFcn', @bishe_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 bishe is made visible.
function bishe_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
30