基于MatlabGUI语音识别推箱子的设计
2016-11-22易圆皓
易圆皓
(西南交通大学(峨眉校区)计算机与通信工程学院,四川 峨眉山 614200)
基于MatlabGUI语音识别推箱子的设计
易圆皓
(西南交通大学(峨眉校区)计算机与通信工程学院,四川 峨眉山 614200)
Matlab,是国际上使用最为广泛的科学与工程计算软件工具。其具有强大、丰富的内置函数和工具箱。在简要介绍推箱子游戏核心算法的基础上,给出一种基于Matlab GUI的能进行实时语音识别的推箱子游戏设计与实现方法,目的是用更多的方式实现与计算机的交流,属语音信号处理的范畴。主要解决的问题有语音的录入、滤波、特征值提取、信号与模版的匹配等。语音录入和端点检测依赖于能量和过零率的检测,可使采用的数据真正是语音信号数据,从而减少数据量和运算量并减少处理时间。后将语音信号的MFCC特征参数提取,再用DTW算法与数据库中模版对比,可最大化提高识别效率。本文能成功识别语音输入信号,并在游戏中实时反馈。在非特定人声识别时,需建立的语音数据库足够大,才能有很高的识别率。基于本文,语音识别可与现实生活中更多的事物相结合,不局限于游戏。
M atlabGUI;游戏开发;语音识别;端点检测;MFCC;DTW
推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带这种游戏。它既能锻炼思维的严密性,又有很多乐趣。本设计将用MATLAB在实现一个简单的推箱子游戏的基础上语音识别控制推箱子游戏的实现方法。本文旨在研究其基本编程技巧,其中涉及软中断、三维维数组、键盘操作及图形化函数等方面的知识。通过本文,开发者能基本掌握显示器中断寄存器的设置、三维维数组、键盘上键值的获取、图形方式下光标的显示和定位,以及部分图形函数的使用。
1 初始化模块
将进行初始化游戏屏幕和每个关卡,屏幕被初始化为8× 8个方块。每个方块为一图块,每个图块的大小为64×64像素图片。利用imread函数将制作好的图块转换为数组并存入变量中,把整个游戏区域看成一个二位数组。根据关卡,载入人物、箱子及需要推入目标的坐标及其数量。载入完成后,转换成界面状态数组。根据状态数组画到GUI界面。
k=imread('空白.png');q=imread('墙.png');ren=imread(人.png');x=imread('箱子.png');m=imread('目标.png');map=zeros(8,8);kcharacter=0;renzb=[5,5];mbn=4;qiangn= 28;boxzb =[4,4;5,4;4,6;6,5];mbzb =[2,4;5,2;4,7;7,5];qiangzb=[1,3;1,4;1,5;2,5;3,5;3,6;3,7;3,8;4,8;5,8;5,7;5,6;6,6;7,6;8,6;8,5;8,4;7,4;6,4;6,3;6,2;6,1;5,1;4,1;4,2;4,3;3,3;2,3];界面初始化如图1所示。
2 画图模块
按键处理必须包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,把箱子推到制定的目的地为过关。要实现界面8×8中的小人的移动,就必须对这些图块进行移动再重新画图。matlab中的imread函数将图块中的彩色RGB图片利用三维数组存储,对应为:R:1 G:2B:3如图2所示。
图1 游戏界面
图2 三维图层
为实现在8×8中的任意图块中画图,本文采取植入任一图块的三维数组来实现,并计算好每个图块起始和终止的坐标,确保每个图块都能完整有序地被画入。具体代码如下:
3 对按键处理及游戏规则的实现
按键处理必须包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,不能越过墙壁,把箱子推到制定的目的地为过关。由于在按键函数中,上下左右的触发均会返回不同的数值,此处对应分别为:上(30)、下(31)、左(28)、右(29)我们可以通过对返回数值的检测在满足规则的条件下对小人和箱子图块所在的数组进行移动,再重新绘图,从而达到图块移动的功能。
4 语音识别模块
语音识别必须包括对声音的门限判断同时进行录音和处理,进一步控制小人的移动,从而推动箱子,把箱子推到制定的目的地为过关。在整个语音识别模块前,提前录制好5个不同类型的人的不同指令,计算出每个人的每个指令的MFCC特征向量,并储存,即训练集。在整个语音识别模块中,需要提示用户在适当的时间录入声音,录音时间为2秒,对于在录音期间没有声音的情况,采取设置门限电压来跳过语音处理阶段,并返回重新录入声音。由于真正需要处理的声音只占整个录入声音的一部分,为提高识别率和识别速度,需要将处理的声音截取出来,利用MFCC算法计算出这段声音的MFCC特征向量,再利用DTW算法计算出这段声音的MFCC特征向量与训练集中每个元素的MFCC特征向量的匹配度。选取最优的匹配结果并执行操作[1]。语音模块的操作流程如图3所示。
图3 语音识别过程
在语音录入之前,为使用户在适当的时间录入声音,通过右下角的状态提示框,提示用户录入的时间。①准备录音②开始录音③录音结束④识别(⑤未检测到声音)。
用matlab自带函数wavrecord选择16 000 Hz的频率对2秒钟录入的声音进行的采样,保证采样点远大于Nyquist频率,提高识别的精准度。
myRecording=wavrecord(2*fs,fs);
基于声音的大小会直接影响最后myRecording中值的大小,我们利用二倍值减去均值的处理方式将myRecording中的数值缩小。
由于真正需要处理的声音只占整个录入声音的一部分,为提高识别率和识别速度,需要将处理的声音截取出来[2],过程如图4所示。
图4 语音截取
使用audiocut函数将录入声音的有效部分截取出来,可使识别的速度大大提高。实际情况中,可能遇到没有说话,但噪声仍然被记录,然后被计算机处理,最终发出伪指令,为避免这种情况,我们进一步对算法进行优化,可设置一个阈值来排除无声的情况。
if mean(abs(myRecording))>0.095
人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的。在语音特征的提取上,人类听觉系统做得非常好,它不仅能提取出语义信息,而且能提取出说话人的个人特征,这些都是现有的语音识别系统所望尘莫及的。如果在语音识别系统中能模拟人类听觉感知处理特点,就有可能提高语音的识别率。梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient,MFCC)考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱中,然后转换到倒谱上[3-4]。提取MFCC特征的过程:
1)先对语音进行预加重、分帧和加窗;
2)对每一个短时分析窗,通过FFT得到对应的频谱;
3)将上面的频谱通过Mel滤波器组得到Mel频谱
4)在Mel频谱上面进行倒谱分析(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来实现,取DCT后的第2个到第13个系数作为MFCC系数),获得Mel频率倒谱系数MFCC,这个MFCC就是这帧语音的特征;具体流程图如图5所示。
图5 MFCC特征向量提取流程
将mfcc特征向量存入rMatrix1中,再将其归一化,得到最终mfcc特征向量并存入rMatrix数组中:
rMatrix1=mfcc(ncoeff,myRecording,fs);rMatrix=CMN(rMatrix1);DTW(Dynamic Time Warping)对MFCC特征向量与训练集匹配的过程:
为匹配之前录制好的5种不同类型的训练集的MFCC特征向量,我们采用DTW算法进行匹配,它能够解决在欧式距离的聚类方法中的发音长短不一的模板匹配问题。DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性:如下图所示,上下两条实线代表两个时间序列,时间序列之间的虚线代表两个时间序列之间的相似的点。DTW使用所有这些相似点之间的距离的和,称之为归整路径距离(Warp Path Distance)来衡量两个时间序列之间的相似性。DTW算法的训练中几乎不需要额外的计算。所以在孤立词语音识别中,DTW算法仍然得到广泛的应用[5]。
利用DTW算法与训练集中的每个元素的MFCC特征向量进行匹配,得到每个元素中每个指令对录入声音的归整路径距离,即匹配度(数值越小,匹配度越高)[6-7]。录入一段声音并进行测试,将录入语音的MFCC特征向量与训练集中的元素的特征向量分别匹配测试结果如下表所示。
表1 训练集匹配测试结果
所得的最小归整路径距离及其对应指令如下表所示:
表2 训练集最优测试结果
取对应指令出现最多的指令,若有若干个指令出现次数最多且相同,则取相加归整路径距离和最小的指令,如上取指令:上。本文只取5个元素作为训练集,当训练集元素更多,识别度更高。
5 结论
该语音识别推箱子游戏在 Matlab R2013b和 windows 7,8操作系统上成功实现,能够实现人物的移动,并且语音识别的能力非常好,界面美观,各项功能达到所需的要求,实现该语音识别控制对于其他基于Matkab的游戏和对语音的处理起到抛砖引玉的作用,三维数组画图模块、语音剪切、MFCC算法与DTW算法结合进行语音识别的实现可用于其他Matlab的编程,同时对各专业人员借助Matlab语言快速开发并具备各种强大功能的专业应用软件具有重要的意义。
[1]杨行峻,迟惠生.语音信号数字处理[M].北京:电子工业出版社,1998.
[2]朗朗;王静;基于基音频能值的端点检测算法[J].安徽工程科技学院学报:自然科学版,2008(3):1-3.
[3]找一片天空散步.语音特征参数MFCC提取过程详解[EB/ OL][2014-01-15].http://my.oschina.net/jamesju/blog/193343.
[4]王伟,邓辉文.基于MFCC参数和VQ的说话人识别系统[J].仪器仪表学报,2006(S3):2253-2255.
[5]安镇宙,杨鉴,王红,余映中,等.一种新的基于并行分段裁剪的DTW算法[J].计算机工程与应用,2007(15):1-2.
[6]IEEE Internal Conf.S.Das,R.Bakis,A.Nadas,M.Pichney.Influence ofbackground noise andmicrophone on the performance ofthe mM TANGORA speech recognition system.Proc [R].Acoust Speech Signal Procing,1993.
[7]suo110;MATLAB中文论坛 [EB/OL].[2009-02-01]http:// www.ilovematlab.cn/thread-22231-1-1.html.
Design a game of speech recognition sokoban based on MatlabGUI
YI Yuan-hao
(College of computer and Communication Engineering,Southwest Jiaotong University-E’mei Campus,Emeishan 614200,China)
Based on the brief introduction of the core algorithm of the game,the paper presents a new method for the design and implementation of a real time speech recognition based on Matlab GUI.The purpose is to realize the communication between the computer and the computer in more ways.The main problem of the problem of speech input,filtering,feature extraction,signal and template matching,etc..Speech input and endpoint detection rely on energy and zero crossing rate detection,can make use of data is real voice signal data,thereby reducing the amount of data and computing and reduce processing time.After the MFCC feature extraction of speech signal,and then DTW algorithm and the database template comparison,can maximize the efficiency of recognition.
MatlabGUI;game developing;speech recognition;point detection;MFCC;DTW
TN911
A
1674-6236(2016)15-0060-04
2015-09-09 稿件编号:201509073
易圆皓(1994—),男,四川成都人。研究方向:信号与信息处理、计算机通信。