深度學習降噪方案-RNNoise源碼解析 - 特徵提取

RNNoise是一個採用音頻特徵抽取+深度神經網絡結合的降噪方案. 更多相關基本信息, 請查看 RNNoise學習和翻譯系列

目錄

1.讀取文件生成特徵的主循環

2. 構造不同場景和條件的訓練

3. 特徵和標記提取代碼

4. 特徵提取代碼


1.讀取文件生成特徵的主循環

Denoise.c 中的main函數是特徵提取部分的主流程.

循環之外的內容有:

  • 數據對象管理
  • 命令行參數分析
  • 文件操作
  • 跳過噪音開頭的幀

主循環主要做了三件事:

  • 定期生成隨機參數(參考第二節)
  • 特徵和標記提取運算(參考第三節)
  • 把特徵數據和標記數據寫到文件

這部分代碼邏輯來說就是: 循環讀取語音和噪音, 混成訓練數據, 併產生對應的特徵和標記數據.

其中, 數據片大小是20ms, 步進速度是10ms, 有10ms的重疊數據.

其框圖如下:

2. 構造不同場景和條件的訓練

一個有效的模型, 爲了能在現實場景下工作的很好, 必須要刷題, 也要實戰, 這意味着訓練用的數據必須花樣百出. 一種最基本的考慮是使用不同SNR的語音來進行訓練, 實驗表明使用SNR範圍較廣的訓練數據得到的訓練模型對不同的SNR有更好的支持度(參考鏈接的3.1節 SNR維度)

本模型中採用了以下幾種變化參數:

  • 語音增益 和 噪聲增益, 這兩者合起來可以表示不同的SNR還可以表示不同的音量範圍
  • 兩個隨機的二階濾波器, 模擬各種特殊的聲學場景
  • 最高截止頻率(lowpass), 用來模擬各種採集環境的頻率範圍

各取值的範圍:

  • 語音增益: 40~20dB, 10%概率變爲靜音
  • 噪音增益: 語音增益*30~20dB, 10%的概率不疊加噪音(這個10%和前面的10%乘數疊加的)
  • 濾波器係數: 0~0.75
  • Lowpass: FREQ_SIZE*50rand(1)/8, 當FREQ_SIZE爲481時, 取值範圍大概是60~3000

3. 特徵和標記提取代碼

該部分代碼的數據流向圖如下, 從中我們可以發現, 執行梳狀濾波那個函數是沒必要的:

其中比較關鍵的子函數有:

  • 特徵提取(參考第四節)
  • 幀分析: 計算fft和頻帶能量
  • 梳狀濾波: (本文先不涉及)
  • 疊加場景效果: 根據隨機產生的場景參數來疊加效果.

其中的幀分析和特徵提取部分都會緩存部分數據. 比如幀分析會緩存一幀的數據, 加上當前幀, 共20ms的數據用.

4. 特徵提取代碼

該部分代碼的數據流向圖如下:

其中比較關鍵的子函數有:

  • 特徵計算: 此處使用了一個環形buffer來計算導數和譜穩度
  • 基音估計: (本文先不涉及)
  • 幀分析: 如上節

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章