基于片上系統(tǒng)SoC的孤立詞語音識別算法設(shè)計
1. 引言
本文引用地址:http://m.butianyuan.cn/article/190560.htm目前,嵌入式語音識別系統(tǒng)的實現(xiàn)主要通過單片機MCU和數(shù)字信號處理器DSP來實現(xiàn)[1]。但是單片機運算速度慢,處理能力不高;雖然DSP處理速度很快,但是產(chǎn)品的成本很高,電源能量消耗也很大。因此,為了滿足嵌入式交互系統(tǒng)的體積越來越小、功能越來越強的苛刻需求,語音識別片上系統(tǒng)SoC(System on Chip)應(yīng)運而生。
語音識別片上系統(tǒng)SoC本身就是一塊芯片,在單一芯片上集成了模擬語音模數(shù)轉(zhuǎn)換器ADC、數(shù)模轉(zhuǎn)換器DAC、信號采集和轉(zhuǎn)換、處理器、存儲器和I/O接口等,只要加上極少的電源就可以具有語音識別的功能,集成了聲音信息的采集、取樣、處理、分析和記憶。SoC具有片內(nèi)處理器和片內(nèi)總線,有著更靈活的應(yīng)用方式。它具有速度快,體積小,成本低,可擴展性強等優(yōu)點,有著廣泛的應(yīng)用前景,已經(jīng)成為語音識別技術(shù)應(yīng)用發(fā)展的一個重要方向[2-3]。研究和開發(fā)應(yīng)用于片上系統(tǒng)SoC芯片的語音識別算法有著非常重要的意義。
2. 孤立詞語音識別系統(tǒng)
孤立詞語音識別系統(tǒng)應(yīng)用于嵌入式控制領(lǐng)域,例如數(shù)字家庭控制、車載語音控制和智能語音可控玩具等。在訓(xùn)練階段,用戶將每一個詞依次說一遍,并將計算得到的每一個詞所對應(yīng)的特征矢量序列作為模板存入模板庫中。在識別階段,將輸入語音的特征矢量序列依次與模板庫中的每一模板進行相似度比較,將相似度最高者作為識別結(jié)果輸出。
3. 針對片上系統(tǒng)SOC的孤立詞語音識別算法設(shè)計
在SoC芯片中實現(xiàn)孤立詞語音識別系統(tǒng),就要根據(jù)語音識別片上系統(tǒng)的特點,來進行SoC的語音識別算法的選擇和設(shè)計。
首先是特征提取算法的選擇。MFCC算法考慮到了人的聽覺效果,能很好的表征語音信號,而且在噪聲環(huán)境下能取得很好的識別效果。而LPC系數(shù)主要是模擬人的發(fā)聲模型,對元音有較好的的描述能力,對輔音描述能力較差,抗噪聲性能也相對差一些。但是從算法的計算量來考慮,MFCC提取特征參數(shù)是LPCC 的10倍左右,通常在嵌入式系統(tǒng)下較難實現(xiàn)實時性。因此,選用LPCC算法。
模式匹配技術(shù)的選擇。隱馬爾柯夫模型HMM方法是用概率及統(tǒng)計學理論來對語音信號進行分析與處理的,適用于大詞匯量、非特定人的語音識別系統(tǒng)。該算法對系統(tǒng)資源的要求較多。而動態(tài)時間規(guī)整技術(shù)DTW采用模板匹配法進行相似度計算,是一個最為小巧的語音識別算法,系統(tǒng)開銷小,識別速度快,可有效節(jié)約系統(tǒng)資源,降低系統(tǒng)成本開支。由于嵌入式系統(tǒng)資源有限,語音命令識別系統(tǒng)所需要的詞匯量有限,所需識別的語音都是簡短的命令,模式匹配算法選擇DTW。
3.1 端點檢測算法設(shè)計
一個好的端點檢測算法可以在一定程度上提高系統(tǒng)的識別率。在雙門限端點檢測原理的基礎(chǔ)上,進行語音端點檢測算法的設(shè)計。為了提高端點檢測的精度,采用短時能量E和短時過零率ZCR。
語音采樣頻率為8KHz,量化精度為16位,數(shù)字PCM碼首先經(jīng)過預(yù)加重濾波器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
改進后,整個語音信號的端點檢測流程設(shè)計為四個階段:靜音、過渡段、語音段和語音結(jié)束。在靜音段,如果能量或過零率超越了低門限,就應(yīng)該開始標記起始點,進入過渡段。在過渡段中,由于參數(shù)的數(shù)值比較小,不能確信是否處于真正的語音段,因此只要兩個參數(shù)的數(shù)值都回落到低門限以下,就將當前狀態(tài)恢復(fù)到靜音狀態(tài)。而如果在過渡段中兩個參數(shù)中的任一個超過了高門限,就可以確信進入語音段。在語音段,如果兩個參數(shù)的數(shù)值降低到低門限以下,并且一直持續(xù)15幀,那么語音進入停止。如果兩個參數(shù)的數(shù)值降低到低門限以下,但是并沒有持續(xù)到 15幀,后續(xù)又有語音段越過低門限,那么認為語音還沒有結(jié)束。最后,如果檢測出的這段語音總長度小于可接受的最小的語音幀數(shù)(設(shè)為15幀),則認為是一段噪音而放棄。
采用改進后的端點檢測算法,對于單個漢字或多個漢字的語音命令均識別常。圖2為語音“開燈”的端點檢測圖(兩條紅線以內(nèi)的部分為檢測出來的語音部分)。
評論