張冰
【摘 要】在語(yǔ)音通信過(guò)程中不可避免地會(huì)受到來(lái)自周?chē)h(huán)境、傳輸媒介引入的噪聲、通信設(shè)備內(nèi)部電噪聲、乃至其它講話者的干擾。這些干擾最終將使接收者接語(yǔ)音收到的語(yǔ)音是非純凈的原始語(yǔ)音信號(hào),而是受噪聲污染的帶噪語(yǔ)音信號(hào)。語(yǔ)音增強(qiáng)是解決噪聲污染的一種有效方法,是從帶噪語(yǔ)音信號(hào)中提取盡可能純凈的原始語(yǔ)音,本文研究的是一種基于普減法的改進(jìn)語(yǔ)音增強(qiáng)算法。
【關(guān)鍵詞】語(yǔ)音增強(qiáng) 譜減法 Matlab
1 引言
語(yǔ)音增強(qiáng)已發(fā)展為語(yǔ)音信號(hào)數(shù)字處理的一個(gè)重要分支。語(yǔ)音增強(qiáng)中的譜減法是處理寬帶噪聲的最通用技術(shù),即從帶噪語(yǔ)音估值中減去噪聲頻譜估值,而得到純凈語(yǔ)音的頻譜。寬帶噪聲通??梢约俣楦咚乖肼暫桶自肼暋K膩?lái)源很多,包括空氣流動(dòng)、呼吸噪聲和一般隨機(jī)噪聲源。量化噪聲通常作為白噪聲來(lái)處理,也可以視為寬帶噪聲。由于寬帶噪聲與語(yǔ)音信號(hào)在時(shí)域和頻域上完全重疊,因而消除它最為困難。由于人耳對(duì)語(yǔ)音頻譜分量的相位不敏感,所以譜減法主要針對(duì)短時(shí)幅度譜。
2 語(yǔ)音增強(qiáng)算法
2.1 傳統(tǒng)譜減法
假定語(yǔ)音為平穩(wěn)信號(hào),而噪聲及假定語(yǔ)音為平穩(wěn)信號(hào),而噪聲和語(yǔ)音為加性信號(hào)且彼此不相關(guān)。此時(shí)帶噪語(yǔ)音信號(hào)可表示為:
式中, 為純凈語(yǔ)音信號(hào), 為平穩(wěn)加性高斯噪聲。實(shí)際上,為避免分幀時(shí)的截?cái)嘈?yīng),應(yīng)對(duì) 加窗。為了書(shū)寫(xiě)方便,這里用 代表加窗后的帶噪信號(hào)。
設(shè) 的傅里葉系數(shù)為:
的傅里葉系數(shù)為:
的傅里葉系數(shù)為: 由(1)式,則有:
而語(yǔ)音增強(qiáng)的任務(wù)就是利用已知的噪聲功率譜信息,從 中估計(jì)出 。由于人耳對(duì)相位不敏感,所以只要估計(jì)出 ,然后借用帶噪語(yǔ)音相位,進(jìn)行反傅里葉變換后就可得到增強(qiáng)的語(yǔ)音。
經(jīng)FFT后,有 ,由此可得 式⑵
式中*表示復(fù)共軛。因?yàn)榧俣ㄔ肼暿遣幌嚓P(guān)的,即 與 獨(dú)立,不會(huì)出現(xiàn)信號(hào)和噪聲的乘積值,則互譜的統(tǒng)計(jì)均值為0。
而 為零均值的高斯分布,所以有: 式⑶
只要從 中減去 便可恢復(fù) 。之所以能這樣是基于人耳對(duì)語(yǔ)音相位不敏感(相聾)這一特點(diǎn)。因?yàn)樵肼暿蔷植科椒€(wěn)的,故可以認(rèn)為語(yǔ)音前的噪聲與發(fā)語(yǔ)音期間的噪聲功率譜相同,因而可以利用發(fā)語(yǔ)音前(或后)的“寂靜幀”來(lái)估計(jì)噪聲。對(duì)于一個(gè)分析幀內(nèi)的短時(shí)平穩(wěn)過(guò)程,有 式⑷
其中, 為無(wú)語(yǔ)音時(shí) 的統(tǒng)計(jì)平均值,即
由此可得原始語(yǔ)音的估計(jì)值 式⑸
實(shí)際計(jì)算中,也可能出現(xiàn) 小于 的情況,因此功率譜不可為負(fù),此時(shí)修改式⑸為 式⑹,式中ε為一個(gè)大于0的常數(shù),它由試驗(yàn)確定。定義第k個(gè)頻譜分量的增益函數(shù) 以及后驗(yàn)信噪比 ,則式⑸可以改寫(xiě)為: 式⑺
由式⑺可以清楚地看出譜相減的物理意義:它相當(dāng)于對(duì)帶噪語(yǔ)音的每一個(gè)頻譜分量乘以一個(gè)系數(shù) 當(dāng)信噪比高時(shí),含語(yǔ)音的可能性很大,衰減小。反之,則認(rèn)為含有語(yǔ)音的可能性小,衰減則增大。
2.2 改進(jìn)的譜減法
式⑸中的 是以無(wú)聲期間的統(tǒng)計(jì)平均的噪聲方差代替當(dāng)前分析幀的噪聲頻譜,而實(shí)際上噪聲頻譜服從高斯分布
式⑻
其中,m為x的均值,σ為標(biāo)準(zhǔn)偏差。噪聲的幀功率譜隨機(jī)變化范圍很寬,在頻域中的最大、最小值之比往往達(dá)到幾個(gè)數(shù)量級(jí),而最大值與均值之比也達(dá)6~8倍。因而,在減去噪聲譜后,會(huì)有些較大的功率譜分量的剩余部分,在頻譜上呈現(xiàn)出隨機(jī)出現(xiàn)的尖峰,在聽(tīng)覺(jué)上形成殘留噪聲。這種噪聲具有一定的節(jié)奏性起伏感,所以稱之為“音樂(lè)噪聲”。
為有效地減少寬帶和音樂(lè)噪聲,可對(duì)譜減法進(jìn)行改進(jìn)。噪聲的能量往往分布于整個(gè)頻譜范圍,而語(yǔ)音能量則較集中于某些頻率或頻段,尤其在元音的共振峰處。因此可在元音段等幅度較高的時(shí)幀去除噪聲時(shí),減去 ,則可更好地相對(duì)突出語(yǔ)音的功率譜。這種改進(jìn)也稱為被減項(xiàng)權(quán)值處理。
同時(shí),將式(5)中的功率譜計(jì)算|*|2及|*|1/2改為|*|m和|*|1/m計(jì)算(這里m不一定為整數(shù)),可以增加靈活性。這種方法稱為功率譜修正處理。經(jīng)分析和試驗(yàn)得知,當(dāng)m>2時(shí),它具有與被減項(xiàng)加權(quán)處理相同的效果。
綜合上面兩種處理,譜減法改進(jìn)形式的原理框圖如圖2所示。
此時(shí)式⑸修正為 式⑼。 引入m,n兩個(gè)參數(shù)為計(jì)算提供了很大的靈活性。當(dāng)m=2,n=1時(shí)即變?yōu)榛镜淖V減法,實(shí)際的增強(qiáng)試驗(yàn)表明,適當(dāng)調(diào)節(jié)m、n可以獲得比傳統(tǒng)的譜減法更好的增強(qiáng)效果。因此實(shí)際的增強(qiáng)過(guò)程中,更多地使用譜減法的改進(jìn)形式。
3 基于MATLAB的算法實(shí)現(xiàn)與仿真
3.1傳統(tǒng)譜減法的實(shí)驗(yàn)與仿真
基于MATLAB來(lái)實(shí)現(xiàn)傳統(tǒng)譜減法的仿真,讀入語(yǔ)音文件用wavread函數(shù)實(shí)現(xiàn),對(duì)采樣點(diǎn)補(bǔ)足幀的整數(shù)倍是方便實(shí)現(xiàn)MATLAB的矩陣計(jì)算以及最后對(duì)幀疊加進(jìn)行還原處理。對(duì)每一幀獨(dú)立的含噪語(yǔ)音進(jìn)行語(yǔ)音增強(qiáng)處理,再將每幀增強(qiáng)語(yǔ)音依次連接起來(lái),會(huì)由于恢復(fù)的信號(hào)幀間不連續(xù),使得增強(qiáng)語(yǔ)音含有周期性的雜音,因此采用幀間重疊譜減法進(jìn)行語(yǔ)音處理。程序中每幀信號(hào)256點(diǎn),128點(diǎn)重疊,通過(guò)w=hamming(framelength)'實(shí)現(xiàn),經(jīng)語(yǔ)音增強(qiáng)處理后,再進(jìn)行相反的處理,恢復(fù)連續(xù)的語(yǔ)音信號(hào)。
對(duì)帶噪語(yǔ)音信號(hào)進(jìn)行FFT變換可以直接用fft函數(shù)實(shí)現(xiàn),在MATLAB程序中,這一部分用for循環(huán)對(duì)每幀循環(huán)實(shí)現(xiàn)。
譜相減是算法的關(guān)鍵,這部分程序代碼如下所示,其中參數(shù)m=2,n=1。因?yàn)樯婕暗焦乐担詫?shí)際中譜相減的差值會(huì)為負(fù)。因功率譜不能為負(fù),故可令負(fù)值為0或改變其符號(hào),在本文的實(shí)現(xiàn)程序中令負(fù)值為0。
TT=[];
for i=1:k
kk=(yd(i,:).^m-n*(ave_noise.^m));
pp=find(kk<0);
kk(pp)=0;
kk=kk.^(1/m);
TT=[TT;kk];
End
在對(duì)FFT變換且譜相減后的信號(hào)加上原輸入信號(hào)的相位信息后,就對(duì)信號(hào)進(jìn)行IFFT變換,在MATLAB中用ifft函數(shù)實(shí)現(xiàn),即t=TT.*exp(j*angleyy); ss=ifft(t,[],2);
算法的最后要對(duì)前面的幀重疊進(jìn)行相反的處理,以保持語(yǔ)音的連續(xù)特性。幀重疊進(jìn)行相反處理的代碼如下所示:
output=[];
output=[output,ss(1,1:128)];
for i=2:k
temps=(ss(i,1:128)+ss(i-1,129:256))/2;
output=[output,temps];
end
output=[output,ss(k,129:256)];
語(yǔ)音增強(qiáng)后的信號(hào)用wavwrite函數(shù)輸出到新的wav文件中。傳統(tǒng)譜減法仿真后結(jié)果表明,噪聲信號(hào)得到了一定的抑制,但是還存在一定的具有節(jié)奏性起伏感的音樂(lè)噪聲。
3.2 改進(jìn)形式的譜減法的實(shí)現(xiàn)與仿真
式(8)中的m,n兩個(gè)參數(shù)為算法提供了很大的靈活性,適當(dāng)調(diào)節(jié)這兩個(gè)參數(shù),可獲得比原始相減法更好的增強(qiáng)效果。試驗(yàn)表明,兩個(gè)可調(diào)參數(shù)m,n取不同值時(shí),語(yǔ)音增強(qiáng)的效果是不同的:m不變,隨著n值的適當(dāng)增大,寬帶噪聲及殘余的音樂(lè)噪聲減小,信噪比大大提高,但是語(yǔ)音也逐漸變尖,即有較大的失真;n不變,隨著m值的適當(dāng)增大,寬帶噪聲及殘余的音樂(lè)噪聲增大,信噪比的提高減少,但是語(yǔ)音也逐漸自然,即有較小的失真。試聽(tīng)結(jié)果表明,m=0.4,n=0.9時(shí),較好的做到了降噪與提高語(yǔ)音可懂度之間的折衷,噪聲得到了適當(dāng)?shù)囊种?,較好地保持了原語(yǔ)音的特性。在MATLAB的實(shí)現(xiàn)上,只要在原來(lái)傳統(tǒng)譜減法的基礎(chǔ)上改動(dòng)參數(shù)m,n的值即可得到改進(jìn)后的效果,如圖3所示即為改進(jìn)形式的譜減法仿真效果。
圖3
試驗(yàn)表明,改進(jìn)的譜減法消除了周期性干擾在電臺(tái)話音輸出端引起的嘯叫噪聲,除清晰度略有下降外,語(yǔ)音的可懂度和自然度未受損失。該方法對(duì)白噪聲干擾消噪效果更好,但當(dāng)環(huán)境惡劣,信噪比極低時(shí),信噪比雖然提高不少,但語(yǔ)音的可懂度和自然度卻受到一定的損失,實(shí)際聽(tīng)起來(lái)像機(jī)器人的聲音。因此,在實(shí)時(shí)實(shí)現(xiàn)時(shí)需注意運(yùn)算精度、幀間重疊的實(shí)現(xiàn)和噪聲功率譜估計(jì)等問(wèn)題。
4 結(jié)語(yǔ)
基于計(jì)算機(jī)仿真的MATLAB譜相減法是一種常用的單通道語(yǔ)音增強(qiáng)經(jīng)典算法,傳統(tǒng)譜減法和它的改進(jìn)形式可以歸納為一個(gè)通用的譜減法參數(shù)公式,參數(shù)m,n的取值和增強(qiáng)效果有著密切的關(guān)系,當(dāng)m,n取值適當(dāng),則可獲得較為理想的增強(qiáng)效果。譜減法有效地降低了背景噪聲,提高了信噪比。目前該普相減仿真計(jì)算方法依然存在一定的難題,但對(duì)于語(yǔ)音質(zhì)量的提高依然具有非常大的幫助。
參考文獻(xiàn):
[1]楊行峻,遲惠生.語(yǔ)音信號(hào)數(shù)字處理[M].北京:電子工業(yè)出版社,1995,385-411.
[2] Hyoung-Gook Kim, Markus Schwab, Nicolas Moreau. Speech Enhancement of Noisy Speech Using Log-Spectral Amplitude Estimator and Harmonic Tunneling[EB/OL]. http://www.nue.tu-berlin.de/ publications/papers/IWANEC2003.pdf
[3] J.H.L. Hansen, B.Pellom. An Effective Quality Evaluation Protocol for Speech Enhancement Algorithms[EB/OL]. http://cslr.colorado.edu/rspl/PUBLICATIONS/PDFs/CP-icslp98-SpchEnhansProto-SL980917-Wcover.PDF.