路青起,白燕燕
(西安工業大學電子信息工程學院,陜西西安 710032)
端點檢測是語音信號處理中的一個基本問題,其目的是從包含語音的一段信號中確定出語音的起點及結束點。有效的端點檢測不僅能使處理時間減到最少,而且能抑制無聲段的噪聲干擾,提高語音信號質量。有學者用一個多話者的數字語音識別系統做實驗。首先對所有記錄的語音用手工找出準確的端點,得到辨識率;然后逐幀加大端點檢測的誤差,在每次加大誤差的同時得到識別率。結果表明,端點檢測準確時識別率為93%的系統,當端點檢測誤差在±60 ms時,識別率降低了3%;在±90 ms時,降低了10%;而當誤差進一步加大時,識別率急劇下降[1]。語音端點檢測的成敗,直接影響著后續工作的正確率乃至整個語音識別系統的成敗。
端點檢測的常用方法有:能量閾值、基音檢測、頻譜分析、倒譜分析及 LPC(Linear Prediction Coefficients)預測殘差等。其中基于能量和過零率的雙門限判決法最為常用。在許多語音信號處理任務中需要判斷,一段輸入信號中哪些是語音段,哪些是無聲段,哪些是噪聲,哪些是語音。在一些語音識別或低速語音編解碼器應用中,對于已經判別為語音段的部分,還需進一步判斷清音和濁音。這些問題可以稱為有聲或無聲判決,以及更細致的無聲(S)、清音(U)、濁音(V)判決[2]。能夠實現這些判決的依據在于,不同性質語音的各種短時參數具有不同的概率密度函數,以及相鄰的若干幀語音具有一致的語音特性,不會在無聲,清音和濁音之間隨意跳變。文章比較了利用短時能量和短時平均過零率進行端點檢測的方法,并運用雙門限兩級判決法在Matlab中。
語音信號的能量隨時間變化比較明顯,一般清音部分的能量比濁音部分的能量小。語音實現了端點檢測的編程和仿真。
信號的短時能量分析給出了反應這些幅度變化的一個合適的描述方法。對于信號x(n),短時能量的定義如下

式(1)中,h(n)=ω2(n),En表示在信號的第n個點開始加窗函數時的短時能量。可以看出,短時能量可以看作語音信號的平方經過一個線性濾波器的輸出,該線性濾波器的單位沖擊響應為h(n),如圖1所示。

圖1 語音信號的短時平均能量實現框圖
沖激響應h(n)的選擇,或者說窗函數的選擇決定了短時能量表示方法的特點。為反應窗函數選擇對短時能量的影響,假設式中的h(n)非常長,且為恒定幅度,那么En隨時間的變化將很小,這樣的窗就等效為很窄的低通濾波器。h(n)對x2(n)的平滑作用較顯著,無法反映語音的時變特性。反之,若h(n)序列長度N過小,那么等效窗不能提供足夠的平滑,以至于語音振幅瞬時變化的許多細節仍被保留,從而看不出振幅包絡的變化規律。通常N的選擇與語音的基音周期相聯系,一般要求窗長為幾個基音周期的數量級。
短時能量主要用于區分清音和濁音,因為濁音比清音的能量大得多;其次可以用短時能量對有聲段和無聲段進行判定,對聲母和韻母分界,以及對連字分界等。在語音識別系統中,短時能量一般也作為特征中的一維參數來表示語音信號能量的大小和超音段信息[1]。
短時能量的一個主要問題是En對信號電平值過于敏感。由于需要對信號進行平方運算,在定點實現時容易產生溢出。解決這個問題的方法是采用短時平均幅度來表示能量的變化,其公式是

與短時能量相比,短時平均幅度相當于用絕對值之和代替了平方和,簡化了運算,窗長N對平均幅度函數的影響與短時能量的分析結論是一致的。但平均幅度函數沒有平方運算,因此其動態范圍比短時能量小,接近于標準能量計算的動態范圍的平方根。圖2是“西安工業大學”的波形圖。

圖2 “西安工業大學”波形圖
圖3是語音“西安工業大學”的短時能量分析圖,圖4是“西安工業大學”的短時平均幅度的分析圖。
從圖3和圖4中可以看到,盡管短時平均幅度也可用于區分清音和濁音,無聲和有聲,但二者之間的幅度差就不如短時能量那么明顯。

短時平均過零率是語音信號時域分析中的一種特征參數。它是指每幀內信號通過零值的次數。對于連續語音信號,可以考察其實域波形通過時間軸的情況。對于離散信號,短時平均過零率實際就是信號采樣點符號變化的次數。短時平均過零率仍可以在一定程度上反映其頻譜性質,可以通過短時平均過零率獲得譜特性的一種粗略估計。短時平均過零率的公式為

其中,sgn是符號函數即

圖5給出了短時平均過零率的計算過程。

圖5 短時平均過零率的計算
首先對語音信號序列x(n)進行成對處理,檢查是否有過零現象,若有符號變化,則表示有一次過零現象;然后進行一階差分計算,取絕對值;最后進行低通濾波。
短時平均過零率可以在一定程度上反映頻率的高低,因此在濁音段,一般具有較低的過零率,而在清音段具有較高的過零率,可用于初步判斷清濁音。
在矩形窗條件下,式可以簡化為

圖6和圖7均是“西安工業大學”語音波形圖與短時平均過零率。

從圖中可以看出,在背景噪聲較小的情況下,短時能量較準確,但當背景噪聲較大時,短時平均過零率可以獲得較好的檢測效果。有些發音僅用短時能量或短時平均過零率來判斷起點和終點比較困難,由于短時平均幅度更適合檢測濁音,而短時過零率更適合檢測清音,因此將短時平均幅度和短時平均過零率相結合進行端點檢測是一種有效的端點檢測方法。
在開始進行端點檢測前,首先為短時能量和過零率分別確定兩個門限。一個是較低的門限,其數值較小,對信號的變化較敏感,很容易被超過。另一個是比較高的門限,數值較大,信號必須達到一定的強度,該門限才可能被超過。
基于Matlab程序實現能量與過零率的端點檢測算法步驟如下:
(1)語音信號x(n)進行分幀處理,每一幀記為,n=1,2,…,N,n為離散語音信號時間序列,N為幀長,i表示幀數。
(2)計算每一幀語音的短時能量,得到語音的短時幀能量

(3)計算每一幀語音的過零率,得到短時過零率

其中

(4)考察語音的平均能量設置一個較高的門限T1,用以確定語音開始,然后再根據背景噪聲的平均能量確定一個較低的門限T2,用以確定第一級中的語音結束點,T2=α1EN,EN為噪聲段能量的平均值,完成第一級判決。第二級判決同樣根據背景噪聲的平均過零率ZN,設置一個門限T3,用于判斷語音前端的清音和后端的尾音。α1,β1為經過大量實驗得到的經驗值。圖8是語音“西安工業大學”的端點檢測圖。

圖8 語音“西安工業大學”的端點檢測
圖8可以看到檢測結果:將短時平均能量和短時平均過零率結合,進行端點檢測,可以很好地檢測語音的開始和結束。雖然這種方法可以有效地區分語音信號中的清音和噪聲,但它難區分語音信號中的濁音和噪聲,也存在檢測時漏掉某些音素這一問題。因此對于端點檢測仍需進一步研究。
針對聲紋識別系統所作的端點檢測前端處理,運用Matlab實現了雙門限法端點檢測的編程和仿真,仿真結果顯示,端點檢測準確識別率為93%。
[1]趙力.語音信號處理[M].北京:機械工業出版社,2010.
[2]韓紀慶,張磊,鄭鐵然.語音信號處理[M].北京:清華大學出版社,2004.
[3]何強,何英.Matlab擴展編程[M].北京:清華大學出版社,2002.
[4]張雪英.數字信號處理及Matlab仿真[M].北京:電子工業出版社,2010.
[5]尹巧萍,吳海寧,趙力.含噪語音信號端點檢測方法的研究[C].成都:2008'促進中西部發展聲學學術交流會論文集,2008.
[6]劉建,鄭方,吳文虎.基于幅度差平方和函數的基音周期提取算法[J].清華大學學報:自然科學版,2006,46(1):74-77.
[7]張仁志,崔慧娟.基于短時能量的語音端點檢測算法研究[J].電聲技術,2005(7):52 -59.
[8]陳艷.改進的獨立分量分析在語音分離中的應用[J].電子科技,2009,22(12):87-91.