劉鵬輝,房建東
(內(nèi)蒙古工業(yè)大學(xué)內(nèi)蒙古呼和浩特010080)
近年來,語音識別理論研究飛速發(fā)展,其相應(yīng)的現(xiàn)實(shí)應(yīng)用大大提高了人們的工作效率和生活質(zhì)量[1]。語音技術(shù)的廣泛應(yīng)用是移動互聯(lián)網(wǎng)條件下各種平臺的核心應(yīng)用,在微信公開平臺催生的語音生態(tài)圈情況下,抓住這一機(jī)遇,以用戶需求為導(dǎo)向,將語音應(yīng)用在更加廣闊的應(yīng)用中,催生更多更好的應(yīng)用場景。語音模式識別分為兩種情況,一種是實(shí)時語義轉(zhuǎn)化為文字,另一種是將語音命令識別出來,去執(zhí)行指令內(nèi)容,控制關(guān)聯(lián)載體。本文以語音感知識別為理論基礎(chǔ),通過與模式識別相結(jié)合的方式將其應(yīng)用到家居照明系統(tǒng)控制領(lǐng)域,實(shí)現(xiàn)對特定語音信號自動識別,并且自動關(guān)聯(lián)照明模擬圖像效果,通過仿真實(shí)驗論證了方法的可靠性及正確性。
語音識別算法有很多種,DTW是一種小詞匯量,孤立詞語音識別的相對成熟,它是把時間規(guī)整和間距量計算連接在一起的非線性動態(tài)規(guī)劃算法,相對比較簡單而且有效[2]。本文以語音感知識別為基礎(chǔ),通過與模式識別相結(jié)合的方式將其應(yīng)用到家居照明的模擬控制領(lǐng)域,實(shí)現(xiàn)對語音信號進(jìn)行識別并自動控制照明系統(tǒng),具有一定的使用價值。
Matlab GUI界面的設(shè)計方法有兩種,一是直接編寫.m文件來開發(fā)整個GUI;二是通過Matlab圖形用戶界面開發(fā)環(huán)境duide命令來形成相應(yīng)文件。guide為用戶提供了一個方便高效的集成環(huán)境,使用guide創(chuàng)建GUI時,可以將設(shè)計好的GUI界面保存為一個fig資源文件,同時自動生成對應(yīng)的.m文件。該.m文件包含了GUI的初始化代碼和組建界面布局的控制代碼。由于這種方法比較直觀,且在.m文件的管理和程序代碼的修改上也比較方便[3],因此本文采用第二種方式完成界面設(shè)計。
本文以Matlab2014a作為實(shí)驗環(huán)境,設(shè)計圖形用戶界面GUI,可以實(shí)現(xiàn)語音信號的讀取、MFCC特征參數(shù)的提取、音頻文件的播放、模擬照明等通用功能,界面美觀,易于拓展,可以作為語音感知的照明控制系統(tǒng)的初始工具。
GUI設(shè)計模塊分為信號顯示模塊、操作流程控制面板模塊、識別結(jié)果輸出模塊、模擬燈光展示平臺模塊、退出模塊等,用于實(shí)現(xiàn)對語音信號的顯示、處理、識別、操作及說明等功能。這些操作分別通過文件、錯誤提醒的方式進(jìn)行顯示,同時給出下一步該操作的提醒。通過對語音庫及特征參數(shù)的提取來建立已知知識庫(也稱為參考模板),通過選擇音頻文件和播放音頻文件來控制音頻信號的獲?。煌ㄟ^文本輸出和模擬燈光顯示以及播放音頻文件的操作來執(zhí)行模式匹配,進(jìn)而驗證其識別的準(zhǔn)確性。
基于以上功能,設(shè)計Matlab GUI軟件界面架構(gòu)圖如圖1所示。
圖1 軟件界面設(shè)計架構(gòu)圖
語音識別就是讓機(jī)器通過識別和理解過程把語音信號轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的高技術(shù),也就是讓機(jī)器聽懂人類的語音[4]。語音識別的原理框圖如圖2所示。
圖2 語音識別原理框圖
將提取的語音特征序列經(jīng)過特定訓(xùn)練產(chǎn)生語音參考模板,形成供識別的參考模型庫;語音識別包括對聲音的起始點(diǎn)、結(jié)束點(diǎn)判斷和處理,對一些控制命令語義的理解。在整個系統(tǒng)開發(fā)中,語音識別是最關(guān)鍵的,需要建立模板庫。語音庫的建立是在實(shí)驗室安靜環(huán)境下,分別請2名同學(xué)在一定時間內(nèi)錄制‘離家模式'、‘睡覺模式'、‘開客廳燈'、‘開臥室燈'、‘關(guān)客廳燈'、‘關(guān)臥室燈'6種語音。目前每種語音進(jìn)行6次錄制,其中5次用來訓(xùn)練,1次用來測試,即構(gòu)成了60條的語音信號的語音庫,由于可用的語音信息只占整個語音信號的一部分,所以需要對60條語音遍歷進(jìn)行預(yù)處理、MFCC特征提取、訓(xùn)練,從而構(gòu)成語音庫。這樣可以提高識別率和識別速率。
由于原始語音信號一般不能滿足實(shí)際需要,處理起來很復(fù)雜或者根本無法處理,所以在進(jìn)行語音識別之前都要對原始語音信號進(jìn)行預(yù)處理[5]。預(yù)處理是通過一些環(huán)節(jié)得到有用的語音信號,例如預(yù)加重、加窗分幀、端點(diǎn)檢測等;
1)預(yù)加重:預(yù)加重是通過提升語音的高頻部分,將其進(jìn)行加重,增加語音高頻分辨率。具體是將語音信號通過一階濾波器實(shí)現(xiàn),本文采用傳遞函數(shù)為H(z)=1-0.975z-1的一階FIR高通數(shù)字濾波器來實(shí)現(xiàn)預(yù)加重。
2)加窗分幀:語音信號可認(rèn)為是短時平穩(wěn)的,所以需要將其作分幀處理。本文采取漢明窗對語音信號進(jìn)行分幀。
3)端點(diǎn)檢測:端點(diǎn)檢測就是找到語音信號的起點(diǎn)與終點(diǎn),減少真實(shí)數(shù)據(jù)的處理量,縮短處理時間,提高識別效率。本文采用基于特征的雙門限檢測法,即利用語音信號的短時能量與短時過零率聯(lián)合檢測。在Matlab中對語音“離家模式”端點(diǎn)檢測進(jìn)行繪制[6],結(jié)果如圖3所示。
圖3 截取真正的語音信號
特征提取是從有用的語音信號中提取出隨時間變化的特征序列來表征語音信號。本文選擇Mel頻率倒譜系數(shù)(MFCC)作為其特征參數(shù)進(jìn)行訓(xùn)練與識別。因為MFCC參數(shù)比較充分的利用人耳這種特殊的感知特性提取語音信號的特征參數(shù),并且有較高的識別率[7]。
Mel頻率倒譜系數(shù)(MFCC)考慮到了人類的聽覺特征,先將線性頻譜映射到基于聽覺感知的Mel非線性頻譜上,然后再轉(zhuǎn)換到倒譜上[8]。提取MFCC的過程[8]:
1)對原始語音信號進(jìn)行預(yù)加重、分幀、加窗;
2)對每一幀短時信號,通過FFT變換得到對應(yīng)的頻譜;
3)對每一幀的頻譜分別通過24階Mel濾波器組得到Mel頻譜;
4)計算每個濾波器組輸出的對數(shù)能量;
5)對Mel頻譜進(jìn)行倒譜計算,具體是:取對數(shù),做逆變換,一般是通過DCT離散余弦變換,取DCT后的第二個到第13個系數(shù)作為MFCC,獲得特征系數(shù)MFCC。具體流程圖如圖4所示。
圖4 MFCC特征向量提取流程
MFCC模仿了人耳特殊的非線性感知特性參數(shù),它與線性頻率的轉(zhuǎn)換關(guān)系為[9]:
本文采用的是12階標(biāo)準(zhǔn)MFCC參數(shù)作為特征參數(shù)。
在構(gòu)建完成語音庫后,對每一個語音提取MFCC特征參數(shù),然后進(jìn)行訓(xùn)練,訓(xùn)練過程中,將MFCC特征向量存入S.mat中,方便進(jìn)行匹配。
語音識別過程實(shí)際上是一個模式匹配的過程。模式匹配是指在識別時將未知的語音特征序列同參考模板庫進(jìn)行匹配和比較,計算出它們之間的匹配程度,具體算法見章節(jié)3。
軟件算法主要采用動態(tài)時間規(guī)整DTW算法,實(shí)現(xiàn)的功能有原始語音數(shù)據(jù)的提取、預(yù)處理、特征參數(shù)提取、訓(xùn)練以及語音識別,軟件算法設(shè)計架構(gòu)圖如圖5所示。
圖5 軟件算法設(shè)計架構(gòu)圖
為匹配之前錄制好的60條種訓(xùn)練集的MFCC特征向量,我們采用DTW算法進(jìn)行匹配,DTW是基于動態(tài)規(guī)劃(DP)的算法來實(shí)現(xiàn)的,成功解決了發(fā)音長短不一的問題[10-11]。DTW使用所有這些相似點(diǎn)之間的距離的和,稱之為歸整路徑距離來衡量兩個時間序列之間的相似性,DTW算法的訓(xùn)練中幾乎不需要額外的計算[12]。DTW算法要求參考模板與測試模板采用相同類型的特征向量、相同的幀長、相同的窗函數(shù)和相同的幀移[13]。
為了將兩條語音序列匹配,需要計算兩條語音序列中各幀的匹配程度[14]。參考模板表示為{R(1),R(m),…,R(M)} ,測試模板表示為T(1),T(n),…,{T(N)}(n,m表示語音幀的時序標(biāo)號,n=m=1表示起始語音幀,n=N,m=M表示終止語音幀),參考模板與測試模板均為提取的MFCC特征參數(shù)。為了比較它們的相似情況,計算它們之間的歐氏距離,即d[(T,R)],距離越小代表二者相似度越高。
為了得到最小匹配路徑,通常采用動態(tài)規(guī)劃方法[15]。在傳統(tǒng)的DTW算法中,需將測試模板中的每一幀與參考模板中的每一幀作相似度比較[16]。這有一定的局限性,需要對其加以限制,將其路徑范圍彎折率的變化區(qū)間設(shè)定在[0.5,2]。
即如果路徑已經(jīng)通過了格點(diǎn)(ni,mi),那么下一個通過的格點(diǎn)(ni+1,mi+1)可能是下列3種情況:
即搜索路徑的方法如下:搜索從(ni,mi)點(diǎn)出發(fā)到(N,M)結(jié)束,可以展開若干條滿足公式(2)的路徑,假設(shè)可計算每條路徑達(dá)到(N,M)點(diǎn)時的總的累積距離,具有最小累積距離者即為最佳路徑。最佳路徑對應(yīng)的模板記為識別結(jié)果。累計距離計算公式為:
經(jīng)過對路徑進(jìn)行約束后,匹配范圍進(jìn)行了縮小,減少了一些不必要的計算量,提高了識別效率與縮短了識別時間。
本文基于2名同學(xué)、6種不同語義內(nèi)容作了識別實(shí)驗。在語音庫的建立一節(jié)中已經(jīng)表明:實(shí)驗所需樣本共72個,其中60個為參考模板存入模板庫,12個樣本作為測試用。實(shí)驗結(jié)果顯示可以正確識別語音信號,并且有正確的關(guān)聯(lián)輸出。
對于不同的語音信號可以控制不同的模擬燈光狀態(tài),可以通過點(diǎn)擊輸出識別結(jié)果命令按鈕可以獲取識別結(jié)果,并執(zhí)行指定的控制模擬操作。
本文使用的模擬燈光具體操作表現(xiàn)為:睡覺模式時,客廳燈、臥室燈都成紅色;離家模式時,客廳燈、臥室都成黑色;開客廳燈,表現(xiàn)為藍(lán)色;關(guān)客廳燈,表現(xiàn)為白色;開臥室燈,表現(xiàn)為綠色;關(guān)臥室燈,表現(xiàn)為黃色。語音識別完成后,需要對模擬燈光進(jìn)行關(guān)聯(lián)輸出,通過對語音信號類別進(jìn)行對應(yīng)來得到相應(yīng)的已知語義,進(jìn)而對應(yīng)相應(yīng)的模擬燈。
在打開該程序所在的Matlab程序后,打開EmotionRec.m文件,在此.m文件下點(diǎn)擊運(yùn)行,會出現(xiàn)如圖1顯示的界面。然后就可以在這個界面上完成所有用戶想要完成的動作了。首先訓(xùn)練庫文件,點(diǎn)擊載入語音庫按鈕后,選擇語音庫所在的文件路徑;點(diǎn)擊訓(xùn)練語音按鈕,系統(tǒng)將會遍歷庫中所有的.wav文件,并從每一個語音的起始到結(jié)束提取特征向量,訓(xùn)練完成后構(gòu)建成語音庫;用戶可以點(diǎn)擊待測音頻文件選擇需要識別的語音文件,點(diǎn)擊完成后,界面中會出現(xiàn)對應(yīng)的音頻原始信號圖;點(diǎn)擊識別結(jié)果,模擬燈光會執(zhí)行相應(yīng)的動作,同時輸出文本框顯示識別出來的對應(yīng)文字。點(diǎn)擊播放音頻文件,會播放對應(yīng)的音頻。點(diǎn)擊退出系統(tǒng)做出判斷后會關(guān)閉界面。
圖6與圖7是訓(xùn)練過程界面顯示圖與識別完成結(jié)果顯示圖。
圖6 訓(xùn)練過程界面顯示圖
圖7 識別完成結(jié)果顯示圖
本文主要介紹了處理語音信號的前期步驟,并且利用MatlabGUI開發(fā)平臺,設(shè)計開發(fā)了語音識別控制照明系統(tǒng)一體化平臺,實(shí)現(xiàn)了語音識別的集成化、可視化、交互式的功能,同時實(shí)現(xiàn)了DTW算法的改進(jìn)。目前平臺上已經(jīng)集成了Matlab語音處理工具包中的部分算法以及模擬燈光顯示,結(jié)果可以直觀地幫助用戶方便快捷的實(shí)現(xiàn)語音識別的操作,同時使用文字輸出、模擬燈光的輸出、語音播放待識別語音的方法高效地判斷語音識別的正確性。