翟片富 景新幸
(桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
研究語音識別的目的是讓機器聽懂人說的話[1],即在各種情況下,準確地識別出語音的內容,從而根據其信息,執(zhí)行人的各種意圖。語音識別算法是語音識別的核心和靈魂,是能否最終識別以及識別率高低的關鍵。目前,在語音識別所應用識別算法中,主要有基于隱馬爾可夫模型(HMM)、人工神經網絡(ANN)、動態(tài)時間規(guī)整(DTW)等。雖然 HMM模型在解決非特定人、大詞匯量、連續(xù)語音方面取得較好的效果,但由于其計算相對復雜而且需要消耗大量的存儲資源和大量的前期訓練工作,DSP存儲資源有限,因此該算法不適合在DSP系統(tǒng)中的實現(xiàn)。因此本文采用了計算量相對較小的 DTW算法,該算法在特定人、小詞匯量、孤立詞的語音識別中取得較好的效果。
語音識別的本質是一種基于語音特征的模式識別[2],然而進行識別的前提和基礎是對語音信號的分析和處理。其基本框圖如圖1所示:
圖1 語音識別原理圖
語音識別過程主要包括語音信號的預處理、端點檢測、特征參數提取,模板庫的訓練和識別。語音信號的預處理一般包括語音信號預加重、數據分幀和加窗處理等過程。特征參數的提取需要滿足以下幾個要求:
(1)能夠有效代表語音信號的特征;
(2)各階參數之間有良好的獨立性;
(3)特征參數要計算方便,以保證語音識別的實時實現(xiàn)。
由于語音識別系統(tǒng)算法復雜度比較高,同時要考慮實時性,本文選擇的是TI公司的TMS320C6713DSK[3]作為硬件的開發(fā)平臺。DSK6713是一款低成本獨立開發(fā)的應用板,其最高工作時鐘頻率可達到225MHZ,且是高性能的32位浮點數字信號處理器。其內部集成了多個功能單元,可同時執(zhí)行8條指令,運算能力可達1G FLORPS。該應用板帶有TLV320AIC23立體編解碼器,以及8M字節(jié)32bit的SDRAM,512k字節(jié)8bit的非易失Flash存儲器。
該系統(tǒng)針對的是特定人小詞匯量孤立語音的識別,硬件結構如圖2所示,主要包括語音信號數據采集模塊、數據傳輸模塊,數據處理模塊、程序數據存儲模塊以及 Flash引導裝載模塊、數據存儲器RAM以及其他相關的模塊。
圖2 系統(tǒng)硬件框圖
數據模塊主要采用的是 TLV320AIC23編解碼器來實現(xiàn)對語音信號數據的采集。AIC23是一款高性能立體聲音頻編解碼器,其內部集成的模數轉換器(ADCs)和數模轉換器(DACs)采用了待遇過采樣數字插補濾波器的多位 Sigma-Delta技術。把AIC23采集的數字信號數據通過DSK6713的McBSP1[4]存入SDRAM中。數據處理的核心模塊是用TMS320C6713DSP芯片來實現(xiàn)語音識別的算法。訓練時,DSP完成語音信號MFCC特征參數的提取、DTW建模并存入Flash中;識別時,DSP讀取待識別的語音信號數據并將所獲得的模型參數與訓練模型的參數進行比較,從而得到識別結果。
系統(tǒng)的軟件流程如圖3所示。
圖3 軟件流程圖
首先系統(tǒng)進行端點檢測,檢測的方法一般采用短時能量、短時過零率或者兩者相結合的方法,如果檢測到語音信號,則對有效的語音信號信息進行特征參數提取,然后把參考模板數據讀取到片內存儲器,對每個參考模板進行模式匹配,尋找距離最短的模式作為識別的結果。
(1)端點檢測
端點檢測的作用是把含有噪聲語音信號的起點和終點檢測出來。該系統(tǒng)采用的是短時能量和過零率相結合的方法來實現(xiàn),可以實現(xiàn)對端點的可靠檢測。在計算短時能量[5]前,首先將語音信號通過一個一階高通濾波器進行預加重,它的目地在于濾除低頻干擾,尤其是50Hz或60Hz的工頻率干擾,將對于語音識別更為有用的高頻部分的頻譜進行提升。接著對語音信號加漢明窗分幀,再計算能量值進行判斷。一般情況下,清音的過零率大多要比濁音的高,濁音的能量大多要比清音的高,因此,在實際應用中,通常是利用過零率來檢測清音,用短時能量來檢測濁音兩者配合實現(xiàn)可靠的端點檢測。通過MATLAB仿真繪制出數字7的能量分布曲線圖,如圖4所示。雙門限端點檢測算法可以準確的檢測出語音信號中的有效成分。
圖4 雙門限端點檢測數字7的結果
(2)特征參數
語音信號含有豐富的信息,這些信息既包括影響語音識別的重要信息,也包括一些摻雜在語音信號里的噪聲,這些噪聲會大大的降低識別率。特征參數提取可以去除這些,能夠準確的把表征語音信號特征的聲學參數提取出來,以便用于后端的模型的建立和匹配,不但提高語音識別率而且大大減少存儲空間、訓練和測試時間。
近年來,一種能夠比較充分利用人耳這種特色感知特性的參數得到廣泛的應用,這就是梅爾倒譜參數(MFCC)。大量研究表明,MFCC參數在說話人識別系統(tǒng)中應用時性能好于LPCC參數。本文選擇MFCC作為特征參數。MFCC參數的計算通常采用以下流程:
首先確定每一幀語音采樣序列的點數,本系統(tǒng)取 N=256點。對每幀序列s(n)進行預加重處理后再經過離散FFT變換,取模的平方得到離散功率譜S(n)。
計算S(n)通過M個Hm(n)后所得的功率值,即計算S(n)和Hm(n)在各離散頻率點上乘積之和,得到 M個參數Pm,m=0,1,…,M-1。
計算Pm的自然對數,得到Lm,m=0,1,…,M-1。
對L0,L1, ...,Lm?1計算離散余弦變換,得到Dm,m=0,1,…,M-1。
舍去代表直流成分的D0,取D1,D1, ...,DK作為MFCC參數。
(3)模型訓練和模式識別
目前語音識別中使用模板匹配技術比較常見的有隱馬爾可夫模型(HMM)、人工神經元網絡(ANN)和動態(tài)時間彎折算法(DTW)。綜合考慮到算法的復雜性和計算量的大小、算法在DSP系統(tǒng)實現(xiàn)的難易程度以及所需要的 DSP資源,因此系統(tǒng)采用算法相對簡單和計算量相對較小并且有效的 DTW算法。該算法基于動態(tài)規(guī)劃(DP)的思想,有效解決了發(fā)音長短不一的模板匹配問題。DTW的原來是計算模板語音和測試語音之間的相似度,即失真距離。
假設R和T分別表示測試語音和參考語音,他們分別含有M幀和N幀矢量,并且M≠N。首先建立一個二維直角坐標系,將參考語音的所有幀號m=1~M標在縱坐標上,將測試語音的所有幀號n=1~N標在橫坐標上。分別對過縱軸的序號畫一些平行于縱軸的線和過縱軸的序號畫一些平行于橫軸的線,這些線交織形成一個網格,參考語音和測試語音各幀之間的交匯點就對應網格中的每個交叉點(n,m)。DTW算法的目的是尋找一條通過該網絡中若干交叉點的路徑,并且使得該路徑上節(jié)點的路徑之和最小。
存儲容量對于DSP[6]來說是非常寶貴的,所有在DSP中聲明的變量都會分配相應的數據空間,對于變量申請所需要的存儲空間,應事先計算好,最大化利用 DSP存儲資源,不應造成資源的浪費。為了合理利用存儲空間,在編寫 DSP程序時,應最好維護一張變量表,當每進入一個子塊時,應優(yōu)先使用已分配好但沒有使用的變量,而不是急于分配新的局部變量[7]。
根據語音識別的實現(xiàn)功能進行模塊劃分,每個模塊又可以細分為若干個小模塊,然后對這些小模塊進行編程和調試。編程時需要注意變量的使用,在重要的地方需要加上注釋和說明。
所有的語音信號都是在安靜的實驗室環(huán)境下獲得的。對10名不同的同學采集了開窗、關門、開門、開窗、打開、關閉等詞語,該詞語都是通過 DSK6713的麥克風接口輸入到應用板。首先由每名同學把這些詞語按照指示燈的提示輸入到應用板作為訓練模板,然后由該名同學按照指示燈的提示隨機輸入其中一個詞語作為測試樣本。詞語識別率如表1所示。錄音時間大約1~2s。
該系統(tǒng)基于實驗室環(huán)境下進行的,前端沒有對語音信號進行去噪處理,因此系統(tǒng)噪聲的魯棒性較差,影響識別率。另外,由于每個同學的發(fā)音方式、發(fā)音強弱及準確性都有較大的差異,這也會影響識別率。
表1 識別率統(tǒng)計
文章首先通過在Matlab平臺上對算法進行仿真實驗,并選取合適的參數和模型,并將其移植到 DSK6713應用板。在DSK6713應用板上采用DTW算法實現(xiàn)了孤立詞、小詞匯量的語音識別,系統(tǒng)的硬件電路較簡單、工作穩(wěn)定,算法計算量小,識別率也比較高。如果在前端再進行一些去噪處理,提高語音信號的信噪比,可以更有效的提高語音信號的識別率。
[1]韓紀慶.語音信號處理[M].北京:清華大學出版社,2004.9.
[2]趙力.語音信號處理[M].北京:機械工業(yè)出版社,2003.4.
[3]三恒星科技.TMS3206713DSP原理與應用實例[M].北京:電子工業(yè)出版社,2009.4.
[4]Implementing a Software UART on the 54x with the Mcbsp and DMA[Z].Application Report SPRA 661A, November 2000.
[5]何英,何強.MATLAB擴展編程[M].北京:清華大學出版社,2002:330-347.
[6]馬斌,郭莉莉,韓中華,等.基于DSP的語音識別系統(tǒng)的研究與設計[J].微計算機信息,2008,24(8):197-199.
[7]常丹華,鄭春蕾.基于DSP的語音識別智能控制系統(tǒng)[J].電子測量技術,2008.4.