基于片上系統(tǒng)SoC的孤立詞語音識別算法設計
1. 引言
目前,嵌入式語音識別系統(tǒng)的實現(xiàn)主要通過單片機MCU和數(shù)字信號處理器DSP來實現(xiàn)[1]。但是單片機運算速度慢,處理能力不高;雖然DSP處理速度很快,但是產(chǎn)品的成本很高,電源能量消耗也很大。因此,為了滿足嵌入式交互系統(tǒng)的體積越來越小、功能越來越強的苛刻需求,語音識別片上系統(tǒng)SoC(System on Chip)應運而生。
語音識別片上系統(tǒng)SoC本身就是一塊芯片,在單一芯片上集成了模擬語音模數(shù)轉(zhuǎn)換器ADC、數(shù)模轉(zhuǎn)換器DAC、信號采集和轉(zhuǎn)換、處理器、存儲器和I/O接口等,只要加上極少的電源就可以具有語音識別的功能,集成了聲音信息的采集、取樣、處理、分析和記憶。SoC具有片內(nèi)處理器和片內(nèi)總線,有著更靈活的應用方式。它具有速度快,體積小,成本低,可擴展性強等優(yōu)點,有著廣泛的應用前景,已經(jīng)成為語音識別技術應用發(fā)展的一個重要方向[2-3]。研究和開發(fā)應用于片上系統(tǒng)SoC芯片的語音識別算法有著非常重要的意義。
2. 孤立詞語音識別系統(tǒng)
孤立詞語音識別系統(tǒng)應用于嵌入式控制領域,例如數(shù)字家庭控制、車載語音控制和智能語音可控玩具等。在訓練階段,用戶將每一個詞依次說一遍,并將計算得到的每一個詞所對應的特征矢量序列作為模板存入模板庫中。在識別階段,將輸入語音的特征矢量序列依次與模板庫中的每一模板進行相似度比較,將相似度最高者作為識別結(jié)果輸出。
3. 針對片上系統(tǒng)SOC的孤立詞語音識別算法設計
在SoC芯片中實現(xiàn)孤立詞語音識別系統(tǒng),就要根據(jù)語音識別片上系統(tǒng)的特點,來進行SoC的語音識別算法的選擇和設計。
首先是特征提取算法的選擇。MFCC算法考慮到了人的聽覺效果,能很好的表征語音信號,而且在噪聲環(huán)境下能取得很好的識別效果。而LPC系數(shù)主要是模擬人的發(fā)聲模型,對元音有較好的的描述能力,對輔音描述能力較差,抗噪聲性能也相對差一些。但是從算法的計算量來考慮,MFCC提取特征參數(shù)是LPCC 的10倍左右,通常在嵌入式系統(tǒng)下較難實現(xiàn)實時性。因此,選用LPCC算法。
模式匹配技術的選擇。隱馬爾柯夫模型HMM方法是用概率及統(tǒng)計學理論來對語音信號進行分析與處理的,適用于大詞匯量、非特定人的語音識別系統(tǒng)。該算法對系統(tǒng)資源的要求較多。而動態(tài)時間規(guī)整技術DTW采用模板匹配法進行相似度計算,是一個最為小巧的語音識別算法,系統(tǒng)開銷小,識別速度快,可有效節(jié)約系統(tǒng)資源,降低系統(tǒng)成本開支。由于嵌入式系統(tǒng)資源有限,語音命令識別系統(tǒng)所需要的詞匯量有限,所需識別的語音都是簡短的命令,模式匹配算法選擇DTW。
3.1 端點檢測算法設計
一個好的端點檢測算法可以在一定程度上提高系統(tǒng)的識別率。在雙門限端點檢測原理的基礎上,進行語音端點檢測算法的設計。為了提高端點檢測的精度,采用短時能量E和短時過零率ZCR。
語音采樣頻率為8KHz,量化精度為16位,數(shù)字PCM碼首先經(jīng)過預加重濾波器H(z)=2-0.95z-1,再進行分幀和加窗處理,每幀30ms,240點為一幀,幀移為80,窗函數(shù)采用Hamming窗。然后對每幀語音進行歸一化處理,即把每點的值都除以所有語音幀中數(shù)值絕對值的最大值,把值的范圍從[-32767,32767]轉(zhuǎn)換到[-1,1]。
在實驗中發(fā)現(xiàn),雙門限端點檢測算法對于兩個漢字和三個漢字的語音命令端點檢測效果不好。以語音“開燈”為例,如圖1所示語音波形圖中,端點檢測只能檢測到第一個字。
圖1 改進前對語音“開燈”的端點檢測
Fig2. the endpointing detection of speech “kaideng” before ameliorate
如果語音命令中兩個字的間隔過長,使用雙門限端點檢測方法會發(fā)生只檢測到第一個字的情況,在實際中“開燈”和“開門”等命令只提取了“開”字的語音,從而可能造成語音匹配的錯誤。
為避免該錯誤,采用的辦法是,把可容忍的靜音區(qū)間擴大到15幀 (約150ms)。在雙門限的后一門限往后推遲15幀,如15幀內(nèi)一直沒有energy和ZCR超過最低門限,則認為語音結(jié)束;如發(fā)現(xiàn)仍然有語音,則繼續(xù)算入在內(nèi)。
圖2 改進后對語音“開燈”的端點檢測
Fig3. the endpointing detection of speech “kaideng” after ameliorate
改進后,整個語音信號的端點檢測流程設計為四個階段:靜音、過渡段、語音段和語音結(jié)束。在靜音段,如果能量或過零率超越了低門限,就應該開始標記起始點,進入過渡段。在過渡段中,由于參數(shù)的數(shù)值比較小,不能確信是否處于真正的語音段,因此只要兩個參數(shù)的數(shù)值都回落到低門限以下,就將當前狀態(tài)恢復到靜音狀態(tài)。而如果在過渡段中兩個參數(shù)中的任一個超過了高門限,就可以確信進入語音段。在語音段,如果兩個參數(shù)的數(shù)值降低到低門限以下,并且一直持續(xù)15幀,那么語音進入停止。如果兩個參數(shù)的數(shù)值降低到低門限以下,但是并沒有持續(xù)到 15幀,后續(xù)又有語音段越過低門限,那么認為語音還沒有結(jié)束。最后,如果檢測出的這段語音總長度小于可接受的最小的語音幀數(shù)(設為15幀),則認為是一段噪音而放棄。
采用改進后的端點檢測算法,對于單個漢字或多個漢字的語音命令均識別常。圖2為語音“開燈”的端點檢測圖(兩條紅線以內(nèi)的部分為檢測出來的語音部分)。
3.2 LPCC特征參數(shù)提取算法設計
LPC參數(shù)是模擬人的發(fā)聲器官的,是一種基于語音合成的特征參數(shù)。在實際應用中,使用較多的是由LPC系數(shù)推導出的另一種系數(shù),線性預測倒譜系數(shù)LPCC(Linear Predictive Ceptrum Coefficients)。
3.2.1線性預測編碼LPC算法
LPC模型的基本思想是:對于給定一n時刻采樣的語音信號采樣值s(n),可以用p個取樣值的加權和線性組合來表示[4]。 a1, a2,…, ap稱為LPC系數(shù),也是全極點H(z)模型的參數(shù)。
cm為倒譜系數(shù),am為線性預測系統(tǒng),m為倒譜系數(shù)的階數(shù),p為線性預測系統(tǒng)的階數(shù)。這樣利用LPC系數(shù)通過遞推公式可以得到LPCC參數(shù)。LPCC由于利用了線性預測中聲道系統(tǒng)函數(shù)的最小相位特性,避免了相位卷積、求復對數(shù)
3.3 基于DTW的模式匹配算法設計
3.3.1 動態(tài)時間規(guī)整DTW算法
存入模板庫的各個詞條稱為參考模板,一個參考模板可表示為R={R(1), R(2),…, R(m),…, R(M)}。m為訓練語音幀的時序標號,m =1為起點語音幀,m =M為終點語音幀,M為該模式包含的語音幀總數(shù),R(m)為第m幀的語音LPC倒譜特征矢量。所要識別的一個輸入詞條語音稱為測試模板,可表示為T={T (1), T(2),…, T(n),…, T (N)},n為測試語音幀標號,模式中共包含N幀語音,T(n)為第n幀的LPC倒譜特征矢量。
比較參考模板和測試模板的相似度,可以計算它們的距離D[T,R],距離越小則相似度越高。語音中各個段落在不同情況下的持續(xù)時間會產(chǎn)生或長或短的變化,大多數(shù)情況下測試模板和參考模板長度不相等N≠M,因此采用動態(tài)規(guī)整(DP)的方法。
DTW算法的實現(xiàn)為:分配兩個N×M矩陣,分別為累積距離矩陣D和幀匹配距離矩陣d,其中幀匹配距離矩陣d(i,j)的值為測試模板的第i幀與參考模板的第j幀間的距離。算法分為兩步:先要計算參考模板的所有幀和未知模板的所有幀之間的相互距離,結(jié)果存在矩陣d中;然后根據(jù)判斷函數(shù)計算累積距離矩陣D,D(N,M)即為最佳匹配路徑所對應的匹配距離。DTW算法約束端點條件為:起點(1,1),終點(n,m),n和m分別為測試和參考語音模板的幀序列長度。
3.3.2 應用中提高識別率的改進方法
在應用中,提高DTW識別率的辦法有冗余模板法、松弛起點終點法、改進局部路徑約束函數(shù)法等。
(1)冗余模板法。采用每個詞條多套模板的方法,可以改進其識別效果。在實驗中,采用在語音訓練階段,每個詞條訓練四次,即每個詞條提取出4個參考模板,這樣,只要測試模板與4個參考模板中的一個匹配成功,匹配結(jié)果就是正確的,這樣便大大提高了識別率。
(2)松弛起點終點法。將匹配過程中的固定起點(終點)改為松弛起點(終點)。端點對齊的限制條件提高了對語音端點檢測的精度要求。路徑不再是從(1,1)點出發(fā),可以從(n,m)=(1,2)或(2,1),或(1,3)或(3,1)…點出發(fā),稱為松弛起點。同樣,路徑也不必在(N,M)點結(jié)束,可在(n,m)=(N,M-1)或(N-1,M)或(N,M-2)或(N-2,M)點…結(jié)束,稱為松弛終點。松弛起點終點的優(yōu)點是可克服由于端點檢測不精確造成測試模板和參考模板起點終點不能嚴格對齊的問題[6]。
(3)改變局部路徑約束函數(shù)法。不同的連續(xù)性條件導致了不同的路徑,局部路徑約束函數(shù)不一樣,DTW識別效果就會不同??梢詫植考s束路徑進行加權處理,提高識別率。
本文中采用的模板匹配算法就是融合這三種改進技術后的動態(tài)規(guī)整算法,稱之為ADTW算法。對這種算法進行了實驗,得到該算法的實際識別率,并對之進行分析。
3.3.3 應用中提高算法效率的改進方法
在計算傳統(tǒng)DTW算法過程中,如果限定動態(tài)規(guī)整的計算范圍,可以大大減小計算量,提高程序的性能。
采用平行四邊形限制動態(tài)規(guī)整范圍,如圖3,菱形之外的節(jié)點對應的幀匹配距離是不需要計算的,也沒有必要保存所有幀匹配距離矩陣和累積距離矩陣,以 ADTW的局部約束路徑為例,每一列各節(jié)點上的匹配計算只用到了前兩列的幾個節(jié)點。充分利用這兩個特點可以減少計算量和存儲空間的需求。把實際的動態(tài)規(guī)整分為三段,(1,Xa),(Xa+1,Xb)和(Xb+1,N),
由于X軸上每前進一幀,只用到前兩列的累積距離,所以只需要三個列矢量A、B和C分別保存連續(xù)三列的累積距離,而不需保存整個距離矩陣。每前進一幀都對A、B、C進行更新,即用A和B的值求出C,再根據(jù)B和C的值求出下一列的累積矩陣放入A中,由此可以反復利用這三個矢量,一直前進到X軸上最后一列,最后一個求出矢量的第M個元素即為兩個模板動態(tài)規(guī)整的匹配距離。
高效DTW對識別的區(qū)域進行了限制,整個平面區(qū)域大小為M×N,匹配區(qū)域的大小為
公式(12)
若M=N=150,則限定區(qū)域內(nèi)的計算量只是傳統(tǒng)DTW算法計算量的24%;同時算法節(jié)省了空間,由原來的2個N×M矩陣,減少為3個M矢量,大大減少了需要的存儲空間,解決了普通DTW算法在存儲空間有限的嵌入式系統(tǒng)中難以實現(xiàn)的問題。
4. MATLAB實驗與分析
為了對算法的識別效果進行測試,設計了用于數(shù)字家庭控制系統(tǒng)的識別命令集,并基于Matlab構建了孤立詞語音識別系統(tǒng),對識別算法進行實驗和分析。該命令集包括語音命令100條,分別是如下幾類:
l 語音通話控制命令,例如,“撥打電話”,數(shù)字,人名;
l 音樂控制類,“打開音樂”、“減小音量”等;
l 門窗控制類,“關閉百葉窗”、“打開大門”等;
l 家庭電器控制類,“打開空調(diào)”、“打開收音機”等。
該系統(tǒng)使用設計的端點檢測技術、特征提取和模板匹配技術。語音采用頻率為8KHz,16位量化精度,預加重系數(shù)a=0.95,語音幀每幀 30ms,240點為一幀,幀移為80,窗函數(shù)采用Hamming 窗。LPC參數(shù)為10階,LPCC參數(shù)為16階。實驗人員為三名同學,兩男一女,分別用甲乙丙代表,實驗環(huán)境為辦公室環(huán)境。實驗平臺為Windows XP,Matlab 7.0,進行的各項實驗和數(shù)據(jù)分別如下:
(1)改進端點檢測實驗
針對于設計的端點檢測算法,得到改進前和改進后語音識別率的變化,數(shù)據(jù)見表1。其中,改進前和改進后所用的參考模板和測試模板數(shù)據(jù)相同。實驗的過程是,Matlab程序自動把50個測試模板逐個和100個參考模板進行匹配,找到測試模板所對應的語音命令。
表1 改進端點檢測前后的識別率
Table 1. the recognition ratio of before and after ameliorate endpointing detection
從數(shù)據(jù)可以看出,對端點檢測進行改進后,平均識別率從74%提高到82%,這是因為改進后的端點檢測能夠有效地區(qū)分噪音和語音,嚴格的把語音段提取出來。
(2)使用冗余參考模板實驗
對每個語音命令建立四個參考模板,其他同實驗(1),實驗數(shù)據(jù)見表2。
表2 使用冗余參考模板前后的識別率
Table 2. the recognition ratio of before and after use redundancy reference template
從實驗數(shù)據(jù)看出,使用冗余模板后,平均識別率由87.5%提高到95%,平均誤識率由12.5%下降到5%。所以,使用冗余參考模板有效的提高了識別性能。
(3)提高識別率的ADTW實驗
基于實驗(2),使用松弛起點終點法和改變局部判決路徑函數(shù)法對DTW進行改進,稱改進后的算法為ADTW,改進前后的兩種算法都采用一個詞條四個模板。實驗數(shù)據(jù)見表3,其中平均識別率為三個人的平均識別率。
表3 傳統(tǒng)DTW和ADTW識別率比較
Table 3. the recognition ratio of DTW and ADTW
從實驗數(shù)據(jù)可以看出,ADTW相對于傳統(tǒng)的DTW算法,平均識別率有了一定的提高,因為本文實現(xiàn)的系統(tǒng)采用了ADTW算法。該算法平均識別率為98%,基本滿足了語音識別片上系統(tǒng)的需要。
5. 總結(jié)
本文在研究了現(xiàn)有的語音識別算法和理論的基礎上,在應用中對雙門限端點檢測算法作了延長可容忍靜音的改進,在一定程度上提高了整個系統(tǒng)的識別率;特征提取技術采用了線性預測編碼LPC及其倒譜系數(shù)LPCC,對其計算過程進行了分析。從提高算法識別率和提高算法執(zhí)行效率兩個角度對DTW進行了改進和重新設計,提出了松弛起點終點和改進局部判決函數(shù)的ADTW算法,在實驗中獲得了很高的識別率。
參考文獻
[1] 孫樣娥,汪忠德.基于G.729算法的新型語音通信系統(tǒng)的實現(xiàn).微計算機信息[J],2005, 21-4:152-154
[2] 朱璇, 劉加, 劉潤生. 語音識別技術新熱點—語音識別專用芯片. 世界電子元器件[J], 2002:26-27.
[3] 趙念強,鮑可進,申屠浩.基于Soc單片機C8051F的碼頭供給監(jiān)控系統(tǒng). 微計算機信息[J],2005, 21-3:46-48.
[4] 楊行峻, 遲惠生. 語音信號數(shù)字處理[M]. 電子工業(yè)出版社, 1995.
[5] Itakura F. Minimum prediction residual applied to speech recognition. IEEE Transactions on Acoustics, Speech, and Signal Processing[J], 1975, 23:67-72.
[6] Bernd Burchard, Ronald Romer. A single chip phoneme based HMM speech recognition system for consumer applications IEEE2000[J].