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