蔣學仕
(中國西南電子技術研究所,成都 610036)
語音端點檢測是用來區(qū)分語音與非語音的一種技術,在語音通信、語音識別、語音編碼等方面都有重要作用。準確的語音端點檢測技術既可以提高語音通信系統(tǒng)的傳輸效率,避免傳輸非語音數據造成的帶寬與功率的浪費,也可以在語音識別、語音編碼中提高算法對語音特征的提取效率。
現有的語音端點檢測算法主要分為基于特征參數的檢測算法、基于統(tǒng)計模型的檢測算法、基于神經網絡的檢測算法?;谔卣鲄档亩它c檢測算法由于不用建立模型,不需要大量數據進行訓練,具有運算量與復雜度較低等優(yōu)勢,應用范圍更為廣泛。常用的基于特征參數的語音端點檢測算法[1-2],隨著信噪比的降低,提取的語音特征參數準確度逐漸惡化,檢測性能下降。譜熵[3-4]由于對語音幅值不敏感,只與語音信號與噪聲信號在頻帶上的分布差異與能量占比有關,作為特征參數,對噪聲具有一定魯棒性。但在低信噪比下,由于噪聲對譜線的損傷,譜熵的準確度開始下降。文獻[5]提出在譜熵計算時引入正常量 K 到能量概率分布公式中,得到改進的子帶能量概率分布密度公式,提升譜熵的性能;文獻[6]采用加權系數與丟棄損傷子帶的方式來進一步改善譜熵的魯棒性。但以上方法比較粗略,低信噪比下性能提升有限。文獻[7]通過結合語音短時能量的凸性與子帶譜熵的凹性,構造出了魯棒性更好的能量熵。在能量熵算法的基礎上,文獻[8]對短時能量求解對數,平衡不同幅度信號下短時能量差異過大的問題。文獻[9]采用中值濾波來緩解能熵比曲線不平滑的情況。文獻[10]則將改進子帶能量概率公式、對數能量特征值、中值濾波進行了結合,提出了改進的子帶能熵比。
綜上所述,現有基于能量熵的端點檢測改進工作并未對噪聲這一導致短時能量、子帶譜熵性能下降的直接原因給予準確的分析與處理,所以現有改進措施對噪聲的適應性較差,低信噪比下端點檢測性能提升有限。另外,在端點檢測算法中,判決門限的抗噪性能也至關重要,但現有文獻對判決門限的研究往往不夠充分。
針對上述問題,本文提出利用噪聲估計值來剔除短時能量中的噪聲,提升短時能量的凸性;計算語音存在概率作為加權系數引入能量概率分布公式,提升語音段子帶譜熵的凹性,然后將凸、凹性得到增強的短時能量與子帶譜熵結合,構造出魯棒性更好的改進能量熵;得益于對噪聲的準確估計,本文進一步構造出具備較好抗噪性能的動態(tài)門限,并給出基于改進能量熵與動態(tài)判決門限的實時端點檢測策略。本文利用噪聲估計值與語音存在概率對短時能量、子帶譜熵、判決門限都進行了優(yōu)化,增強了特征值與判決門限在低信噪比下的抗噪聲性能,而且運算復雜度低,適合實時處理。
傳統(tǒng)能量熵算法[7]的基本思路是計算短時能量與子帶譜熵兩個特征值,然后再將兩者結合,構造出能量熵。
語音屬于時變信號,但在幾十毫秒的短時范圍內可以按穩(wěn)態(tài)處理,考慮到幀間語音特征參數的平穩(wěn)性,還需要在幀間重疊一部分數據。對語音信號S(n)按N個點分幀,幀間重疊50%。分幀后的信號為S(n,l),l代表幀數,n(1≤n≤N)代表幀內的點。對S(n,l)加漢寧窗h(n)做預加重處理,求其短時傅里葉變換,得第l幀的頻譜函數為
(1)
在頻域求得短時能量為
(2)
考慮到實數信號頻譜的對稱性,為了減少運算量,這里只取一半的點。短時能量計算簡單,高信噪比下,靠語音段與非語音段的能量差異,通過設置固定門限,能夠實現語音端點檢測。
對語音信號S(n)一樣的分幀加窗快速傅里葉變換(Fast Fourier Transformation,FFT)處理,得到第l幀的頻譜函數Y(k,l),將4個譜線組成一個子帶,一幀分成Nb個子帶,計算得到得子帶能量為
(3)
子帶能量概率為
(4)
子帶譜熵為
(5)
因為語音的頻譜呈帶狀特性,功率譜分布集中,子帶譜熵較小,而非語音的功率譜在各頻段的分布相對分散,子帶譜熵較大,因此可以通過計算子帶譜熵來對語音段與非語音段進行區(qū)分。
隨著噪聲的增大,計算的短時能量會隨著噪聲能量的變化而變化,語音段與非語音段能量上的差異變小,導致短時能量性能下降。另外,隨著噪聲增大,語音段頻帶內總能量也隨著增大,公式(4)計算的語音能量概率值下降,導致譜熵性能下降。
2.2.1 噪聲能量初估計
采用基于最小時間遞歸平均算法進行噪聲譜估計,首先對短時傅里葉變換的幅度的平方分別進行時頻域平滑,得到帶噪語音的短時局部能量譜值。
用漢寧窗進行相鄰頻點間的平均:
(6)
式中:b(i)為局部窗函數,用于在相鄰頻點間求平均,窗長最小取3;|Y(k-i,l)|為第l幀的第k-i個頻點的幅度譜。然后用平滑因子在時域進行一階平滑:
S(k,l)=asS(k,l-1)+(1-as)Sf(k,l)。
(7)
式中:S(k,l)為第l幀第k頻點的短時局部能量譜;as為譜平滑因子,取值應接近于1,當出現局部突變點時,S(k,l)取值依靠權重較大的前一時刻S(k,l-1),緩解短時局部能量譜的突變。搜索窗長為L的窗內局部能量譜最小值作為純噪聲能量初步估計值。為了覆蓋一個完整音節(jié),L的長度一般為500~1 500 ms。該搜索窗為滑動搜索窗,滑窗間隔為n(n Smin(k,l′)=min{S(k,l′)|l-L+1≤l′≤l}。 (8) 2.2.2 根據門限判決更新噪聲能量 求能量譜值與局部最小值的比值: Sr(k,l)=S(k,l)/Smin(k,l′)。 (9) 將比值與設定的門限δ進行比較。δ作為能量比值的門限,對噪聲類型和環(huán)境不敏感,只與設定的信噪比有關。如果Sr(k,l)小于門限δ,則認為此時頻帶上不包含語音能量,可以更新噪聲,得到一個控制因子: (10) 繼續(xù)利用時域平滑因子αp、αd與控制因子I(k,l)進行平滑,首先得到 p(k,l)=αpp(k,l-1)+(1-αp)I(k,l)。 (11) 然后再進一步平滑得到噪聲估計的更新因子 (12) (13) 式中:Y(k,l-1)為公式(1)計算的頻譜函數。 2.2.3 修正短時能量 利用噪聲能量估計值修正短時能量,將帶噪語音中的噪聲能量剔除,得到噪聲估計修正的短時能量: (14) 對一段信噪比0 dB的帶噪語音分別計算傳統(tǒng)短時能量與噪聲估計修正的短時能量,如圖1所示,傳統(tǒng)短時能量值隨著噪聲的增大而抬高,固定檢測門限失效,檢測門限設置變得困難。噪聲估計修正的短時能量由于已將估計的噪聲能量剔除,受噪聲的影響小,固定檢測門限仍然適用,低信噪比下魯棒性更好。 圖1 噪聲估計修正的短時能量 2.3.1 求解先驗信噪比 采用基于先驗信噪比時頻域分布特性的局部語音存在概率與全局語音存在概率兩個參數來計算語音存在概率。首先基于噪聲估計值,先求得后驗信噪比 (15) 式中:λd(k,l)是噪聲估計值,|Y(k,l)|是帶噪語音幅度譜。再用α對其進行平滑,為了緩解短時局部突變,α取值應接近于1,得到先驗信噪比 ξ(k,l)=αξ(k,l-1)+(1-α)max(γ(k,l)-1,0)。 (16) 2.3.2 求解語音存在概率 利用β對先驗信噪比做平滑,得到先驗信噪比的遞歸平均值ψ(k,l): ψ(k,l)=βψ(k,l-1)+(1-β)ξ(k,l)。 (17) 再利用先驗信噪比的遞歸平均值ψ(k,l),并結合頻域局部窗和全局窗來計算局部以及全局遞歸先驗信噪比 (18) 式中:hη(i)為漢寧窗,窗長η可以取不同值,窗長小代表局部,窗長大代表全局。求得對應ψη(k,l)后,根據以下不等式,得到全局與局部語音存在概率: (19) 式中:ψmin和ψmax是經驗值,其作用是作為門限,盡可能地在保留弱語音成分的同時削弱噪聲,其值分別為0.1(-10 dB)和0.8(-1 dB)。 聯立局部與全局語音存在概率,得到最終的語音存在概率: prob(k,l)=plocal(k,l)pglobal(k,l),prob(k,l)∈[0,1], (20) 即只有當局部語音與全局語音都同時存在時語音才存在。 圖2的(a)、(b)、(c)分別是一段信噪比5 dB的帶噪語音時域圖、語譜圖、計算的語音存在概率分布圖。可以看到圖(b)語譜圖中呈現帶狀特性的就是語音的頻帶,其對應的時間與頻帶映射到圖(c)語音存在概率分布圖上,語音概率基本都接近1,而非語音部分對應到圖(c)語音存在概率分布圖上,語音概率基本都接近0。計算的語音存在概率能夠比較精準地反映語音在時域與頻域的真實分布情況。 圖2 語音存在概率分布 2.3.3 語音存在概率加權的子帶譜熵 語音存在概率是對每幀每個頻點上語音概率大小的估算,將語音存在概率作為加權系數與計算的幅度譜平方相乘,既保留了頻帶中語音頻點的能量,又削弱了噪聲頻點的能量,減輕了噪聲對語音段能量概率分布的影響,提升了譜熵的抗噪性能。 將語音存在概率作為加權系數與幅度譜的平方相乘,得到語音存在概率加權的幅度譜平方 Yenergy_p(k,l)=prob(k,l)|Y(k,l)|2,1≤k≤N/2。 (21) 因為子帶能量既能降低噪聲對單一譜線的損傷,也能降低單一譜線語音存在概率出現偏差的影響,所以對加權后的幅度譜平方求子帶能量: (22) 語音存在概率加權的子帶能量概率: (23) 語音存在概率加權的子帶譜熵: (24) 如圖3所示,對一段信噪比0 dB的語音分別計算傳統(tǒng)子帶譜熵與語音存在概率加權的子帶譜熵。語音存在概率加權的子帶譜熵在非語音段的大小與傳統(tǒng)子帶譜熵基本保持一致,而在所有的語音段,加權的子帶譜熵計算的譜熵值更小,凸性更好,即加權的子帶譜熵在低信噪比下語音與非語音的區(qū)分度更高,準確度更好。 圖3 優(yōu)化的子帶譜熵 由圖1可知,經過噪聲估計修正后的短時能量在非語音段比較平,在語音段向上凸起;又由圖3可知語音存在概率加權的子帶譜熵在非語音段比較平,而在語音段向下凹陷,將兩者聯立計算,可以進一步放大語音段與非語音段的差異,增加語音段與非語音段的區(qū)分度,使得端點檢測更容易。 聯立修正后的短時能量與語音存在概率加權的子帶譜熵得到改進能量熵 (25) 式中:Ei(l)為噪聲估計修正的短時能量,Hb_p(l)為語音存在概率加權的子帶譜熵。 相比現有能量熵算法在一次語音端點檢測中只能利用前導無話段或者噪聲幀進行噪聲能量估計,進而計算門限,本文算法首先對前導無話段功率求平均,作為噪聲初始值,然后在語音段與非語音段一直按照本文所提方法繼續(xù)進行噪聲估計,保持對噪聲的跟蹤,適應噪聲的非平穩(wěn)變化,進而保證計算的動態(tài)門限的適應性。 聯立噪聲能量估計值與語音存在概率加權的子帶譜熵得到自適應噪聲變化的動態(tài)門限 (26) 在非語音段,Ei(l)=λ(l)-λd(l),λ(l)代表實際的噪聲能量值,顯然此時噪聲估計值λd(l)應該大于修正后的短時能量值Ei(l),所以Ts(l)>Ei(l);在語音段,Ei(l)=S(l)+λ(l)-λd(l),S(l)代表實際的語音能量值,此時除非語音處于極低的負信噪比下,否則噪聲估計值λd(l)應該小于修正后的短時能量值Ei(l),所以Ts(l) 本文的端點檢測策略,能夠按幀對語音進行實時的處理,即根據每幀的計算結果更新參數,更新門限,并對當前輸入幀是否為語音給出實時的判決。算法實現流程圖如圖4所示。 圖4 算法流程圖 流程具體實現過程如下: Step1 對輸入信號進行分幀加窗,以及短時傅里葉變換得到頻譜信號。 Step2 對每一幀頻譜信號進行噪聲估計。 Step3 根據噪聲估計值計算語音存在概率。 Step4 根據噪聲估計值與頻譜信號計算噪聲估計修正的短時能量。 Step5 根據語音存在概率與頻譜信號計算語音存在概率加權的子帶譜熵。 Step6 求得改進能量熵,求得自適應動態(tài)門限。 Step7 將改進能量熵與動態(tài)門限逐幀進行比較,為了防止突發(fā)的非平穩(wěn)噪聲造成的干擾,連續(xù)3幀改進能量熵大于門限時判定這些幀為語音幀,這3幀中的第1幀判定為語音的起點否則為噪聲幀。同時為了避免語音間隙不必要的頻繁切換,在檢測到語音后如果連續(xù)3幀改進能量熵比小于門限值則判定為非語音幀,否則仍然認為是語音幀。 能量熵算法的運算量主要集中在對語音數據分幀加窗后的FFT變換、譜能量求和與能量概率之間的運算。本文的改進能量熵算法雖然增加了噪聲估計與語音存在概率計算,但以上運算可以與譜熵運算共用FFT變換,相比傳統(tǒng)能量熵算法,改進能量熵算法額外增加的運算量并不大。 在TI的定點DSP芯片TMS320C64xx上分別實現文獻[7]傳統(tǒng)能量熵算法,文獻[10]改進子帶能熵比與本文的改進能量熵算法,運算量與存儲量見統(tǒng)計表1。文獻[7]的傳統(tǒng)能量熵算法需要的運算量與存儲量最小;文獻[10]的改進子帶能熵比算法需要把短時能量特征值轉換為對數,而且增加了中值濾波,運算量與存儲量居中;本文改進能量熵算法雖然在運算量與存儲量上都有所增加,但相對嵌入式處理器幾百兆的時鐘頻率與幾十兆的片內RAM來說,算法復雜度基本屬于同一個量級。 表1 算法運算量與存儲量 仿真使用TIMIT語音庫中100條連續(xù)語音作為純凈語音樣本,采樣頻率8 kHz。加噪數據使用Noisex-92標準噪聲庫,分別添加白噪聲、汽車噪聲、人嘈雜噪聲至純凈語音樣本中,形成5 dB、0 dB的含噪語信號各300條。 計算傳統(tǒng)能量熵[7]、改進子帶能熵比[10]與本文的改進能量熵,歸一化處理后比較以上特征值對語音與非語音的區(qū)分度。如圖5所示,在信噪比5 dB、0 dB的平穩(wěn)白噪聲環(huán)境下,傳統(tǒng)能量熵[7]對語音與非語音有一定的區(qū)分度,但是隨著信噪比的降低,部分語音的特征值變得愈發(fā)不明顯;改進子帶能熵比[10]在計算短時能量時采用了對數能量特征值,緩解了能量差異的影響,所以各語音段的子帶能熵值差異更小,中值濾波處理也使得子帶能熵值的曲線更平滑,但除此之外改進子帶能熵比的區(qū)分度并沒有得到特別大的改善;本文算法按照2.2節(jié)和2.3節(jié)對短時能量值與子帶譜熵中的噪聲進行了優(yōu)化處理,由此構造的改進能量熵受噪聲影響更小,在非語音段更低更平穩(wěn),在語音段更高更突出,語音與非語音的區(qū)分度更好。 圖5 白噪聲下特征值區(qū)分度對比 如圖6和圖7所示,在信噪比5 dB、0 dB的汽車噪聲和人嘈雜噪聲等非平穩(wěn)噪聲環(huán)境下,改進子帶能熵比相比傳統(tǒng)能量熵,區(qū)分度優(yōu)勢并不明顯,受噪聲影響,兩者都出現非語音段計算的特征值超過語音段的值,以及部分語音段的特征值不明顯等嚴重影響端點檢測準確性的情況,而本算法計算的特征值在非語音段依然比較平穩(wěn),語音段也未受明顯影響,語音與非語音的區(qū)分度更好,算法性能受噪聲影響更小。 圖6 汽車噪聲下特征值區(qū)分度對比 圖7 人嘈雜噪聲下特征值區(qū)分度對比 圖8所示是一段帶噪語音分別在5 dB、0 dB時歸一化后的改進能量熵與動態(tài)門限值,可以看到動態(tài)門限值能跟隨噪聲水平的變化而變化,具備與能量熵一樣的魯棒性。 圖8 動態(tài)門限 對添加白噪聲、汽車噪聲、人嘈雜噪聲信噪比5 dB、0 dB的含噪語音樣本各300條進行端點檢測,得到語音端點檢測的準確率如表2所列,端點檢測正確率定義如下: 表2 端點檢測準確度 正確率=(總幀數-(語音誤判為噪聲的幀數+噪聲誤判為語音的幀數)) / 總幀數。 由表2可見,在白噪聲環(huán)境下,相比傳統(tǒng)能量熵算法[7]、改進子帶能熵比算法[10],本文的改進能量熵算法檢測的平均正確率提升4.75%,在汽車噪聲與人嘈雜噪聲環(huán)境下端點檢測的平均準確率分別提升8.1%和9.1%。 針對傳統(tǒng)能量熵的短時能量與子帶譜熵低信噪比下性能下降的問題,本文利用噪聲估計修正短時能量,提升短時能量的凸性,利用語音存在概率優(yōu)化子帶譜熵,提升子帶譜熵的凹性,并將凸、凹性得到增強的短時能量與子帶譜熵結合得到魯棒性更強的改進能量熵,通過將改進能量熵與基于噪聲估計的自適應動態(tài)門限做比較,完成實時的語音端點檢測。仿真實驗表明,在多種噪聲類型與信噪比下,相比現有能量熵算法與改進子帶能譜比算法,本文構造的改進能量熵對語音與噪聲的區(qū)分度更好,算法的端點檢測準確率也更高。優(yōu)異的性能、較低的計算復雜度、端點檢測的實時性,使得該算法具備較為廣闊的應用前景。如何進一步改進自適應動態(tài)門限,使其能更好地工作在負信噪比環(huán)境中將是下一步的研究內容。2.3 語音存在概率加權的子帶譜熵
2.4 改進的能量熵
2.5 自適應動態(tài)門限
3 實時的端點檢測策略與算法復雜度分析
3.1 實時的端點檢測策略
3.2 算法復雜度分析
4 性能仿真與分析
4.1 特征值區(qū)分度比較
4.2 動態(tài)門限魯棒性
4.3 檢測準確度對比
5 結束語