1 語音識別的原理
語音識別的基本原理框圖如圖1所示。語音信號中含有豐富的信息,從中提取對語音識別有用的信息的過程,就是特征提取,特征提取方法是整個語音識別系統(tǒng)的基礎(chǔ)。語音識別的過程可以被看作足模式匹配的過程,模式匹配是指根據(jù)一定的準則,使未知模式與模型庫中的某一模型獲得匹配。
語音識別中對特征參數(shù)的要求是:
(1) 能夠有效地代表語音特征;
(2) 各階參數(shù)之間有良好的獨立性;
(3) 特征參數(shù)要計算方便,保證識別的實時實現(xiàn)。
系統(tǒng)使用目前為常用的MFCC(Mel FrequencyCepstral Coefficient,美爾頻率倒譜系數(shù))參數(shù)。
求取MFCC的主要步驟是:
(1) 給每一幀語音加窗做FFT,取出幅度;
(2) 將幅度和濾波器組中每一個三角濾波器進行Binning運算;
(3) 求log,換算成對數(shù)率;
(4) 從對數(shù)率的濾波器組幅度,使用DCT變換求出MFCC系數(shù)。
1.2 DTW
語音識別中的模式匹配和模型訓練技術(shù)主要有DTW(Dynamic Time Warping,動態(tài)時間彎折)、HMM(HideMarkov Model,隱馬爾科夫模型)和ANN(Artificial Neu-ral Network,人工神經(jīng)元網(wǎng)絡(luò))。
DTW是一種簡單有效的方法。該算法基于動態(tài)規(guī)劃的思想,解決了發(fā)音長短不一的模板匹配問題,是語音識別中出現(xiàn)較早、較為經(jīng)典的一種算法。DTW算法的原理是計算兩個長度不同的語音之間的相似程度,即失真距離。
設(shè)測試語音和參考語音用T和R表示,他們分別含有N幀和M幀的語音參數(shù)。本文中每幀語音的特征參數(shù)為14維,因此T,R分別為N×14和M×14的矩陣。把測試語音的各個幀號x=1~N在一個二維直角坐標系中的橫軸上標出,把參考語音的各幀號y=1~M在縱軸上標出,通過這些表示幀號的整數(shù)坐標畫出一些縱橫線即可形成一個網(wǎng)格,網(wǎng)格中的每一個交叉點(x,y)表示測試模式中某一幀號與訓練模式某一幀的交叉點,對應(yīng)于兩個14維向量的歐氏距離。DTW算法在于尋找一條通過此網(wǎng)格中若干交叉點的路徑,使得該路徑上節(jié)點的路徑和小。算法示意圖如圖3所示。
本系統(tǒng)的核心芯片為TI公司的32位浮點數(shù)字信號處理器TMS320C6713。其時鐘頻率可達300 MHz,處理能力可以高達1 336 MIPS和1 000 MFLOPS。由于256 kB的片上RAM無法滿足多路信號處理時的空間需求,系統(tǒng)通過EMIF(External Memory Interface,外部存儲器接口)擴展了32 MB的外部SDRAM,并采用EDMA(External Direct Memory Access,擴展的直接存儲器訪問)方式對這些外部空間進行訪問。
3 軟件實現(xiàn)
由于TMS320C6x系列的C語言編譯器的效率可達匯編語言的70%~80%,并且C語言具有開發(fā)周期短、可維護性好、可移植性好、可繼承性好等優(yōu)點,所以軟件采用C語言實現(xiàn)。
3.1 軟件流程
測試中采用10個參考模板,每個模板由相應(yīng)的參考語音中2 s的語音數(shù)據(jù)訓練而成。識別策略為每路積累2 s的接收語音數(shù)據(jù)后與逐個參考模板進行匹配,如果經(jīng)由DTW運算所得的距離值小于特定的門限,就判決已匹配。如果不匹配,就繼續(xù)接收匹配,超過8 s匹配不上,就放棄。軟件流程框圖如圖5所示,其中語音數(shù)據(jù)的采樣率為8 000 Hz,每幀取256個采樣點,即32 ms的數(shù)據(jù)為一幀。
測試發(fā)現(xiàn)1幀信號的處理時間為78 135 679個指令周期,即391 ms(TMS320C6713工作在200 MHz),遠遠達不到實時處理的要求,必須對其進行優(yōu)化。
3.2 代碼的優(yōu)化
首先根據(jù)TI公司提供的軟件開發(fā)流程,從合作編譯器選項、使用內(nèi)聯(lián)函數(shù)、使用字訪問短整型數(shù)據(jù)和使用軟件流水等方面對代碼進行了優(yōu)化。具體實現(xiàn)中,采用-pm選項、-op3選項和-o3選項對程序進行了重新編譯。展開內(nèi)層循環(huán),并通過#pragma MUST ITERATE()告訴編譯器循環(huán)執(zhí)行的次數(shù),上述優(yōu)化后,處理一幀的時間從78 135 679個指令周期降到了50 364 683個指令周期,但是還是無法滿足實時性的要求。
進一步對代碼進行測試分析,提取MFCC參數(shù)的過程中,256點的實數(shù)FFT運算占用了大量的時間。TI公司針對C6000系列的DSP提供了豐富的庫函數(shù)可以方便地調(diào)用。這里,從dsp67x.lib中調(diào)用DSPF_dp_cfftr4_dif()進行256點實數(shù)的FFT運算,把提取MFCC的時間降為了0.72 ms。
由于采用10個參考模板,每路數(shù)據(jù)一次識別就要進行10次DTW的運算,所以如何減少DTW的運算時間是優(yōu)化的重點。對DTW的優(yōu)化從兩方面進行,首先采用查表法縮小匹配時搜索的區(qū)域。
由于DTW匹配的過程中限定了彎折的斜率,因此好多格點實際上是達不到的,如圖6所示。因此菱形之外的格點對應(yīng)的幀匹配距離是不需要計算的。在本系統(tǒng)的應(yīng)用中,因為每次都以2 s和2 s的語音數(shù)據(jù)進行匹配,M和N都固定是64幀,所以可以建一個表格儲存菱形區(qū)域內(nèi)的測試幀號和參考幀號,匹配時只計算表格中兩幀間的矢量距離,即歐氏距離,從而把歐氏距離的運算從40 960次減少到了19 460次。
在采用DTW快速算法后,還需進行了19 460次歐氏距離的運算。測試可得,每次運算耗時1 524個指令周期,所以這部分的運算仍是影響識別速度的關(guān)鍵。為了進一步提高代碼的性能,把這段代碼改為線性匯編來實現(xiàn)。
完成上述全部優(yōu)化后,測試得到,處理一幀的時間為1 849 365個指令周期,其中TMS320C6713工作在200 MHz,即處理1幀的時間為1 849 365/200 000 000=9.25 ms,達到0.29倍實時。
為了測試上述系統(tǒng)的識別性能,對其進行了固定文本的說話人辨識實驗。實驗中,采用錄音設(shè)備錄制了10個人、3個不同時間所說的同一句話,共30句,平均時間長度為4.5 ms。從每個人的3句話中選擇頻譜清晰的一句訓練成模板,另外錄制20句由這10個人所說的長度接近但內(nèi)容不同的語音做測試語音。這樣模板庫中有10個模板,測試語音有50個。
首先通過各模板間的匹配,確定了判決門限0.2,然后把50句測試語音依次送入識別系統(tǒng),所有語音全部正確匹配。
本文通過對DTW算法的改進,結(jié)合TMS320C6713的特點對C代碼進行了優(yōu)化,在保證識別率的情況下,用TMS320C6713成功地實現(xiàn)了語音信號的高速實時識別。