易圓皓
(西南交通大學(xué)(峨眉校區(qū))計(jì)算機(jī)與通信工程學(xué)院,四川 峨眉山 614200)
基于MatlabGUI語音識(shí)別推箱子的設(shè)計(jì)
易圓皓
(西南交通大學(xué)(峨眉校區(qū))計(jì)算機(jī)與通信工程學(xué)院,四川 峨眉山 614200)
Matlab,是國際上使用最為廣泛的科學(xué)與工程計(jì)算軟件工具。其具有強(qiáng)大、豐富的內(nèi)置函數(shù)和工具箱。在簡要介紹推箱子游戲核心算法的基礎(chǔ)上,給出一種基于Matlab GUI的能進(jìn)行實(shí)時(shí)語音識(shí)別的推箱子游戲設(shè)計(jì)與實(shí)現(xiàn)方法,目的是用更多的方式實(shí)現(xiàn)與計(jì)算機(jī)的交流,屬語音信號(hào)處理的范疇。主要解決的問題有語音的錄入、濾波、特征值提取、信號(hào)與模版的匹配等。語音錄入和端點(diǎn)檢測依賴于能量和過零率的檢測,可使采用的數(shù)據(jù)真正是語音信號(hào)數(shù)據(jù),從而減少數(shù)據(jù)量和運(yùn)算量并減少處理時(shí)間。后將語音信號(hào)的MFCC特征參數(shù)提取,再用DTW算法與數(shù)據(jù)庫中模版對比,可最大化提高識(shí)別效率。本文能成功識(shí)別語音輸入信號(hào),并在游戲中實(shí)時(shí)反饋。在非特定人聲識(shí)別時(shí),需建立的語音數(shù)據(jù)庫足夠大,才能有很高的識(shí)別率?;诒疚?,語音識(shí)別可與現(xiàn)實(shí)生活中更多的事物相結(jié)合,不局限于游戲。
M atlabGUI;游戲開發(fā);語音識(shí)別;端點(diǎn)檢測;MFCC;DTW
推箱子游戲是目前比較流行的游戲之一,很多操作系統(tǒng)或者流行軟件都會(huì)帶這種游戲。它既能鍛煉思維的嚴(yán)密性,又有很多樂趣。本設(shè)計(jì)將用MATLAB在實(shí)現(xiàn)一個(gè)簡單的推箱子游戲的基礎(chǔ)上語音識(shí)別控制推箱子游戲的實(shí)現(xiàn)方法。本文旨在研究其基本編程技巧,其中涉及軟中斷、三維維數(shù)組、鍵盤操作及圖形化函數(shù)等方面的知識(shí)。通過本文,開發(fā)者能基本掌握顯示器中斷寄存器的設(shè)置、三維維數(shù)組、鍵盤上鍵值的獲取、圖形方式下光標(biāo)的顯示和定位,以及部分圖形函數(shù)的使用。
將進(jìn)行初始化游戲屏幕和每個(gè)關(guān)卡,屏幕被初始化為8× 8個(gè)方塊。每個(gè)方塊為一圖塊,每個(gè)圖塊的大小為64×64像素圖片。利用imread函數(shù)將制作好的圖塊轉(zhuǎn)換為數(shù)組并存入變量中,把整個(gè)游戲區(qū)域看成一個(gè)二位數(shù)組。根據(jù)關(guān)卡,載入人物、箱子及需要推入目標(biāo)的坐標(biāo)及其數(shù)量。載入完成后,轉(zhuǎn)換成界面狀態(tài)數(shù)組。根據(jù)狀態(tài)數(shù)組畫到GUI界面。
k=imread('空白.png');q=imread('墻.png');ren=imread(人.png');x=imread('箱子.png');m=imread('目標(biāo).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所示。
按鍵處理必須包括移動(dòng)小人和移動(dòng)箱子,通過移動(dòng)上下左右鍵來控制小人的移動(dòng),從而推動(dòng)箱子,把箱子推到制定的目的地為過關(guān)。要實(shí)現(xiàn)界面8×8中的小人的移動(dòng),就必須對這些圖塊進(jìn)行移動(dòng)再重新畫圖。matlab中的imread函數(shù)將圖塊中的彩色RGB圖片利用三維數(shù)組存儲(chǔ),對應(yīng)為:R:1 G:2B:3如圖2所示。
圖1 游戲界面
圖2 三維圖層
為實(shí)現(xiàn)在8×8中的任意圖塊中畫圖,本文采取植入任一圖塊的三維數(shù)組來實(shí)現(xiàn),并計(jì)算好每個(gè)圖塊起始和終止的坐標(biāo),確保每個(gè)圖塊都能完整有序地被畫入。具體代碼如下:
按鍵處理必須包括移動(dòng)小人和移動(dòng)箱子,通過移動(dòng)上下左右鍵來控制小人的移動(dòng),從而推動(dòng)箱子,不能越過墻壁,把箱子推到制定的目的地為過關(guān)。由于在按鍵函數(shù)中,上下左右的觸發(fā)均會(huì)返回不同的數(shù)值,此處對應(yīng)分別為:上(30)、下(31)、左(28)、右(29)我們可以通過對返回?cái)?shù)值的檢測在滿足規(guī)則的條件下對小人和箱子圖塊所在的數(shù)組進(jìn)行移動(dòng),再重新繪圖,從而達(dá)到圖塊移動(dòng)的功能。
語音識(shí)別必須包括對聲音的門限判斷同時(shí)進(jìn)行錄音和處理,進(jìn)一步控制小人的移動(dòng),從而推動(dòng)箱子,把箱子推到制定的目的地為過關(guān)。在整個(gè)語音識(shí)別模塊前,提前錄制好5個(gè)不同類型的人的不同指令,計(jì)算出每個(gè)人的每個(gè)指令的MFCC特征向量,并儲(chǔ)存,即訓(xùn)練集。在整個(gè)語音識(shí)別模塊中,需要提示用戶在適當(dāng)?shù)臅r(shí)間錄入聲音,錄音時(shí)間為2秒,對于在錄音期間沒有聲音的情況,采取設(shè)置門限電壓來跳過語音處理階段,并返回重新錄入聲音。由于真正需要處理的聲音只占整個(gè)錄入聲音的一部分,為提高識(shí)別率和識(shí)別速度,需要將處理的聲音截取出來,利用MFCC算法計(jì)算出這段聲音的MFCC特征向量,再利用DTW算法計(jì)算出這段聲音的MFCC特征向量與訓(xùn)練集中每個(gè)元素的MFCC特征向量的匹配度。選取最優(yōu)的匹配結(jié)果并執(zhí)行操作[1]。語音模塊的操作流程如圖3所示。
圖3 語音識(shí)別過程
在語音錄入之前,為使用戶在適當(dāng)?shù)臅r(shí)間錄入聲音,通過右下角的狀態(tài)提示框,提示用戶錄入的時(shí)間。①準(zhǔn)備錄音②開始錄音③錄音結(jié)束④識(shí)別(⑤未檢測到聲音)。
用matlab自帶函數(shù)wavrecord選擇16 000 Hz的頻率對2秒鐘錄入的聲音進(jìn)行的采樣,保證采樣點(diǎn)遠(yuǎn)大于Nyquist頻率,提高識(shí)別的精準(zhǔn)度。
myRecording=wavrecord(2*fs,fs);
基于聲音的大小會(huì)直接影響最后myRecording中值的大小,我們利用二倍值減去均值的處理方式將myRecording中的數(shù)值縮小。
由于真正需要處理的聲音只占整個(gè)錄入聲音的一部分,為提高識(shí)別率和識(shí)別速度,需要將處理的聲音截取出來[2],過程如圖4所示。
圖4 語音截取
使用audiocut函數(shù)將錄入聲音的有效部分截取出來,可使識(shí)別的速度大大提高。實(shí)際情況中,可能遇到?jīng)]有說話,但噪聲仍然被記錄,然后被計(jì)算機(jī)處理,最終發(fā)出偽指令,為避免這種情況,我們進(jìn)一步對算法進(jìn)行優(yōu)化,可設(shè)置一個(gè)閾值來排除無聲的情況。
if mean(abs(myRecording))>0.095
人的聽覺系統(tǒng)是一個(gè)特殊的非線性系統(tǒng),它響應(yīng)不同頻率信號(hào)的靈敏度是不同的。在語音特征的提取上,人類聽覺系統(tǒng)做得非常好,它不僅能提取出語義信息,而且能提取出說話人的個(gè)人特征,這些都是現(xiàn)有的語音識(shí)別系統(tǒng)所望塵莫及的。如果在語音識(shí)別系統(tǒng)中能模擬人類聽覺感知處理特點(diǎn),就有可能提高語音的識(shí)別率。梅爾頻率倒譜系數(shù)(Mel Frequency Cepstrum Coefficient,MFCC)考慮到了人類的聽覺特征,先將線性頻譜映射到基于聽覺感知的Mel非線性頻譜中,然后轉(zhuǎn)換到倒譜上[3-4]。提取MFCC特征的過程:
1)先對語音進(jìn)行預(yù)加重、分幀和加窗;
2)對每一個(gè)短時(shí)分析窗,通過FFT得到對應(yīng)的頻譜;
3)將上面的頻譜通過Mel濾波器組得到Mel頻譜
4)在Mel頻譜上面進(jìn)行倒譜分析(取對數(shù),做逆變換,實(shí)際逆變換一般是通過DCT離散余弦變換來實(shí)現(xiàn),取DCT后的第2個(gè)到第13個(gè)系數(shù)作為MFCC系數(shù)),獲得Mel頻率倒譜系數(shù)MFCC,這個(gè)MFCC就是這幀語音的特征;具體流程圖如圖5所示。
圖5 MFCC特征向量提取流程
將mfcc特征向量存入rMatrix1中,再將其歸一化,得到最終mfcc特征向量并存入rMatrix數(shù)組中:
rMatrix1=mfcc(ncoeff,myRecording,fs);rMatrix=CMN(rMatrix1);DTW(Dynamic Time Warping)對MFCC特征向量與訓(xùn)練集匹配的過程:
為匹配之前錄制好的5種不同類型的訓(xùn)練集的MFCC特征向量,我們采用DTW算法進(jìn)行匹配,它能夠解決在歐式距離的聚類方法中的發(fā)音長短不一的模板匹配問題。DTW通過把時(shí)間序列進(jìn)行延伸和縮短,來計(jì)算兩個(gè)時(shí)間序列性之間的相似性:如下圖所示,上下兩條實(shí)線代表兩個(gè)時(shí)間序列,時(shí)間序列之間的虛線代表兩個(gè)時(shí)間序列之間的相似的點(diǎn)。DTW使用所有這些相似點(diǎn)之間的距離的和,稱之為歸整路徑距離(Warp Path Distance)來衡量兩個(gè)時(shí)間序列之間的相似性。DTW算法的訓(xùn)練中幾乎不需要額外的計(jì)算。所以在孤立詞語音識(shí)別中,DTW算法仍然得到廣泛的應(yīng)用[5]。
利用DTW算法與訓(xùn)練集中的每個(gè)元素的MFCC特征向量進(jìn)行匹配,得到每個(gè)元素中每個(gè)指令對錄入聲音的歸整路徑距離,即匹配度(數(shù)值越小,匹配度越高)[6-7]。錄入一段聲音并進(jìn)行測試,將錄入語音的MFCC特征向量與訓(xùn)練集中的元素的特征向量分別匹配測試結(jié)果如下表所示。
表1 訓(xùn)練集匹配測試結(jié)果
所得的最小歸整路徑距離及其對應(yīng)指令如下表所示:
表2 訓(xùn)練集最優(yōu)測試結(jié)果
取對應(yīng)指令出現(xiàn)最多的指令,若有若干個(gè)指令出現(xiàn)次數(shù)最多且相同,則取相加歸整路徑距離和最小的指令,如上取指令:上。本文只取5個(gè)元素作為訓(xùn)練集,當(dāng)訓(xùn)練集元素更多,識(shí)別度更高。
該語音識(shí)別推箱子游戲在 Matlab R2013b和 windows 7,8操作系統(tǒng)上成功實(shí)現(xiàn),能夠?qū)崿F(xiàn)人物的移動(dòng),并且語音識(shí)別的能力非常好,界面美觀,各項(xiàng)功能達(dá)到所需的要求,實(shí)現(xiàn)該語音識(shí)別控制對于其他基于Matkab的游戲和對語音的處理起到拋磚引玉的作用,三維數(shù)組畫圖模塊、語音剪切、MFCC算法與DTW算法結(jié)合進(jìn)行語音識(shí)別的實(shí)現(xiàn)可用于其他Matlab的編程,同時(shí)對各專業(yè)人員借助Matlab語言快速開發(fā)并具備各種強(qiáng)大功能的專業(yè)應(yīng)用軟件具有重要的意義。
[1]楊行峻,遲惠生.語音信號(hào)數(shù)字處理[M].北京:電子工業(yè)出版社,1998.
[2]朗朗;王靜;基于基音頻能值的端點(diǎn)檢測算法[J].安徽工程科技學(xué)院學(xué)報(bào):自然科學(xué)版,2008(3):1-3.
[3]找一片天空散步.語音特征參數(shù)MFCC提取過程詳解[EB/ OL][2014-01-15].http://my.oschina.net/jamesju/blog/193343.
[4]王偉,鄧輝文.基于MFCC參數(shù)和VQ的說話人識(shí)別系統(tǒng)[J].儀器儀表學(xué)報(bào),2006(S3):2253-2255.
[5]安鎮(zhèn)宙,楊鑒,王紅,余映中,等.一種新的基于并行分段裁剪的DTW算法[J].計(jì)算機(jī)工程與應(yīng)用,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 稿件編號(hào):201509073
易圓皓(1994—),男,四川成都人。研究方向:信號(hào)與信息處理、計(jì)算機(jī)通信。