其實這個系列是我的畢業設計,很早就準備寫了,一直拖延症比較嚴重,終於在今天有機會總結總結了。首先描述一下要做的工作。
一、工作描述
用於語音增強的基於純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的方法進行降噪,因此我們的目標爲:
其中爲純淨語音的能量譜,爲噪聲的能量譜。
3.3 評價標準
本次實驗使用短時客觀可懂度(Short-Time Objective Intelligibility, STOI)和主觀語音質量評估(Perceptual Evaluation of Speech Quality, PESQ)來衡量預測語音的優劣。