胡 岸,高 勇
(四川大學 電子信息學院,成都 610065)
單通道語音增強方法因其算法復雜度適中,算法的實現(xiàn)對硬件需求不大,而在很多領域受到廣泛的應用.在單通道話音增強算法中,噪聲估計是至關重要的一環(huán).在這一環(huán)節(jié)中,主要任務就是對噪聲功率譜進行準確的估計,這樣才能較好的抑制噪聲,同時保證較好的話音質量,否則會產生過減或欠估計現(xiàn)象,前者會導致話音失真,影響語音可懂度,后者則會導致的噪聲殘留,影響聽覺體驗.
全球很多學者提出了多種噪聲估計方法.在這些噪聲估計算法里面,最具代表性的有Martin在2001年提出的MS最小統(tǒng)計量噪聲估計算法[1],該算法在固定的搜索窗內搜索含噪語音功率譜最小值.在2002年,Israel Cohen提出了MCRA(Minima Controlled Recursive Averaging)最小遞歸控制平均算法[2],該算法通過將當前幀帶噪話音子頻帶局部功率譜與搜索窗內對應的最小功率譜比較,以此確定該頻帶是否含有話音成分.MCRA算法在話音噪聲譜增加緩慢(噪聲譜增加小于2 dB/s)的情況下[3],有良好的噪聲估計能力,能夠通過遞歸平均法準確估計噪聲值.但該算法采用了固定搜索窗長來更新最小功率譜值,當話音出現(xiàn)噪聲譜陡增的情況時,噪聲估計會出現(xiàn)延遲.延遲時間在L到2L幀之間,其中L為一個最小噪聲估計窗長,為了保證話音無失真,L時間長度通常選為800 ms~1500 ms.
為解決噪聲估計延遲,廣大學者也做了一些研究.2005年,Loizou提出在MCRA噪聲估計算法的基礎上引入連續(xù)平滑噪聲更新[4],改進后的算法有效的縮短了噪聲估計延遲,但是該算法在低信噪比下存在噪聲過估計情況,導致話音失真.2009年,賀慧芳,馬建芳在MCRA算法的基礎上提出了一種基于語音幀檢測的算法[5]來加快噪聲估計速度,該算法在較高信噪比條件下可以有效的縮短噪聲估計延遲,在低信噪比下對噪聲估計延遲的改進有限.2015年,熊晶,王旭貞等人在MCRA算法的基礎上提出了一種雙向噪聲估計算法[6,7],該算法可以較好的解決噪聲估計延遲以及過估計問題,但是實現(xiàn)該算法需要在緩存一段話音數(shù)據(jù),不適合實時性要求較高的場合.
本文在MCRA噪聲估計算法的基礎上,引入一種利用最大對數(shù)似然比結合能零比的VAD輔助算法,通過該輔助算法,可以動態(tài)的選擇大小噪聲搜索估計窗中的最小功率譜值進行后續(xù)計算,從而得到一種變窗長搜索的改進型噪聲估計算法.本文所提的改進算法能有效縮短噪聲估計延遲,也能在低信噪比環(huán)境下運行,并且不需要緩存數(shù)據(jù),可以用于實時性要求較高的場合.
本節(jié)先介紹MCRA算法[2]的基本原理,然后介紹本文提出的雙參數(shù)雙門限VAD算法以及雙窗并行搜索,最后講述本文算法如何進行噪聲估計更新.
當前帶噪話音幀的功率譜為 |Y(k,l)|2,式中k表示子帶數(shù),表示幀數(shù),后文中k和l含義同此處相同.根據(jù)文獻[2],先對當前幀功率譜做頻域上的平滑:
其中,w(i)為一個長 2N+1的窗函數(shù),文中算法取N=1.
然后對當前幀功率譜做時域上的平滑:
(1)基于能零比的VAD
在文獻[8]中,Maragos提出了一種基于短時能零比的VAD算法,即短時平均過零率與短時能量相結合的VAD算法,該算法對噪聲譜變化不敏感,即噪聲譜的陡增不會影響算法性能,且能較好的區(qū)分濁音和非濁音,但在低信噪比下對清音和噪聲的區(qū)分效果不佳.
短時平均過零率表示一幀語音中信號時域波形穿越橫軸的次數(shù).對于離散的信號,如果相鄰的取樣值發(fā)生符號改變,則稱為過零.短時平均過零率就是樣本數(shù)值改變符號的次數(shù).
高頻信號意味著較高的平均過零率,低頻意味著較低的平均過零率.通常情況下,話音中出現(xiàn)濁音時,過零率較低,而出現(xiàn)清音以及白噪聲、超短波噪聲時,過零率較高.
過零率可以通過下面的公式求得:
式中,l代表幀數(shù),n表示數(shù)據(jù)點數(shù),sgn[]為符號函數(shù),Zcr(l)為第l幀的過零率,yl(n)為輸入帶噪話音數(shù)據(jù)第l幀第n個數(shù)據(jù)點.
在話音中的有話區(qū)間能量要高于無話區(qū)間,過零率則相反,現(xiàn)在結合這兩種方法,即用能量值除以過零率的值,可以更突出有話區(qū)間的數(shù)值,而噪聲區(qū)間的數(shù)值則更小.第l幀的能量可以根據(jù)下面公式求得:
這里引入對數(shù)能量計算公式:
用對數(shù)表達式可以緩和能量幅度劇烈變換,參數(shù)a是一個經驗值,適當?shù)恼{整好參數(shù)a的值,將有利于噪聲和清音的區(qū)分,在本文中將參數(shù)a設置為2.
最后能零比通過以下公式求出:
參數(shù)b是為了防止Zcr(l)為0時出現(xiàn)異常值現(xiàn)象,在本文中參數(shù)b設置為1.
(2)基于最大對數(shù)似然比的VAD
在文獻[9]中,J Chang等人提出了基于高斯統(tǒng)計模型與拉普拉斯統(tǒng)計模型的最大對數(shù)似然比,在文獻[10]中,夏丙寅等人基于上述模型提出了一種最大對數(shù)似然比VAD算法,可以較好的區(qū)分清音和噪聲.為了保護清音部分,本文選擇最大對數(shù)似然比作為VAD輔助算法中的另外一種參數(shù).
對每一幀話音信號,話音存在假設為H1,話音不存在假設為H0,基于高斯統(tǒng)計模型,可以求得帶噪話音信號傅里葉變換后每個頻點所對應的似然度,可以表示為:
Y(k,l)為第l幀帶噪話音信號的傅里葉變換的第k個子帶處的頻譜系數(shù).p(Y(k,l)|H1)是假設話音存在情況下的條件概率,p(Y(k,l)|H0)是假設話音不存在情況下的條件概率.ξ(k,l)和 γ(k,l)分別為第l幀話音信號的第k個頻點的的先驗性噪比和后驗信噪比.兩種信噪比分別可由DD判決法則[11]得到,分別表示為以下公式:
式(6)和式(7)中的 λd(k,l)表示噪聲譜估計值.
基于對數(shù)似然比LLR的判決規(guī)則可得:
本文中將兩種VAD算法結合起來,利用能零比VAD對噪聲功率譜變化不敏感,以及最大對數(shù)似然比VAD能在低信噪比情況下較好的區(qū)分清音和噪聲的特點,提出一種雙門限雙參數(shù)的VAD算法,并將其作為MCRA噪聲估計算法的輔助算法.
上述雙參數(shù)雙門限的VAD,即以最大對數(shù)似然比以及能零比作為參數(shù),采用二級門限,通過判決流程得到一個話音存在標記值.具體的流程如圖1所示.
狀態(tài)0為“非話音段”、狀態(tài)1位“疑似話音段”,狀態(tài) 2 為“話音段”,狀態(tài) 3 為“結束段”.為方便描述,此處用Ecr(l)表示第l幀的短時能零比值,用LLR(l)表示第l幀的對數(shù)似然比值,Ecr1、Ecr2分別表示二級能零比門限,LLR1、LLR2分別表示二級對數(shù)似然比門限.LLR1取3,LLR2取0.4,Ecr1取值為前五幀無話段的平均能零比值的1.3倍,Ecr2取值為前五幀無話段的平均能零比值的1.7倍.
從狀態(tài)0開始執(zhí)行VAD算法.如果當前狀態(tài)為0或者1,且Ecr(l)大于Ecr2且LLR(l)大于LLR1,就把該幀話音標記為狀態(tài)2,并將無聲幀計數(shù)器置0,話音幀計數(shù)器加1.若不滿足該門限要求,但LLR(l)大于LLR2,則把該幀話音標記為狀態(tài)1,話音幀計數(shù)器加1.如果上述兩級判決都不滿足則把該幀話音標記為狀態(tài)0.
如果當前狀態(tài)為2,Ecr(l)大于Ecr1且LLR(l)大于LLR2,則維持當前狀態(tài).不滿足上述要求,無聲幀計數(shù)器加1.若此時無聲幀計數(shù)器的數(shù)值小于最長無聲長度,則認為當前幀依舊處于話音段,話音幀計數(shù)器加1.若無聲幀計數(shù)器的數(shù)值大于最長無聲長度,且話音幀計數(shù)器的值小于最小話音長度,則將該幀標記為狀態(tài)0,話音幀計數(shù)器和無聲幀計數(shù)器置0,否則將當前幀標記為狀態(tài)3.
最終根據(jù)話音幀所處的狀態(tài)做一個存在標記,當狀態(tài)為0時,把當前幀標記為“語音不存在”,其他狀態(tài)則把當前幀標記為“語音存在”.
原MCRA算法,噪聲搜索窗選用固定的窗長,而本文算法選用兩個大小不同的窗[12]同時搜索最小功率譜值,并根據(jù)式(3)和式(4)持續(xù)更新Smin(k,l)和Smin′(k,l)以及Stmp(k,l)和Stmp′(k,l).在噪聲估計更新中會根據(jù)上一節(jié)VAD算法所給出的話音存在標記來選擇大窗或小窗下所搜索到的最小功率譜值,從而實現(xiàn)變窗長搜索.本文算法大窗L長度選用50幀、小窗L長度選用8幀.
若話音幀通過上述的雙參數(shù)雙門限VAD算法被標記為“語音存在”,則根據(jù)式(5)計算當前幀平滑功率譜S(k,l)與大窗下的最小功率譜值Smin(k,l)的比值Sr(k,l).若被標記為“話音不存在”,則根據(jù)式(5)計算當前幀平滑功率譜S(k,l)與小窗下的最小功率譜值Smin′(k,l)的比值Sr(k,l).將Sr(k,l)與經驗值 si gma 比較,確定I(k,l),最后根據(jù)式(6)和式(7)求得噪聲估計值 λd(k,l).
由于小窗長度較短,選用小窗下搜索到的最小功率譜值來進行噪聲估計更新計算,會加快噪聲估計速度.
圖1 輔助VAD算法流程框圖
本文采用Israel Cohen提到的OM-LSA話音估計器[13],結合本文的改進型噪聲估計算法,實現(xiàn)整個語音增強算法,具體框圖如圖2所示.
圖2中的y(n)為帶噪話音,加窗分幀后經過FFT,求得帶噪話音的頻譜Y(k,l),幅度譜|Y(k,l)|2,并通過本文算法求得噪聲估計值 λd(k,l).實驗中分幀長度為32 ms,重疊幀長度為16 ms.
文獻[13]中指出:通過估計每一個頻率子帶話音存在概率,得到一個聯(lián)合時頻特性的增益函數(shù):
其中 ξ(k,l)是第l幀第k個子頻帶的先驗信噪比,p(k,l)是第l幀第k個子頻帶的話音存在概率,均根據(jù)噪聲估計得到的噪聲譜值來求解,具體求解方式參考文獻[13],此處不做詳細討論.
圖2 語音增強框圖
通過下式求得處理后的話音頻譜:
本節(jié)的實驗仿真內容主要為:將引入雙門限雙參數(shù)VAD輔助算法的變窗長改進算法與原MCRA算法[2]做對比,比較收斂時間長短.實驗中的噪聲類型采用選自Noisex中的高斯白噪聲,以及超短波噪聲,然后分別將高斯白噪聲、超短波噪聲與純凈語音疊加,生成幾段樣本用來測試.實驗選取標準普通話測試話音17 s,采樣率8 KHz.
實驗一.選取上述純凈話音樣本,給樣本加上高斯白噪聲,帶噪話音8 s–11 s處信噪比由10 dB變?yōu)? dB,在語譜圖3(a)中用方框標出,并用文字說明.圖3(b)為原MCRA算法在噪聲譜陡增時的噪聲估計延遲,圖中用方框標示,可以看到噪聲估計延遲較長,約為1.6 s;而圖3(c)為本文改進算法的語譜圖,可看到噪聲譜陡增處,噪聲估計延遲縮短,約為0.4 s.
圖3 高斯白噪聲環(huán)境下的算法對比
實驗二.選取上述純凈話音樣本,給樣本加上超短波噪聲,此環(huán)境下噪聲譜陡增段包含話音,在2.5 s–4 s處,信噪比由10 dB變?yōu)? dB,語譜圖4(a)中用方框標出,并用文字說明.圖4(b)中可以看到,噪聲估計延遲約為1.5 s;而圖4(c)為文中改進算法的語譜圖,可以看到噪聲譜陡增處,噪聲估計延遲縮短,約為0.5 s.
從圖3和圖4中,可以看出:無論是在高斯白噪聲還是超短波噪聲環(huán)境下,本文提出的改進型算法,面對噪聲譜陡增,噪聲估計延遲都要比原MCRA算法短,即噪聲估計速度本文提出的算法要優(yōu)于原MCRA算法.
本文利用了過零率對噪聲功率譜變化不敏感的性質,將能零比與最大對數(shù)似然比結合,作VAD輔助檢測.聯(lián)合原有算法,采用大小窗同時搜索功率譜最小值,最終形成基于變窗長搜索的改進型噪聲估計算法.經過實驗證明,改進的噪聲估計算法,在噪聲譜陡增時,能夠有效的降低噪聲估計延遲.
圖4 超短波噪聲環(huán)境下的算法對比