宮曉梅
摘要本文主要研究由人聲無線控制小車的動作與狀態(tài),當收到預(yù)置指令后,自行分辨聲音并自動執(zhí)行相應(yīng)預(yù)設(shè)定動作,來實現(xiàn)人聲控制小車的目的。
關(guān)鍵詞聲音控制語音識別 DTW方法
本文所研究的聲音控制自動化小車的具體內(nèi)容是:采用無線麥克,應(yīng)用無線信號處理技術(shù),基于嵌入式芯片,制作可辨別人聲,并執(zhí)行相應(yīng)指令的車子,實現(xiàn)人聲控制車子前、后、左、右、啟動、停止、加速等等指令。具體功能實現(xiàn)如下。
1聲音的采集
將聲音信號送入計算機,本文利用了聲卡錄音的低層操作技術(shù),即對winmm.lib進行API調(diào)用。具體編程時這一部分被寫在一個類中(Soundin類)。
在構(gòu)造函數(shù)中設(shè)定包括最大采樣率(11025),數(shù)據(jù)緩存(作為程序一次性讀入的數(shù)據(jù),2048),聲卡本身所帶的一些影響采樣數(shù)據(jù)等的各種參數(shù);
調(diào)用API函數(shù)waveInGetNumDevs(返回UNIT,參數(shù)為空)檢察并打開聲音輸入設(shè)備,即聲卡;并進而使用waveInGetDevCaps得到聲卡的容量(在waveInCaps中存有該數(shù)據(jù),對其進行地址引用,從DWORD dwFormats得到最大采樣率、聲道數(shù)和采樣位);
創(chuàng)建一個叫WaveInThreadEvent的事件對象,并賦予一個Handle,叫m_WaveInEvent,開始利用線程指針m_WaveInThread調(diào)用自定義的線程WaveInThreadProc;
對結(jié)構(gòu)WAVEFORMATEX中WaveInOpen開始提供錄音設(shè)備。注意設(shè)備句柄的得到是通過對HWAVEIN 型數(shù)據(jù)m_WaveIn的引用。
由于通過這種方式進行錄音的文件格式是.wav,所以要先設(shè)置錄音長度,以及對頭文件進行一些設(shè)置:包括buffer的地址為InputBuffer的初始地址,大小為錄音長度的兩倍,類型。使用waveInPrepareHeader為錄音設(shè)備準備buffer。然后使用waveInAddBuffer函數(shù)為錄音設(shè)備送出一個輸入buffer。最后使用waveInStart(m_WaveIn)打開設(shè)備。
2聲音的預(yù)處理:
聲音信息的預(yù)處理主要包括音頭和音尾的判斷,聲音的預(yù)加重,分幀處理和窗化處理。
1)音頭音尾的判斷與提?。?/p>
對聲音信號的提取,主就是確定音頭、音尾的位置。常用的方法有過零率和短時距能量等幾種。本文就采用了過零率這個方法。首先對噪聲取樣,從這些噪聲樣本中得到噪聲的上下限,將實時信號與這個門限進行比較,得到過零率。
利用過零率的大小來判斷是否有聲音信號進入,若
( 為預(yù)設(shè)的過零率值),則表示有聲音信號進入,就找到了音頭。在找到音頭的情況下,若 ,則表示聲音結(jié)束,也就找到了音尾。音頭和音尾之間的部分就是本文用以作為識別用的聲音指令信號了。由于一般情況下人們所發(fā)出的單音都有一定的時間長度,故爾再對所得到的聲音指令信號做一次篩選,若得到的聲音信號的長度小于預(yù)設(shè)值,就認為不是本文所要的聲音信號,舍棄之。實驗表明,利用過零率和預(yù)設(shè)長度相結(jié)合起來提取聲音指令信號的方法很有效的。
2)語音信號的預(yù)加重:
本文所采用的預(yù)加重的方法是較為常用的網(wǎng)絡(luò):
傳遞函數(shù)為 ;得到的信號為:
預(yù)加重的目的是為了補償語音譜的固有衰落,消除唇輻射的影響。
經(jīng)過實驗發(fā)現(xiàn),預(yù)加重對以后數(shù)據(jù)的處理有很大的影響。
3)分幀處理
在計算各個系數(shù)之前要先將語音信號作分幀處理。語音信號是瞬時變化的,但在10~20ms內(nèi)是相對穩(wěn)定的,而本文設(shè)定的采樣頻率為11025所以本文對預(yù)處理后的語音信號S1(n)以300點為一幀進行處理,幀移為100個采樣點。
4)窗化處理
為了避免矩形窗化時對LPC系數(shù)在端點的誤差,本文采用了漢明窗函數(shù)來進行窗化。即:
其中:
3語音數(shù)據(jù)的特征提取
語音信號的特征有多種度量標準,基于比賽的各種要求選用比較有效的倒譜特征。
倒譜特征的實質(zhì)就是將信號作適當?shù)耐瑧B(tài)濾波,將信號中的卷積關(guān)系變?yōu)槌朔e關(guān)系,隨之作對數(shù)處理使之化為可分離的相加成分。
本文所選取的計算倒譜的方法是利用信號的LPC系數(shù)來計算其倒譜系數(shù)。
語音信號經(jīng)過預(yù)處理,它的每個樣值均可由過去若干個樣值的線性組合來逼近,同時可以采用使實際語音抽樣與線性預(yù)測抽樣之間的均方差最小的方式,來解出一組預(yù)測的系數(shù)。這就是LPC所提取出來的信號的初始特征。綜合考慮識別誤差和識別速度的影響,本文在計算LPC 時,Q值取為8,而在計算倒譜時P值取為12。
4動態(tài)時間歸整DTW 方法的實現(xiàn)與改進
DTW主要是應(yīng)用在孤立詞識別的算法,用來識別一些特定的指令比較好用,這個算法是基于DP(動態(tài)規(guī)劃)的算法基礎(chǔ)上發(fā)展而來的。由于本文預(yù)先設(shè)定是進行孤立字控制,所以本文選取了簡單易行的動態(tài)時間歸整DTW方法。
同一個人在發(fā)同一個音的總體和瞬時速度都常會在一定的范圍內(nèi)所變動,所以本文希望建立待識別樣和各模板時間軸的一種變換關(guān)系,應(yīng)用于識別系統(tǒng)中來消除它們作匹配時由于相應(yīng)時間上的差異所造成的同類音距離偏大的現(xiàn)象。
由于聲控過程中對語音識別速度的要求是很高的,而DTW是識別過程中時間消耗的主要部分,本文的創(chuàng)新之處在于聲音控制部分,擁有低延遲,多人語音兼容,能夠?qū)崿F(xiàn)95%以上的聲音指令,可擴展性非常廣。
參考文獻
[1]張曉林,崔迎煒.嵌入式系統(tǒng)設(shè)計與實踐[M].北京:北京航空航天大學(xué)出版社,2006
[2]王炳錫,屈丹.實用語音識別基礎(chǔ)北京國防工業(yè)出版社出版,2005