基于深度学习的单通道语音增强实现(一)

  其实这个系列是我的毕业设计,很早就准备写了,一直拖延症比较严重,终于在今天有机会总结总结了。首先描述一下要做的工作。

一、工作描述

  用于语音增强的基于纯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)来衡量预测语音的优劣。

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