一、算法函數調用關系
算法的主要函數調用關系如下:
1、初始化子產品
//設定特征提取參數
set_feature_extraction_parameters()
//特征參數提取
FeatureParameterExtraction()
//初始化狀态
WebRtcNs_InitCore()
//改變噪聲抑制方法的激增性
WebRtcNs_set_policy_core()
2、分析子產品
//噪聲抑制分析子產品
WebRtcNs_AnalyzeCore()
//更新資料緩沖
UpdateBuffer()
//計算緩沖區的能量
Energy()
//窗緩沖區
Windowing()
//将信号從時域變換到頻域
FFT()
//噪聲估計
NoiseEstimation()
//計算信噪比
ComputeSnr()
//特征值更新(主要是譜差和平坦度)
FeatureUpdate()
//計算譜平坦度
ComputeSpectralFlatness()
//計算譜差異
ComputeSpectralDifference()
//計算語音/噪聲機率
SpeechNoiseProb()
//更新噪聲估計
UpdateNoiseEstimate()
//計算緩沖區的能量
Energy()
//窗緩沖區
Windowing()
3、處理子產品
//噪聲抑制處理子產品
WebRtcNs_ProcessCore()
//更新資料緩沖
UpdateBuffer()
//計算緩沖區的能量
Energy()
/ /窗緩沖區
Windowing()
//将信号從時域變換到頻域
FFT()
//估計先驗信噪比判決定向和計算基于DD的維納濾波器
ComputeDdBasedWienerFilter()
//将信号從頻率變換到時域
IFFT()
//窗緩沖區
Windowing()
//更新資料緩沖
UpdateBuffer()
二、算法原理
算法的核心思想是采用譜減法計算噪聲估計和運用維納濾波器抑制估計出來的噪聲。譜減法是最常用的一種噪聲抑制方法,它基于一個簡單的原理:假設噪聲為加性噪聲,通過從帶噪語音譜中減去對噪聲譜的估計,就可以得到純淨的信号譜。在不存在語音信号的期間,可以對噪聲譜進行估計和更新。做出這一假設是基于噪聲的平穩性,或者是一種慢變的過程,這樣噪聲的頻譜在每次更新之間不會有大的改變。增強信号通過計算估計信号譜的逆離散傅裡葉變換得到,其相位仍然使用帶噪信号的相位。在計算上這種算法比較簡單,因為其隻包含一次傅裡葉變換和反變換。
三、原理框圖及核心公式
1、WebrtcAnalyzeCore子產品
在噪聲抑制子產品WebrtcAnalyzeCore中,輸入信号經過時頻變換後分成三路信号,分别對這三路信号進行計算頻譜平坦度、計算信噪比、計算頻譜差異。最後将這三個相應的特征值輸入到語音/噪聲機率更新模闆中。該子產品具體的流程圖以及功能介紹如下:
輸入信号:指在輸入信号中從麥克風采集到的信号,其表達式為
時頻變換:将輸入信号進行時頻變換,線性模型在語音狀态下的表達式是
計算頻譜平坦度:語音頻往往會在基頻和諧波中出現峰值,用于區分語音和噪聲。其計算公式是
其中N表示STFT後頻率點數,每個頻帶包括大量的頻率點。
計算信噪比:根據分位數噪聲估計計算先後信噪比。先驗信噪比是與噪聲功率相關的純淨信号功率的期望值,其計算公式為
而後驗信噪比是指觀測到的能量與噪聲功率相關的輸入功率相比的瞬态信噪比,其表達式是
計算頻譜偏差:用于測量輸入頻譜與噪聲頻譜的偏差。其公式為
LRT均值特征:經過時間處理的LR因子的計算公式如下:
經過時間平滑處理的似然比(LR)因子的幾何平均數是語音/噪聲狀态的可靠名額:
語音/噪聲機率更新模闆:在語音/噪聲機率計算時,使用高斯假設作為語音PDF模型,進而獲得似然比。在其它模型中,機率密度PDF模型也可以用作測量似然比的基礎,包括拉普拉斯算子,伽馬,超高斯。舉個例子,當高斯假設可合理表示噪聲時,該假設并不一定适用于語音,尤其是在較短的時幀中(如~10ms)。在這種情況下,可以使用另一種語音PDF模型,但這很可能會增加複雜性。
2、WebrtcProcesCore子產品
在噪聲抑制子產品WebrtcProcesCore中,技術方案是采用維納濾波抑制估計出來的噪聲。其抑制過程為根據計算出的先後信噪比計算出語音/噪聲的機率,根據計算出的語音機率,更新每幀中的初始噪聲估計。将計算出的噪聲估計進行維納濾波得到估計的語音信号,再進行頻時變換即輸出信号為所求信号。該子產品具體的流程圖以及功能介紹如下: