孫 玉,郭寶增
(河北大學 電子信息工程學院,河北 保定071002)
隨著計算機技術、模式識別技術等的發(fā)展,國內(nèi)外對語音識別的研究也不斷進步。目前電器、家居智能化的實際需求使得語音識別技術成為一個研究熱點。例如,美國約翰·霍普金斯大學語言和語音處理中心多年來一直致力于推動語言和語音識別的研究和教育,CLSP每年一度的夏季研討會對語音識別的各個領域都產(chǎn)生了深遠的影響。國內(nèi),中國科學院等也在語音識別領域有較大進展。
相對于基于PC機平臺的大詞匯量語音識別系統(tǒng),嵌入式系統(tǒng)中要求語音控制模塊占用資源少,功能簡潔,可作為獨立的語音識別系統(tǒng)或其他系統(tǒng)的語音控制部分。因此,根據(jù)語音識別系統(tǒng)的準確性、實時性的要求和SoPC實現(xiàn)方式的特點,在介紹實現(xiàn)該語音識別系統(tǒng)的基本流程的基礎上著重探討以下兩部分內(nèi)容:(1)由于端點檢測算法對識別的準確性影響較大,本系統(tǒng)探索適合SoPC設計的端點檢測算法,從而使得系統(tǒng)的識別準確性有所改進;(2)模式匹配時,對同一模板采用了多個局部判決函數(shù),求多個累加總距離的平均值作為最終的判決依據(jù),進一步提高了識別結果的可靠性。
可編程片上系統(tǒng)SoPC(System on Programmable Chip)是Altera公司提出的一種基于FPGA的嵌入式系統(tǒng)解決方法,采用軟硬件結合設計的思想,實現(xiàn)方式簡單靈活[1]。設計中采用高性價比的EP2C70 FPGA芯片。實驗結果表明,系統(tǒng)運行良好,能夠滿足中、小詞匯量孤立詞語音識別系統(tǒng)的要求。
語音識別系統(tǒng)的邏輯流程如圖1所示。采樣得到的語音信號要經(jīng)過預處理、端點檢測、特征參數(shù)提取,然后根據(jù)用戶指定的工作模式(識別模式或訓練模式),進行模式匹配并輸出識別結果,或者訓練得到該詞條的模板,并存入模板庫。因此,在硬件資源允許的條件下,用戶可以自定義訓練模板,更新模板庫,拓展系統(tǒng)的應用范圍。
系統(tǒng)采用8 kHz采樣,由音頻編/解碼芯片WM8731采樣得到的語音數(shù)據(jù),經(jīng)過FIFO數(shù)據(jù)緩存器傳輸?shù)较到y(tǒng)的SDRAM中,然后對SDRAM中的數(shù)據(jù)進行后續(xù)處理。設定256個采樣點作為一幀,每個孤立詞采集100幀(3.2 s)數(shù)據(jù)。
(1)預加重:處理的第一步要對采集到的數(shù)字語音信號進行預處理,主要是預加重。預加重的目的是提升高頻部分,使信號的頻譜變得平坦,保持在低頻到高頻的整個頻帶中能用相同的信噪比求頻譜。通過一個濾波器對信號進行濾波,濾波器的傳遞函數(shù)為:
(2)端點檢測:從數(shù)字語音信號中快速有效地切分出語音段,對于整個系統(tǒng)的識別速度和識別準確性影響較大。根據(jù)漢語語音的特點,一般一個漢語單詞的開始部分是清音,接下來是濁音,清音較弱,濁音較強。因此在端點檢測部分,采用了基于短時能量和短時過零率的雙重檢測。首先根據(jù)濁音粗判起始幀,然后根據(jù)清音,細判起始幀。語音的起始幀和終止幀都是經(jīng)過粗判和細判之后得出,從而保證端點檢測的準確性[2]。
短時能量由下式計算:
短時過零率由下式計算:
其中,i為幀標志 (i=0,1,2, …,100);N 為每幀的采樣點數(shù),此處設定N=256;xi(n)表示第 i幀中第 n個采樣點的值。因此,E(i)為第 i幀的短時能量,ZCR(i)為每幀的短時過零率,對每幀求一次短時能量和過零率。
端點檢測部分程序流程如圖2所示。
經(jīng)過預加重和端點檢測之后得到語音段采樣值構成的向量序列。接下來對該向量序列進行特征參數(shù)分析,目的是提取合適的語音特征參數(shù),使特征向量序列在語音識別時,類內(nèi)距離盡量小,類間距離盡量大。特征參數(shù)的提取同樣是語音識別的關鍵問題,特征參數(shù)的選擇直接影響到語音識別的精度。結合SoPC設計的需求,選擇提取語音信號的美爾特征參數(shù)(MFCC)[3]。MFCC能夠較好地反映人耳的聽覺特性。
為求識別系統(tǒng)簡潔,每詞條固定采集3.2 s的語音信號,采樣頻率為8 kHz,經(jīng)端點檢測切分出語音段,然后將語音段進行分幀(每幀256個采樣點),每幀提取一組14維的MFCC參數(shù),組成一組特征參數(shù)向量序列,作為待識別語音段的特征參數(shù)。
對于大詞匯量的非特定人語音識別系統(tǒng),模式匹配多采用基于模型參數(shù)的隱馬爾可夫模型(HMM)的方法或基于非模型參數(shù)的矢量量化(VQ)的方法。但是HMM算法模型數(shù)據(jù)過大,對存儲空間和處理速度的要求高,不適合嵌入式系統(tǒng)。VQ算法雖然訓練和識別的時間較短,對內(nèi)存要求也較小,但識別性能較差。因此考慮到嵌入式系統(tǒng)系統(tǒng)資源有限以及運算能力限制,而又需要保證識別準確性,決定采用基于動態(tài)時間規(guī)整的算法(DTW)進行模式匹配。
由于每個人的發(fā)音習慣不同,以及同一個人每次說同一個單詞時說話速度具有隨機性,因此會導致每次采樣得到的語音數(shù)據(jù)序列長度具有隨機性。DTW算法由日本學者板倉(Itakura)提出[4],能夠較好地解決語音識別時單詞長度具有隨機性這一問題。
DTW[5-6]算法將時間規(guī)整和距離測度計算相結合,描述如下:
(1)將特征提取部分提取出來的特征向量序列與模板庫中每個詞條的特征向量序列逐幀計算距離,得到距離矩陣。對應幀之間的距離是兩幀的特征向量中對應分量的差值的平方和。距離矩陣中元素的計算式為:
其中,D[i][j]為距離矩陣的元素,表示待識別語音段特征向量序列第i幀和該條參考模板向量序列第j幀之間的距離,i=0,1,2,…,I-1;j=0,1,2,…,J-1。I、J分別為待識別語音的特征向量序列和該條參考模板序列的總幀數(shù)。x[i][m]為待識別語音的特征向量序列第i幀向量的第m維分量,y[j][m]為該條參考模板的第j幀向量的第m維分量。K為對切分出的語音段每幀語音的原始采樣數(shù)據(jù)提取的特征向量的維數(shù),該識別系統(tǒng)中每幀提取14維的MFCC參數(shù),因此 K=14。
(2)按照一定的局部判決函數(shù),由距離矩陣計算出累加距離矩陣(求得的累加距離矩陣最末一個元素的值即為待識別語音和該條參考模板之間的總距離),得到累加距離矩陣的同時得出最佳規(guī)整路徑[3-4]。圖3所示為設計中采用的三種局部判決函數(shù)。
在如圖 3(a)所示的基本對稱局部判決函數(shù)下,累加距離矩陣中元素的計算公式為:
其中,G[i][j]為累加距離矩陣的元素,i=0,1,2,…,I-1;j=0,1,2,…,J-1。 I、J分別為待識別語音特征向量序列和該條參考模板序列的總幀數(shù)。G[i][j]的值等于在選定的局部判決函數(shù)下,從距離矩陣中前一位置到達距離矩陣中的第 i行、第 j列交匯處(D[i][j]處)的最小代價值與距離矩陣中該位置的元素值D[i][j]之和,這里規(guī)定G[0][0]=D[0][0]。
在基本對稱局部判決函數(shù)下,有三條路徑(垂直路徑、對角線路徑和水平路徑)到達距離矩陣中的第i行、第 j列交匯處(D[i][j]處),其代價值分別為 G[i-1][j]、G[i-1][j-1]和G[i][j-1]。取三者中的最小值作為該步轉移的最小代價值。最小的代價值對應的路徑為該步的最佳規(guī)整路徑。求得的累加距離矩陣的最末一個元素G[I-1][J-1]的值就是待識別語音和該條參考模板之間的累加總距離。
通常計算累加距離矩陣的局部判決函數(shù)采用一種固定的形狀,這樣對同一個累加距離矩陣只能計算出一個總距離,未能較全面地統(tǒng)計出待識別序列與參考模板之間的距離關系。因此,嘗試對同一個距離矩陣采用多個不同的局部判決函數(shù)(如圖 3所示)計算出相應個數(shù)的累加距離矩陣。最后,以多個累加總距離的統(tǒng)計平均值作為待識別語音與該條模板的距離。
程序中采用上述三種局部判決函數(shù)。在各種局部判決函數(shù)下求解累加距離矩陣各元素的計算公式分別為:
其中規(guī)定G(a)[0][0]=G(b)[0][0]=G(c)[0][0]=D[0][0]。
上述三個累加距離矩陣中最后一次求得的元素的值,即為采樣相應的局部判決函數(shù)時,待識別語音序列與該模板序列之間的總距離,分別為:G(a)[I-1][J-1]、G(b)[I-1][J-1]和 G(c)[I-1][J-1]。取三個總距離的統(tǒng)計平均值,可得待識別語音與該條模板之間的統(tǒng)計平均距離:
同理,對待測語音與模板庫中的每條模板求得一個統(tǒng)計平均距離。由判決邏輯判斷出各統(tǒng)計平均距離值中的最小值,相應的模板所指向的單詞即為最終的識別結果。
系統(tǒng)硬件部分如圖4所示,包括FPGA芯片、Flash、SDRAM、音頻編解碼芯片WM8731、按鍵以及LCD1602。在FPGA芯片中添加 NiosII軟核 CPU,并建立片外 Flash、SDRAM、音頻編解碼芯片WM8731和LCD1602的接口部分。
系統(tǒng)中的Flash芯片用于存儲FPGA硬件設計文件、系統(tǒng)初始化所需代碼和用戶程序以及參考模板庫,SDRAM作為系統(tǒng)內(nèi)存。系統(tǒng)上電后,硬件編程文件以及用戶程序讀入SDRAM中,并且初始化各硬件設備。初始化完畢后,如果選擇系統(tǒng)進入識別模式,CPU通過I2C總線向WM8731寫入命令,控制音頻芯片WM8731采集語音數(shù)據(jù)并進行A/D轉化,得到的數(shù)據(jù)經(jīng)過WM8731的數(shù)據(jù)輸出端口在FPGA內(nèi)部構建的FIFO緩存,存入內(nèi)存中,然后對數(shù)據(jù)進行后續(xù)處理并進行識別,最終輸出識別結果。
系統(tǒng)采用SoPC方法實現(xiàn),按需要定制硬件模塊,設計過程簡潔靈活,對系統(tǒng)的后續(xù)升級維護也比較方便。且實驗表明:(1)采用雙重判決機制進行端點檢測,能夠得到較好的識別效果;(2)采用較簡單的DTW方法進行模式匹配,一方面在消耗系統(tǒng)資源較少的情況下能夠得到較高的識別速度,使得整個系統(tǒng)能夠滿足實時性的要求。另一方面,在模式匹配時采用不同的局部判決函數(shù)求得多個累加總距離,進而求得累加總距離的統(tǒng)計平均值。以統(tǒng)計平均值作為最終的判決依據(jù),相對于只采用單一局部判決函數(shù)下得到的識別結果理論上可靠性更高。
[1]周立功.SoPC嵌入式系統(tǒng)基礎教程[M].北京:北京航空航天大學出版社,2008.
[2]劉華平,李昕,徐柏齡,等.語音信號端點檢測方法綜述及展望[J].計算機應用研究,2008(8):2278-2283.
[3]羅希,劉錦高.基于 NIOS的ANN語音識別系統(tǒng)[J].計算機系統(tǒng)應用,2009(12):144-146.
[4]趙力.語音信號處理[M].北京:機械工業(yè)出版社,2003.
[5]王娜,劉政連.基于DTW的孤立詞語音識別系統(tǒng)的研究與實現(xiàn)[J].九江學院學報(自然科學版),2010(3):31-39.
[6]姚天任.數(shù)字語音處理[M].武漢:華中科技大學出版社,1991.