姜 峰,霍彥明,李 爭
(河北科技大學 電氣工程學院,河北 石家莊 050018)
E-mail :jiangfeng04@126.com
在日常生活中,不同類型的噪音常常會干擾到語音信號,而語音降噪的主要目標也是盡可能的在環境嘈雜的情況下,對原語音進行提取,降低原語音所處環境中的噪音,提高語音的可辨識度,對語音的質量予以優化,這便為解決噪聲干擾問題提供了有效的方案[1].目前,語音降噪有多種思路,總體思路是基于IRM或者時頻單元替換,文獻[2]中估計的IRM和語音識別的VAD可以用更好的波束形成語音進行更新[2].近年來,深度神經網絡在語音識別領域的應用取得了空前的成功.在現實世界的許多大詞匯連續語音識別任務中,深度學習將識別錯誤率降低了三分之一,并且識別率也進入用戶可接受的范圍[3].目前的語音降噪算法主要有:譜減法[4]、維納濾波算法[5]、基于統計模型算法[6]以及子空間算法[7]等.雖然這些算法在一定程度上解決了帶噪語音的去噪問題,但都有不同程度的局限性.例如,譜減法容易產生較為粗糙的合成語音,而維納濾波算法的最小均方誤差意義下的最優估計是建立在平穩條件之上的.2006年,壓縮感知理論[8]的提出為在信號處理領域中應用稀疏表示和字典學習理論做了鋪墊.
對語音信號進行稀疏表示指的是在原子集合即字典中選取少數幾個原子進行線性組合就能很好的近似該信號.因此字典學習的目的是找到語音信號的最優原子集合,使這些原子能夠很好地反映語音信號的特征,從而能夠以最稀疏的方式表示語音信號.傳統的降噪方法是通過減少或去除噪聲來獲得純凈語音,而基于稀疏表示的語音降噪方法是從過完備字典中選擇原子來表達純凈語音信號,將純凈語音從帶噪語音中分離出來以實現降噪的目的[9].文獻[10]中,為了能夠得到具備判別能力的字典,其在字典學習的過程中添加了Fisher準則[10].文獻[11]為了去除字典中元素的非負限制采用了K-SVD算法,使獲得的字典更具一般性[11].文獻[12]在頻域上運用K-SVD算法訓練純凈語音的過完備字典,運用最小角回歸算法獲得純凈語音信號譜的稀疏表示[12].文獻[13]基于非負稀疏編碼來實現語音降噪[13].
但是,上述模型都沒有考慮兩種字典對語音樣本和噪聲樣本的區分性問題以及應對高維度信號運算速度不夠快的問題.這是因為在字典學習過程中僅僅對每種類型的樣本單獨進行字典訓練,訓練后的字典中必然存在較相關的原子,從而造成降噪后的語音存在噪聲殘留及波形失真.而得到合適的相關性閾值需要通過大量實驗予以驗證,這會在一定程度上導致運算效率的降低[14].為解決上述問題,針對K-SVD算法的不足進行改進,提出一種新的字典訓練算法雙重稀疏K-SVD,使得改進后的算法能更準確的自適應獲取字典和有助于更大規模更高維度的信號進行稀疏表示.同時,在字典學習階段添加字典區分約束項使訓練出的聯合字典更具區分性,進而幫助帶噪語音獲得最優的降噪效果.
稀疏表示是指盡量減少對非零系數的使用,來對原始信號的主要信息進行表示,從而實現簡化信號處理問題以及壓縮信息的目的.稀疏表示擁有更加簡便、不死板和自我適應的優質特性,稀疏表示的模型是:
Y=DC+ε
(1)
其中,Y∈RM×1表示信號,D∈RM×N表示字典,字典中的每一列被稱為一個原子,C∈RN×1為稀疏表示系數,ε∈RM×1表示誤差向量.假設M為原子長度,N為字典維數.一般情況下M是小于N的,即字典是過完備的,所以這個線性問題是欠定的[15].信號本身或其在某個變換域中具有稀疏性是壓縮感知理論重建信號的主要先決條件.如果字典矩陣的維數等條件不變,則信號越稀疏,就越容易將信號恢復.
用字典稀疏表示某一信號時,其目標就是找到最稀疏的表示系數即一種稀疏逼近過程.常見的有公式(2)與公式(3)兩種形式:
(2)
(3)
其中,‖·‖2為l2范數,‖·‖1為l1范數,K是稀疏度約束,ε是近似誤差約束.
字典的構造一般有兩種方法:使用固定字典的解析方法和自適應不同信號的字典學習方法.盡管使用固定字典的解析方法結構簡單,計算也不復雜,但并沒有對信號的特征信息加以應用.因此,利用該方法得到的字典,不僅原子形態單一,而且沒有最大優化.而自我適應的字典學習方法則是根據信號的本身,對字典加以學習,通過捕獲信號的特征信息去構建更匹配,更靈活的字典.
Aharon等學者在2006年提出了一種K-SVD字典訓練算法.該算法是以誤差最小原則為基礎對誤差項進行SVD分解,并選取使誤差最小的分解項作為更新的字典原子和相應的原子系數,通過連續的迭代得到最優解[16].
K-SVD算法的每次迭代主要包括以下兩個階段:首先是稀疏編碼階段,采取稀疏分解優化算法求得滿足所要實現的稀疏度的稀疏系數矩陣.其次是字典更新階段,字典中的每一個原子都利用奇異值分解的方法進行更新.通過迭代使得對應于字典的稀疏表示系數矩陣足夠稀疏是字典學習的主要目的,以提高算法的收斂速度.
基于非負限制的K-SVD,稀疏分解字典D以得到子字典A,令其滿足D=AB,便是雙重稀疏K-SVD算法,其中B是A的稀疏矩陣.雙重稀疏K-SVD算法對字典的稀疏表示可以使字典D的自適應性更好,同時提升了運算速度,有利于稀疏表示更高維度的信號.
定義Y為訓練信號,其稀疏表示系數矩陣為C,雙重稀疏K-SVD算法建立的目標函數可以使用公式(4)來表示:

(4)

雙重稀疏K-SVD算法的具體過程如下:
令信號為Y,初始字典為D,子字典為A,信號與子字典的稀疏表示矩陣分別為C和B,目標原子與目標信號的稀疏度分別為w和t,迭代次數為L.
初始化:D=D(0);

字典更新階段迭代:k=k+1,k=1,2,3,…,N,ck=ck/‖ck‖2(ck表示C的第k行);
ckεk=ck(YI-ABCI)(I為Y中指代ck的索引號);

bk=bk/‖bk‖2(bk表示B的第k行);
為了比較這兩種算法的性能,設計實驗,構建一個隨機字典,其大小為30×60,字典中的各項均為高斯隨機變量,滿足獨立同分布,且已列歸一化,以該字典為基礎,形成4000個信號樣本,其中每4個隨機原子組合成一個樣本,組合系數服從正態分布N(0,1).方差為0.1的零均值高斯隨機噪聲污染每個信號,對這組信號用兩種算法各進行40次迭代,圖1與圖2展示了以平均表示誤差和恢復原子的相對個數為評價指標的兩種算法測試對比結果:

圖1 平均表示誤差

圖2 恢復原子的相對個數
實驗結果表明,兩種算法都具有優越的性能,大約經過15次迭代,兩種算法就都能讓原始字典中的大多數原子恢復,隨著迭代次數的增加,這兩種算法下的平均表示誤差均呈現遞減的趨勢,并最終都保持在0.1以下.從整個迭代過程來看,D-Sparse K-SVD算法的相對誤差和收斂速度都優于K-SVD算法.
基于聯合字典學習的語音增強算法具體流程如下[17]:
對單通道模型而言,如果只有加性噪聲,經過采樣得到的時域帶噪音的語音信號可以表示為:
y(t)=s(t)+n(t)
(5)
其中,t表示采樣點,y(t)、s(t)、n(t)分別表示帶噪語音采樣信號、純凈語音采樣信號、噪聲采樣信號.由于語音信號在頻域中的稀疏性,對公式(5)做短時傅里葉變換,對于第f頻率點和第m幀可表示為:
Y(f,m)=S(f,m)+N(f,m)
(6)
對于相位信息來說,人耳不夠敏感,通常只能處理頻域信號的幅值部分,事先已經保留好的帶噪語音相位信息放在了最終處理的語音信號的相位部分.公式(7)為公式(6)的矩陣形式:
Y=S+N
(7)
其中,Y∈RJ×M,S∈RJ×M,N∈RJ×M.J為總的頻率索引數,M為總的幀索引數.
聯合字典學習第t次迭代的稀疏編碼要解決的問題為:
(8)
(9)
字典更新解決的問題為:
(10)
(11)

將DS和DN組合成聯合字典D,在語音增強階段,利用LARC算法并設置合適的相關性閾值μenh,將帶噪語音信號Y(公式(12))在聯合字典D上進行稀疏表示(公式(13)),從而得到純凈語音信號的幅度譜估計(公式(14)).
(12)
(13)
(14)
傳統的基于聯合字典學習的語音增強算法沒有考慮到純凈語音樣本和噪聲樣本之間的區別特征以及純凈語音字典和噪聲字典之間的關系,在字典學習過程中僅針對每類樣本單獨訓練字典,因此導致具有相關性的原子出現在訓練后的字典當中,使得稀疏重構階段更容易產生源混淆的情況.為了避免此類情況的發生,本文選擇加入字典區分約束項,提出了基于區分性聯合字典學習的語音降噪算法.同時,為了進一步提升運算效率,用D-Sparse K-SVD算法替代K-SVD算法應用于區分性聯合字典學習中.
語音降噪的目標是當帶噪語音在聯合字典上進行稀疏表示時,必須保證每個信號只能被其所對應的字典稀疏表示,而不能被其他非對應字典稀疏表示.因此,可以得到如公式(15)所示目標函數:
(15)
目標函數由三部分組成,對樣本Ai而言,可分別表示為在聯合字典D上的稀疏表示誤差、在其對應字典Di上的稀疏表示誤差以及在其非對應字典Dj上的稀疏分解成分.
稀疏系數約束為:
fa(c)=‖Cj‖0≤T
(16)
Cj為C的第j列,T為系數向量的稀疏度約束,因此fa(c)為C的每一列的稀疏表示約束函數.
兩種字典之間的相關性可以用兩種字典之間最大的原子內積來衡量,因此可以用公式(17)所示目標函數來限制兩種字典之間的相關性:
(17)
綜上所述,區分性聯合字典學習的目標函數為:
f(D,C)=fa(D,C)+fb(D)
(18)
求解區分性聯合字典的目標函數最優化問題可分為兩個階段來實現:稀疏分解和字典更新.
稀疏分解階段,為了讓稀疏表示系數最優化,求解公式(19)時運用LARC算法.
(19)
第t次迭代的稀疏分解式如公式(20)所示:
(20)
字典更新階段解決的是公式(21)目標函數的優化問題:

(21)
為了優化目標函數,本文選取有限記憶BFGS算法,此算法利用的是目標函數及其梯度來估計黑塞矩陣.所以,此算法比傳統的擬牛頓法運算效率更高.
圖3為本文提出的稀疏表示及區分性聯合字典學習語音降噪算法的具體流程.

圖3 稀疏表示及區分性聯合字典學習語音降噪算法流程圖

從NOIZEUS數據庫中分別選取了男聲女聲各5句作為實驗所需的純凈語音樣本,并進行8k降采樣,幀長取256,幀移50%.純凈語音和噪聲字典的大小為200×800,采用D-Sparse K-SVD算法實現字典訓練和語音稀疏重構,從訓練樣本中隨機選取數據作為初始字典,訓練迭代40次.采用NOISEX-92數據庫中的volvo汽車噪聲、白噪聲和babble噪聲作為噪聲疊加源與純凈語音合成測試語音樣本,在信噪比分別為-5dB、0dB、5dB和10dB的情況下進行測試.對比的算法是基于聯合字典學習的語音增強算法,并分別使用主觀語音質量評估(PESQ)[18]和分段信噪比(Segment SNR)[19]兩種評價方式作為降噪后語音質量高低的衡量標準.
為了驗證組合成區分性聯合字典的兩種子字典間的相關性,設計實驗針對同一句純凈語音樣本和volvo汽車噪聲樣本運用聯合字典學習的語音增強算法和本文所提算法分別訓練出各自的純凈語音字典DS和噪聲字典DN,然后用公式(22)對這兩種算法訓練出的DS與DN進行相關性[20]計算:
αjk=|
(22)
其中,DS(:,j)表示DS的第j列原子,DN(:,k)表示DN的第k列原子.依據兩種算法下所得αjk的結果分別繪制了圖4和圖5.

圖4 聯合字典的絕對相關系數統計

圖5 區分性聯合字典的絕對相關系數統計
如圖5所示,區分性聯合字典的絕對相關系數大多集中在0附近,而且基本上都低于0.5,由此可知基于區分性聯合字典學習得到的兩種字典間的相關程度要低于基于聯合字典學習得到的兩種字典間的相關程度.
表1和表2分別從PESQ和SegSNR兩種評價方式入手對兩種算法的性能進行了對比.從表1可以看出,在不同噪聲條件不同輸入信噪比下,區分性聯合字典算法的PESQ 值均比聯合字典算法的高.尤其在噪聲類型為白噪聲,輸入信噪比為5dB和10dB的情況下,區分性聯合字典算法相對于聯合字典算法有更高的提升幅度;從表2可以看出,在不同噪聲條件不同輸入信噪比下,區分性聯合字典算法的SegSNR都要比聯合字典算法的高.運用聯合字典算法提升作用不明顯的類語音噪聲,如babble噪聲,區分性聯合字典算法的提升效果要顯著優于聯合字典算法.
表1 兩種算法的PESQ值評測對比
Table 1 Comparison of PESQ values of two algorithms

噪聲類型輸入信噪比/dBPESQ值聯合字典男女區分性聯合字典男女-52.63562.61252.79952.7762Volvo汽車噪聲02.90572.89373.11233.015953.11273.10583.47593.4021103.52093.50373.72513.6937-51.31231.29171.61351.5939白噪聲01.61251.60311.85611.832151.78311.70212.49672.4035102.09871.97632.93582.8977-51.79311.76272.29162.2879Babble噪聲02.10762.09312.50172.472352.43272.39172.76392.7136102.77692.71393.11353.1026
表2 兩種算法的SegSNR結果評測對比
Table 2 Comparison of SegSNR results of two algorithms

噪聲類型輸入信噪比/dBSegSNR /dB聯合字典男女區分性聯合字典男女-52.33152.45313.97693.9878volvo汽車噪聲04.51294.67386.11346.225756.00125.93558.76218.9012108.52168.631410.211310.0135-50.96590.79563.80234.0117白噪聲05.16764.46798.02137.789159.81299.901312.186912.51121011.347911.631515.157816.3412-5-4.1231-4.0569-3.2516-3.1578babble噪聲0-2.7961-2.5987-1.0314-1.00255-1.0121-1.11381.29611.3687101.53211.67213.01253.2037
從測試情況看,本文所提算法性能相對穩定,具備響應速度快,準確率高,實用性強的優點.因此,本文所提算法成功解決了由聯合字典學習引起的源混淆與源失真問題.
本文針對字典的區分性及其算法存在的問題,提出更符合實際需求的區分性聯合字典以及計算時間更高效的雙重稀疏K-SVD算法,通過在字典間添加字典區分約束項,提高訓練字典的區分能力;通過改進K-SVD算法,令初始字典進一步稀疏分解來產生子字典,使最終獲得的字典自適應性更強,降低了計算的復雜度.實驗結果表明,區分性聯合字典有效減少了重構語音中的殘留噪聲與失真成分,雙重稀疏K-SVD算法可以顯著減少計算時間,同時確保語音的降噪質量,驗證了本文算法的有效性及實用性.