張開生,趙小芬,王 澤,宋 帆
(陜西科技大學電氣與控制工程學院,西安 710021)
聲音是溝通的最直接方式,隨著信息科技的不斷發展,語音識別技術在各行各業的應用中扮演著越來越重要的角色[1-3],端點檢測技術是檢測輸入聲音信號的起始位置與結束位置,從某種程度上來說,端點檢測效果的好壞能直接影響到語音識別的成功與否[4-6]。針對端點檢測技術的研究,目前廣為使用的方法有雙門限檢測法、方差法、譜距離法、相關法等[7]。但是這些方法在復雜環境處于低信噪比下,檢測效果并不十分理想,甚至會出現檢測錯誤等情況,這顯然會對后序語音處理產生消極影響[8],針對此種現象,相關學者在傳統算法的基礎上作出改進。朱春利等[9]提出基于最小均方誤差(least mean square,LMS)減噪與改進的雙門限語音端點檢測方法,首先通過對輸入語音進行LMS減噪,然后將傳統的雙門限法作出改進并進行端點檢測,此方法實現起來較容易,但是在實際復雜噪聲環境下,檢測效果也不理想。劉玉珍等[10]提出基于頻譜方差的抗噪聲語音端點檢測算法,根據語音信號和噪聲信號頻譜的差異來進行端點的檢測,但是這種方法僅是在白噪聲下適用。董胡等[11]提出改進的能量譜熵端點檢測算法,此算法結合了貝葉斯信息準則和模糊C均值聚類算法,并對能量譜熵特征門限進行估計,最后采用雙門限算法進行端點檢測。此種算法雖然在低信噪比下能實現端點的檢測,但是檢測的準確率并不能滿足實際情況需求,且并未提及檢測效率的問題,實際場景中檢測效率也是必須要考慮的關鍵因素。
針對上述方法存在的問題,研究一種將總體平均經驗模態分解(ensemble empirical mode decomposition,EEMD)算法與一步式字典學習(one-stage dictionary learning,OS-DL)結合的方式聯合去噪,并將其用于端點檢測中。充分結合了EEMD算法平滑脈沖干擾異常事件的能力與OS-DL算法高效的字典訓練能力,將去噪后的語音信號通過均勻子帶頻帶方差法實現端點檢測。
EEMD算法在經驗模態分解( empirical mode decomposition,EMD)算法的基礎上進行了改進,由于EMD在分解信號得到本征模式分量(intrinsic mode function,IMF)時存在模態混合現象,這種現象導致了IMF分量不精確。EEMD算法正是解決了EMD算法存在的這個問題[12-14]。EEMD算法是通過信號極值點影響IMF,它的原理是引入白噪聲,并將其運用到被分析的信號中,正是利用白噪聲頻譜均勻分布的特性,將白噪聲與待分析信號疊加,這樣可以使待分析信號自適應的分布在一個適宜的參考尺度,由于噪聲具有零均值的特性,多次計算平均值之后就會使得噪聲相互抵消,最終得到的均值結果與原始信號作差的值與平均計算次數之間會呈現出反比例的關系。因此,最終的結果就可以以均值計算結果來表示。EEMD算法的具體流程如圖1所示。

圖1 EEMD算法流程Fig.1 EEMD algorithm flowchart
字典學習的主要思想是利用包含K個原子dK的字典矩陣D∈Rm×K,稀疏線性表示原樣本Y∈Rm×n(其中m表示樣本數,n表示樣本的屬性),即有Y=DX(理想情況),其數學描述為
(1)
式(1)中:X為稀疏編碼矩陣;Xi(i=1,2,…,K)為該矩陣中的行向量,代表字典矩陣的系數;T0為逼近誤差。對于系數的約束,OS-DL并未采用傳統的l0范數,從本質上來說,l0范數并不是一個真正的范數,它主要的功能是在一個向量中去衡量一個非0元素數量,從準確性上來講,由于得到l0范數的數學表達式并不容易,所以一般情況下,只是用它的優化式來解決問題,所以會存在一定的誤差;而OS-DL算法利用l1范數,解決了l0范數存在的這個弊端。并且相較于傳統的字典學習算法分為稀疏編碼和字典更新兩階段,OS-DL算法實現編碼與更新同步[15],在進行初始值系數矩陣設定的同時實現字典的更新,相較于廣泛使用的字典訓練K奇異值分解(K-singular value decomposition,K-SVD)算法來說,在效率上大大提升。
假設帶噪語音信號為x(n),利用EEMD算法對輸入信號x(n)進行分解,分解之后得到多個IMF,由于前兩階的IMF含有75%的噪聲分量,因此丟棄掉前兩階的IMF,相當于對輸入語音進行降噪處理,并且丟棄掉前兩階IMF可以減弱語音信號中的高頻分量,并不會影響對于后序端點的檢測。輸入語音信號時,由于各種原因,其中常會摻雜噪聲信號,而經過EEMD分解之后,得到分解出的語音信號相對來說較為純凈,因此分解之后的信號稀疏特性將會增強。然后利用OS-DL算法分別對純凈語音信號及噪聲語音信號進行訓練,得到聯合譜字典,再利用離散傅里葉變換(discrete Fourier transform,DFT)計算出相位譜和幅度譜,對其進行分析之后對幅度譜進行稀疏表示,得到系數矩陣后,重構語音信號頻譜,經過傅里葉逆變換得到降噪后的語音信號。
在頻帶方差的計算中,每幀數據長為N,經過快速傅里葉變換以后,在正頻域內的譜線就有(N/2+1)條。然后將這些DFT后幅值譜線Xi={Xi(1),Xi(2),…,Xi(N/2+1)}分割成q個子帶,于是就有每個子帶具有p=fix[(N/2+1)/q]條譜線(fix[·]表示取其整數部分),則構成的子帶為
(2)
令XXi={XXi(1),XXi(2),…,XXi(q)},則均值為
(3)
方差為
(4)
改進算法的主要思路是首先利用EEMD算法對輸入語音信號進行分解,以此得到多個IMF分量,并對其進行相關分析,去除噪聲分量,再通過OS-DL算法進行字典的訓練,得到純凈語音信號及噪聲信號,并將分離出的語音信號及噪聲信號進行稀疏表示,求得包含系數的矩陣,利用此系數矩陣對語音信號進行重新構建,新構建出的語音信號便是降噪后的語音信號,然后將消噪后的語音信號通過子帶頻帶方差法可以得到每幀均勻子帶分離的頻率方差值,在已知前導無話端的幀數后,求出相應的閾值,進而確定語音信號端點的位置。
(1)輸入語音信號x(n)(帶噪)。
(2)利用EEMD算法對x(n)進行分解。
(3)利用OS-DL算法進行字典訓練。
(4)稀疏表示出訓練出的語音信號和噪聲信號,并得到系數矩陣。
(7)計算每幀子帶分離的頻帶方差。
(8)根據頻域方差雙門限法進行端點的檢測。
改進算法的流程框圖如圖2所示。

圖2 改進算法流程框圖Fig.2 Improved algorithm flow diagram
本文算法是在Intel(R) Core(TM)i5-6200U CPU,主頻為2.30 GHz,GPU顯卡為AMD Radeon R5 M315以及4 GB內存配置的Windows7計算機上進行測試。由于本文算法是在語音控制垃圾分類背景下進行的研究,因此所選用的語音數據內容來源于《西安市生活垃圾管理辦法》中的相關垃圾種類。在MATLAB 2014軟件下進行的仿真實驗,其語音信號采樣頻率為8 000 Hz,語音格式為wav格式。為了驗證本文算法的準確性,對《西安市生活垃圾管理辦法》中所涉及到的30余種垃圾類型都作為語音輸入,如“瓜果皮核”“廢棄電池”等。分別由10名男生、10名女生以及10名兒童進行錄入,錄入語音均為標準普通話。每種垃圾類型對應的語音每人讀入1遍,共1 000余條語句。
為了檢測本文語音消噪算法的有效性,將本文消噪算法與目前常用的LMS自適應消噪算法、譜減消噪算法進行比較,得到圖3、圖4。其中圖3所示為輸入語音“廢棄電池”在5 dB時的語音消噪結果。圖4所示為輸入語音“廢棄電池”在0 dB時的語音消噪結果。可以看出,在信噪比較高的情況LMS自適應消噪算法、譜減消噪算法以及本文消噪算法都表現出了良好的降噪效果,但是在信噪比為0 dB時,相較于其他兩種算法,本文消噪算法表現更佳。

圖3 幾種不同語音消噪算法在5 dB時結果對比Fig.3 Comparison of the results of several different speech denoising algorithms at 5 dB

圖4 幾種不同語音消噪算法在0 dB時結果對比Fig.4 Comparison of the results of several different speech noise reduction algorithms at 0 dB
圖5所示為輸入語音“剩飯剩菜”分別在信噪比為5、0、-5 dB時本文算法的端點檢測結果,圖5中語音信號的起始位置用實線標記,語音信號結束位置用虛線標記。這里標記的是單個字的起始位置與結束位置。從圖6中可以看出,在信噪比下降的情況下,仍然能準確的檢測出語音信號端點。圖6所示為輸入語音為“廢棄電池”在信噪比為5、0、-5 dB時的檢測結果,同樣可以驗證本文算法的可靠性。

圖5 輸入語音“剩飯剩菜”在5、0、-5 dB時端點檢測結果Fig.5 Endpoint detection results of input voice “leftovers” at 5,0,-5 dB

圖6 輸入語音“廢棄電池”在5、0、-5 dB時端點檢測結果Fig.6 Endpoint detection results of input voice “waste battery” at 5,0,-5 dB
對實驗中所采用的30余種垃圾類型對應的輸入語音分別進行多次實驗,輸入語音類型分為男聲、女聲、童聲。并對端點檢測的準確率(準確率=檢測正確的幀數/總幀數)作以統計,隨機選取10組結果,如圖7所示。從圖7可以看出,輸入語音的變化,并不會引起端點檢測準確性的降低,在信噪比下降到0 dB以下,多數檢測準確率大于90%,平均檢測準確率達到85%以上。

圖7 不同輸入語音男聲、女聲、童聲檢測準確率統計Fig.7 Statistics of male,female and child detection accuracy of different input voices
為進一步驗證本文算法的可靠性,對傳統常用的端點檢測方法(包括雙門限法、能熵比法、譜距離法)的平均耗時進行統計,結果如表1所示。由于在對語音信號進行端點檢測之前,首先進行消噪處理,去除噪聲的干擾且OS-DL算法將稀疏編碼與更新同步,因此本文改進算法在效率上得到大幅度提高。

表1 各個算法平均耗時統計Table 1 Statistics of average time consumption of each algorithm
不同噪聲下各個算法的平均檢測準確率如圖8所示,選取noisex-92噪聲庫中的白噪聲、粉紅噪聲、餐廳噪聲及工廠噪聲在不同信噪比SNR下各個算法的準確率進行統計,從圖8可以看出在信噪比為5 dB以上時,各個算法的檢測準確率都接近80%,其中本文算法更是達到了90%以上的檢測準確率,而在信噪比為-5 dB以下,傳統算法幾乎失效,而本文算法無論是在高信噪比還是低信噪比下,其準確率最低達到85%,多數在90%以上。

圖8 不同噪聲下各種算法檢測準確率比較Fig.8 Comparison of detection accuracy of various algorithms under different noises
對基于EEMD和OS-DL聯合去噪的語音端點檢測算法進行了相關研究,首先利用EEMD算法對含噪語音信號進行分解,并得到本征模式分量,然后進行相關分析后,去除噪聲分量,再通過OS-DL算法進行字典的訓練,得到純凈語音信號及噪聲信號,并將分離出的語音信號及噪聲信號進行稀疏表示,并根據獲得的系數矩陣重構出語音信號,重構出的語音信號就是消噪后的語音信號,然后將消噪后的語音信號通過子帶頻帶方差法可以得到每幀均勻子帶分離的頻率方差值,在已知前導無話端的幀數后,求出相應的閾值,進而確定語音信號端點的位置。實驗結果表明,本文改進算法在信噪比下降到-10 dB以下時仍然具有85%以上的檢測準確率。由于OS-DL算法相較于傳統的字典算法,訓練和重構是同步的,因此對于效率增強方面其效果是很明顯的。其檢測效率縮短至傳統算法的近1/3。并且在各種類型噪聲及不同輸入語音下仍然具有較高的準確率,顯示出本文改進算法較強的魯棒性。并為語音識別垃圾分類提供了創新思路。