【转】提纲挈领webrtc之NS(noise suppression)模块
原文地址:https://www.cnblogs.com/dylancao/p/7667750.html
?
?
Noise suppression,就是大家說的降噪。這種降噪是把人聲和非人聲區(qū)分開來,把非人聲當(dāng)成噪聲。
一段包含人聲和噪聲的音頻經(jīng)過該模塊處理,從理論上講,只剩下人聲了。
webrtc的NS在業(yè)內(nèi)還是赫赫有名的,通過實際對比測試,我們發(fā)現(xiàn)webrtc的降噪的確是性能和穩(wěn)定性
都要高于同類開源算法。
webrtc的ns原理是這樣的:把啟動前50幀的數(shù)據(jù)拿來構(gòu)建噪聲模型,把啟動前200幀的信號強度用來計
算歸一化的頻譜差值計算。根據(jù)這兩個模型使用概率目的函數(shù)來計算出每幀的信噪比并區(qū)分出噪聲和聲音,
然后根據(jù)計算出的信噪比在頻域使用維納濾波器對噪聲信號進行噪聲消除,最后在根據(jù)降噪前后的能量比
和信號噪聲似然比對降噪后的數(shù)據(jù)進行修復(fù)和調(diào)整后輸出。
webrtc的NS使用分析:webrtc的降噪支持三種采樣率,8k,16k和32k,其它的采樣率的降噪可以通過
瞎采樣來完成。降噪模式有四種:分別是,0,1,2,3 四種模式的降噪量依次增加,筆者親自測過,一般是2比較
好,對聲音損失小,降噪效果又不錯。還有個比較重要的參數(shù)就是噪聲估計模型宏定義,如下所示,推薦在
系統(tǒng)計算能力夠的情況下使用第三種,效果最好。
#define PROCESS_FLOW_0 // Use the traditional method.
#define PROCESS_FLOW_1 // Use traditional with DD estimate of prior SNR.
#define PROCESS_FLOW_2 // Use the new method of speech/noise classification.
使用方法和代碼調(diào)用:
初始化:申請內(nèi)存,設(shè)置采樣率和降噪模式。
WebRtcNs_Create(&pNS_inst);
WebRtcNs_Init(pNS_inst,nSample);
WebRtcNs_set_policy(pNS_inst,nMode);
處理主函數(shù):針對降噪的幀進行處理,默認是10ms的幀長度。
int WebRtcNs_Process(NsHandle* NS_inst, short* spframe, short* spframe_H,
short* outframe, short* outframe_H)
linux下可以直接編譯運行的代碼路徑:?https://github.com/DyLanCao/webrtc?
總結(jié)
以上是生活随笔為你收集整理的【转】提纲挈领webrtc之NS(noise suppression)模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RLock vs Lock
- 下一篇: 【转】补零与离散傅里叶变换的分辨率