基於深度學習的單通道語音增強實現(一)

  其實這個系列是我的畢業設計,很早就準備寫了,一直拖延症比較嚴重,終於在今天有機會總結總結了。首先描述一下要做的工作。

一、工作描述

  用於語音增強的基於純DNN的mask預測。(其實純DNN的效果確實不是特別好,當初看到了最簡單的一篇文章就直接用他的結構做了。

二、環境描述

  深度學習框架:PyTorch
  數據集:上傳百度網盤中…(其實就是TIMIT和NOISE-92的噪聲混合的數據

三、實驗設計

3.1 實驗總體設計

  如圖,實驗可以分成兩個階段,訓練階段和測試階段。訓練階段使用我們自己混合好的帶噪語音對模型進行訓練;測試階段使用測試數據評估模型的性能。
實驗設計圖

3.2 訓練階段

3.2.1 數據合成

  訓練階段我們需要根據需要合成不同信噪比的數據,合成過程見利用純淨語音和噪聲合成不同信噪比的訓練數據
  訓練數據可以在這裏獲取。

3.2.2 短時傅里葉變換(STFT)

  對於短時傅里葉變換,這裏有一些小坑需要注意:

  • 加窗時候的窗函數必須統一。切忌訓練網絡時一種窗函數,預測語音時使用另一種窗函數
  • STFT方法必須一致。STFT的方法衆多,比如librosa的stft()方法以及網上一些大神自己寫的STFT方法,對於一個實驗,所有用到的STFT的地方必須使用同一個STFT方法,這樣才能讓你的結論更有說服力。
  • 對於數據進行stft然後再進行istft(逆傅里葉變換)是無法恢復到原來數據大小的,因爲在STFT過程中進行了對齊處理,可能會進行丟棄/補齊操作
3.2.3 擴幀

  本次實驗是使用純DNN實現,如果不進行擴幀,網絡就是161特徵預測161特徵(STFT之後是共軛複數,所以取一半也就是161維即可,這個操作庫函數一半都會自動操作,無需手動截取161),這樣就是純粹的線性預測線性,就丟失了語音的時間序列特性。因此我們對輸入幀進行幀擴展,從STFT的結果(T,F)擴展爲(T,F * 11)即向前向後各擴5,使用11特徵預測1特徵。

3.2.4 訓練目標

  本次實驗是採用mask的方法進行降噪,因此我們的目標爲IRM(t,f)IRM(t,f)
(3.1)IRM(t,f)=S(t,f)2S(t,f)2+N(t,f)2IRM(t,f)= \sqrt {\frac{\lvert S(t,f)\lvert^2}{\lvert S(t,f)\lvert^2 + \lvert N(t,f)\lvert^2}} \tag{3.1}
其中S(t,f)2\lvert S(t,f)\lvert^2爲純淨語音的能量譜,N(t,f)2\lvert N(t,f)\lvert^2爲噪聲的能量譜。

3.3 評價標準

  本次實驗使用短時客觀可懂度(Short-Time Objective Intelligibility, STOI)和主觀語音質量評估(Perceptual Evaluation of Speech Quality, PESQ)來衡量預測語音的優劣。

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