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