鄭澤鴻, 張承云
(廣州大學(xué) 電子與通信工程學(xué)院, 廣東 廣州 510006)
降噪算法廣泛應(yīng)用于實(shí)時(shí)通信、擴(kuò)聲、聲音監(jiān)控和現(xiàn)場(chǎng)錄音等場(chǎng)合,由于應(yīng)用環(huán)境各異,噪聲類型較多,因而降噪算法開(kāi)發(fā)難度較大[1-3].WebRTC是Google公司以VoIP等多項(xiàng)核心技術(shù)為基礎(chǔ)建立的開(kāi)源項(xiàng)目,用于PC端或移動(dòng)端的實(shí)時(shí)音視頻通信,其降噪算法的效果較好.本文對(duì)WebRTC降噪算法在低成本嵌入式芯片上的實(shí)現(xiàn)進(jìn)行探討.
NXP公司的RT1052芯片性價(jià)比高,基于ARM Cortex-M7內(nèi)核,采用6級(jí)流水線,帶雙精度硬件浮點(diǎn)運(yùn)算單元(FPU),有串行音頻接口(SAI),支持CMSIS-DSP信號(hào)處理庫(kù)[4].選擇以RT1052為主控制器的開(kāi)發(fā)板作為硬件實(shí)現(xiàn)平臺(tái),分析WebRTC降噪算法并移植和優(yōu)化代碼,采用VAD算法解決了原代碼中噪聲參數(shù)在靜音轉(zhuǎn)為有聲時(shí)的收斂問(wèn)題,最后對(duì)代碼性能進(jìn)行測(cè)試.
WebRTC降噪算法支持的音頻采樣率為8 kHz、16 kHz、32 kHz及48 kHz,每隔10 ms處理一幀數(shù)據(jù).對(duì)于8 kHz和16 kHz的輸入信號(hào)直接進(jìn)行降噪處理,而對(duì)于32 kHz和48 kHz的輸入信號(hào)則分別通過(guò)正交鏡像濾波器和余弦調(diào)制濾波器進(jìn)行子帶分離,低頻部分按16 kHz情況進(jìn)行處理,所得的語(yǔ)音概率作為高頻部分增益的參考,最后子帶合成得到降噪后的信號(hào),WebRTC降噪算法的處理流程[5]見(jiàn)圖1.
圖1 WebRTC降噪算法流程圖Fig.1 Flow chart of WebRTC noise reduction algorithm
以16 kHz處理為例,算法主要分為四個(gè)步驟:
ξ1(,
(1)
其中,k為頻點(diǎn)編號(hào),X(-1,k)為上一幀降噪后的幅度譜,D2(-1,k)為上一幀的實(shí)際噪聲譜估計(jì).
假設(shè)語(yǔ)音和噪聲的傅里葉變換系數(shù)為零均值的復(fù)高斯分布,由式(2)求出各頻點(diǎn)的似然比Λ(,k),它表征著語(yǔ)音存在與不存在的概率比[8].
Λ(,
(2)
式中γ1(,
(2)分別計(jì)算平坦度κf()、偏差度κd()和似然比均值κΛ().
κf(
(3)
κd()=var{Y(,
(4)
κΛ(,
(5)
由于噪聲信號(hào)的頻譜相對(duì)均勻平坦,所以噪聲幀的平坦系數(shù)偏大[9].偏差度是用相關(guān)系數(shù)衡量Y(,k)與噪聲模板Dd(,k)的線性相關(guān)程度,噪聲信號(hào)的幅度譜更接近模板,所以噪聲幀的偏差系數(shù)較小.似然比均值,即頻點(diǎn)似然比Λ(,k)經(jīng)對(duì)數(shù)平滑得到Δ(,k)求幾何平均值,是指示語(yǔ)音/噪聲狀態(tài)的可靠指標(biāo),語(yǔ)音幀的似然比均值較大.
(3)通過(guò)tanh函數(shù)對(duì)上述3個(gè)特征量指標(biāo)化,分別以wf、wd、wΛ加權(quán)得到總體語(yǔ)音指標(biāo)ρ(),并由時(shí)間平滑得到語(yǔ)音幀概率值p().
(6)
根據(jù)貝葉斯定理求得各頻點(diǎn)的語(yǔ)音存在條件概率ζ(,k)[10].
ζ(,k)=P[H1Y(,
(7)
(4)最后根據(jù)語(yǔ)音存在概率重新獲得噪聲譜,由式(8)得到實(shí)際噪聲譜估計(jì)D2(,k).
D2(,k)=
(8)
其中,D′(,k)=[1-ζ(,k)]·Y(,k)+ζ(,k)·D2(-1,k).
再次使用式(9)的DD估計(jì)修正先驗(yàn)信噪比ξ2(,k),帶噪幅度譜Y(,k)經(jīng)過(guò)式(10)維納濾波后,即為純凈語(yǔ)音幅度譜X(,k),保持相位譜不變并反變換回時(shí)域得到降噪信號(hào).
ξ2(,
(9)
X(,k)=Y(,
(10)
選用廣州市星翼電子科技有限公司(正點(diǎn)原子)的號(hào)令者I.MX RT1052開(kāi)發(fā)板作為硬件平臺(tái).主處理芯片RT1052是NXP公司的一款高性價(jià)比微處理器,基于Cortex-M7內(nèi)核,600 MHz工作主頻,自帶雙精度硬件浮點(diǎn)運(yùn)算單元(DP-FPU),適合實(shí)時(shí)算法處理.開(kāi)發(fā)板的聲音codec是Wolfson公司的WM8978[11].RT1052芯片通過(guò)I2C配置WM8978的寄存器,開(kāi)啟線路輸入輸出通道,16位量化精度,采樣率根據(jù)需求設(shè)為8 kHz、16 kHz、32 kHz或48 kHz.
使用MDK5.23作為軟件開(kāi)發(fā)環(huán)境,建立一個(gè)聲音直通程序.將發(fā)送請(qǐng)求和接收請(qǐng)求分別映射到DMA的兩個(gè)通道上,利用乒乓緩沖實(shí)時(shí)接收和發(fā)送聲音信號(hào),數(shù)據(jù)輸入指針為shBufferIn,數(shù)據(jù)輸出指針為shBufferOut,每幀數(shù)據(jù)長(zhǎng)度為10 ms.
WebRTC項(xiàng)目代碼(https://webrtc.googlesource. com/src/+log,2019-9-28)的開(kāi)發(fā)環(huán)境為Microsoft Visual Studio 2015,降噪算法位于modules的audio_processing/ns文件夾中,正交鏡像濾波器對(duì)應(yīng)common_audio/signal_processing的splitting_filter.c文件,余弦調(diào)制濾波器對(duì)應(yīng)modules/audio_processing 中的three_band_filter_bank.c文件.將上述文件添加到聲音直通程序的工程中,直通程序中的數(shù)據(jù)指針shBufferIn、shBufferOut分別作為噪聲處理程序的數(shù)據(jù)輸入輸出.
為了檢驗(yàn)算法的實(shí)時(shí)性,測(cè)試語(yǔ)音選取NOIZEUS語(yǔ)料庫(kù)[12]中純凈語(yǔ)音sp01~sp05拼接成15 s的信號(hào),用Cooledit軟件將采樣率從25 kHz升為48 kHz,與白噪聲以0dB信噪比混合,得到audio1信號(hào).在計(jì)算機(jī)上播放該信號(hào)并將聲卡的輸出作為開(kāi)發(fā)板的輸入,通過(guò)RT1052芯片的定時(shí)器測(cè)量降噪算法在不同采樣率時(shí)處理單幀信號(hào)需要的時(shí)間.結(jié)果只有采樣率為8 kHz時(shí)才能實(shí)時(shí)處理,采樣率為48 kHz時(shí)噪聲處理時(shí)長(zhǎng)約為輸入數(shù)據(jù)時(shí)長(zhǎng)的3倍,遠(yuǎn)遠(yuǎn)不能達(dá)到實(shí)時(shí)處理的要求,這是因?yàn)镃PU對(duì)大量浮點(diǎn)運(yùn)算的執(zhí)行效率較低.針對(duì)這種情況,開(kāi)啟RT1052內(nèi)置的FPU可提高算法的運(yùn)算效率,將協(xié)處理器控制寄存器(CPACR)的CP11和CP10置位即可,同樣對(duì)單幀信號(hào)的處理時(shí)間進(jìn)行測(cè)量,由表1可知四種采樣頻率都能實(shí)時(shí)處理.
表1 原算法對(duì)單幀信號(hào)的處理時(shí)間Table 1 The processing time of the original algorithm for single frame signal
RT1052芯片支持ARM公司的CMSIS-DSP庫(kù)函數(shù),能更快地執(zhí)行信號(hào)處理運(yùn)算[13],將庫(kù)文件arm_cortexM7lfdp_math.lib添加到工程中.
對(duì)于32 kHz采樣率的音頻降噪處理,需要通過(guò)正交鏡像濾波器進(jìn)行子帶分離.WebRTC的分析濾波器組由基于全通濾波器的多相網(wǎng)絡(luò)實(shí)現(xiàn),所引起的相位失真幾乎被綜合濾波器組所平衡,實(shí)現(xiàn)信號(hào)的完全重構(gòu),其結(jié)構(gòu)如圖2所示[14-15].
圖2 兩通道正交鏡像濾波器結(jié)構(gòu)圖Fig.2 Structure of two-channel quadrature mirror filter
每幀共需要執(zhí)行4次濾波運(yùn)算,即H0、H1與G0、G1,其傳遞函數(shù)為
(11)
(12)
其中,kj,i為源碼給出的濾波器系數(shù).
WebRTC項(xiàng)目中開(kāi)源降噪代碼的級(jí)聯(lián)全通濾波通過(guò)WebRtcSpl_AllPassQMF函數(shù)實(shí)現(xiàn),對(duì)輸入信號(hào)在數(shù)字頻率0.5π處進(jìn)行分頻,在RT1052中,每幀執(zhí)行4次濾波共需要204 μs.在CMSIS-DSP庫(kù)中有arm_biquad_cascade_df1_f32函數(shù),用于實(shí)現(xiàn)直接I型雙二階級(jí)聯(lián)IIR濾波.用它替代WebRtcSpl_AllPassQMF函數(shù),每幀執(zhí)行4次濾波只需134 μs.
對(duì)于48 kHz采樣率的音頻降噪處理,需要通過(guò)余弦調(diào)制濾波器進(jìn)行子帶分離(圖3),由線性相位低通原型濾波器進(jìn)行余弦調(diào)制來(lái)實(shí)現(xiàn)[16-17].
圖3 三通道余弦調(diào)制濾波器流程圖Fig.3 Flow chart of three-channel cosine modulation filter
每幀共需要執(zhí)行24次稀疏FIR濾波運(yùn)算,即Hj,i和Gj,i,原降噪代碼中通過(guò)SparseFIRFilter函數(shù)實(shí)現(xiàn),在RT1052中執(zhí)行24次濾波共需要3.27 ms.CMSIS-DSP庫(kù)中的arm_fir_sparse_f32函數(shù)也能實(shí)現(xiàn)稀疏FIR濾波,用該函數(shù)替代SparseFIRFilter函數(shù)后,執(zhí)行24次濾波只需2.09 ms.
此外,原降噪代碼中針對(duì)數(shù)組的數(shù)學(xué)運(yùn)算,也用CMSIS庫(kù)函數(shù)進(jìn)行替換.48 kHz音頻信號(hào)的降噪結(jié)果見(jiàn)圖4,優(yōu)化前后的處理結(jié)果一致.
圖4 48 kHz音頻信號(hào)的降噪結(jié)果Fig.4 Noise reduction results of 48kHz audio signal
開(kāi)啟FPU并測(cè)量單幀信號(hào)的處理時(shí)間,由表2可知優(yōu)化算法執(zhí)行時(shí)間更少.
表2 優(yōu)化算法對(duì)單幀信號(hào)的處理時(shí)間Table 2 The processing time of the optimization algorithm for single frame signal
靜音時(shí)沒(méi)有噪聲信號(hào),此時(shí)降噪算法理論上不能更新噪聲參數(shù),而WebRTC降噪代碼對(duì)靜音的判斷依據(jù)是輸入信號(hào)的能量為0.但在實(shí)際應(yīng)用中由于存在電路噪聲,關(guān)閉音頻輸入設(shè)備時(shí)并不能滿足能量為0的條件,仍會(huì)更新噪聲參數(shù),導(dǎo)致當(dāng)音頻輸入設(shè)備重新開(kāi)啟時(shí),需一段時(shí)間重新收斂噪聲參數(shù).
為解決這個(gè)問(wèn)題,在原有算法的基礎(chǔ)上增加語(yǔ)音活動(dòng)檢測(cè)器(VAD),若判定為靜音狀態(tài),則不更新噪聲參數(shù),算法的處理流程如圖5所示.
圖5 語(yǔ)音活動(dòng)檢測(cè)器的處理流程Fig.5 Flow chart of voice activity detector
語(yǔ)音活動(dòng)檢測(cè)主要從功率譜的角度進(jìn)行分析,對(duì)上述的帶噪信號(hào)幅度譜Y(,k)平方得到帶噪信號(hào)功率譜P(,k),并通過(guò)式(13)的平滑得到S(,k).
S(,k)=
(13)
采用Martin[18]提出的最小值搜索法,在r個(gè)連續(xù)的平滑功率譜密度估計(jì)S(,k)中尋找最小值Pmin(,k).該方法每幀每個(gè)頻點(diǎn)只需要做一次比較,但在噪聲增大的過(guò)程中,最小值搜索最多會(huì)有2r幀的延遲.
當(dāng)某頻點(diǎn)的S(,k)小于Pmin(,k)的5倍時(shí),則根據(jù)式(14)對(duì)該頻點(diǎn)的噪聲估計(jì)D(,k)平滑更新.
D(,k)=max{0,[(1-β)·D(-1,k)+
β·P(,k)]}
(14)
其中,β為權(quán)重因子,β=max{0.03,1/(+1)},隨著幀數(shù)的增加,噪聲譜D(,k)的變化逐漸穩(wěn)定.
結(jié)合判決引導(dǎo)法估計(jì)先驗(yàn)信噪比ξ(,k)有
ξ(,k)=[1-α(,
α(,
(15)
其中,α(,k)為權(quán)重調(diào)節(jié)因子,由式(16)得到信噪比越大,則越增加當(dāng)前先驗(yàn)信噪比最大似然估值的權(quán)重,減少ξ(,k)的估計(jì)偏差.
α(,
(16)
其中,A(-1,k)為上一幀的純凈語(yǔ)音功率譜估計(jì),采用幅度u次方的最優(yōu)MMSE估計(jì)器[19],得到純凈語(yǔ)音幅度譜估計(jì)為
(,
(17)
根據(jù)Ephraim等[20]提出的語(yǔ)音幅度期望估計(jì),并采用高斯統(tǒng)計(jì)模型得
E{Cu(,k)|Y(,k)}=
(18)
其中,c(,k)和φ(,k)分別是隨機(jī)變量C(,k)的幅度和相位的實(shí)際值,ε(,k)和υ(,k)的定義式為
(19)
其中,γ(,k)為后驗(yàn)信噪比,γ(,k)=P(,k)/D(,k).
聯(lián)合式(17)和式(18)并化簡(jiǎn)得
(20)
其中,Γ(·)為伽瑪函數(shù),Φ(·)為合流超幾何函數(shù).
文獻(xiàn)[19]指出,冪指數(shù)u影響純凈語(yǔ)音幅度譜(,k)的估計(jì),u值越大,則(,k)的估計(jì)越大,當(dāng)u=1時(shí)為線性MMSE幅度估計(jì)器,(,k)的估計(jì)偏大,而u趨近于0時(shí)接近對(duì)數(shù)MMSE估計(jì)器,(,k)的估計(jì)偏小,因此,折中選取u=0.5,則有
Φ(-0.25,1;-υ(,k))2=
Y(,k)=G(,k)·Y(,k)
(21)
那么,平滑的純凈語(yǔ)音功率譜估計(jì)A(,k)為
A(,k)=0.2×A(-1,k)+0.8×
G2(,k)·Y2(,k)
(22)
最后,由式(23)得到平滑的先驗(yàn)信噪比ζ(,k),其平均值)代入到式(24)得到語(yǔ)音幀的概率值p().若語(yǔ)音概率小于0.25,則判定為靜音段,不更新噪聲參數(shù),反之則執(zhí)行原降噪算法.
ζ(,k)=0.7×ζ(-1,k)+0.3×ξ(,k)
(23)
p(,k)
(24)
以RT1052開(kāi)發(fā)板作為測(cè)試平臺(tái),調(diào)節(jié)音頻輸入設(shè)備的音量,通過(guò)多次實(shí)驗(yàn),靜音段的平均能量大約為非靜音段的10-2~10-4倍.
用Cooledit軟件產(chǎn)生一段5 s的白噪聲信號(hào),其平均能量為前述audio1信號(hào)平均能量的0.01倍,用于模擬音頻輸入設(shè)備處于關(guān)閉狀態(tài)時(shí)的電噪聲.以“audio1+電噪聲+audio1”組合成audio2信號(hào),并作為輸入信號(hào),通過(guò)軟件仿真得到的降噪處理結(jié)果見(jiàn)圖6.原算法在第20~24 s處需要進(jìn)行參數(shù)收斂,而改進(jìn)算法則不需要重新收斂.
圖6 48 kHz音頻信號(hào)的測(cè)試結(jié)果Fig.6 Test results of 48 kHz audio signal
對(duì)處理結(jié)果進(jìn)行PESQ評(píng)分[21],其結(jié)果見(jiàn)表3,說(shuō)明增加靜音判斷算法后的處理效果更好.
表3 算法處理結(jié)果的PESQ評(píng)分Table 3 PESQ score of algorithm evolution
當(dāng)然,對(duì)輸入信號(hào)增加靜音判斷也會(huì)加大運(yùn)算量.同樣以線路輸入的方式將audio1音頻信號(hào)傳給開(kāi)發(fā)板,開(kāi)啟FPU并測(cè)量單幀信號(hào)的處理時(shí)間,結(jié)果見(jiàn)表4.
表4 改進(jìn)算法對(duì)單幀信號(hào)的處理時(shí)間Table 4 Processing time of improved algorithm for single frame signal
相比于增加靜音判斷前的情況,只是略微增加了執(zhí)行時(shí)間,卻有效地解決了算法重新收斂的問(wèn)題.
本文實(shí)現(xiàn)了將WebRTC降噪算法移植到RT1052微處理器上.通過(guò)開(kāi)啟硬件FPU和使用CMSIS-DSP庫(kù)優(yōu)化,縮短算法運(yùn)算時(shí)間,再結(jié)合VAD檢測(cè)靜音段,避免算法在靜音段更新噪聲參數(shù),靜音段結(jié)束后算法無(wú)需重新收斂.測(cè)試結(jié)果證明了方法的有效性.
廣州大學(xué)學(xué)報(bào)(自然科學(xué)版)2020年4期