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