目录

  • 简介
  • 信号模型
  • WPE 算法(Weighted prediction error)
  • TVG 模型(time-varying Gaussian model)
  • 目标函数
  • 迭代求权重离线解
  • 参考文献
  • 附Python 代码
  • 更新:


简介

背景噪声和空间内声反射产生的混响是声学信号处理和远场语音识别的两大障碍。WPE(Weighted Prediction Error)算法主要用于去除信号中的混响成分,此算法基于线性预测估计,是目前针对去混响(dereverberation)问题的主流算法之一。

信号模型

假设观测信号由D个麦克风采集,则该信号由STFT变换之后可表示为一个D维向量Java混音 噪声抑制 混响抑制算法_Java混音 噪声抑制,其中时间index为t,频率index为f。

在远场情境之下,信号被卷性混响(观测信号为干净信号与混响的卷积)干扰。我们认为信号靠近声源的部分为空间冲击响应(RIR room impulse response),是有益的信号,而尾部的信号干扰ASR,需要被消除。我们假设信号主峰之后的50ms为Java混音 噪声抑制 混响抑制算法_信号处理_02,剩下的部分为Java混音 噪声抑制 混响抑制算法_语音识别_03

在STFT域我们建立如下模型:

Java混音 噪声抑制 混响抑制算法_算法_04

Java混音 噪声抑制 混响抑制算法_信号处理_05

WPE 算法(Weighted prediction error)

WPE的主要思路是首先估计信号的混响尾部,然后再从观测信号中减去混响尾部,得到对弱混响信号的极大似然意义下的最优估计。

混响信号的时域可表达为:
Java混音 噪声抑制 混响抑制算法_语音识别_06
经过STFT变换后记作:
Java混音 噪声抑制 混响抑制算法_信号处理_07

Java混音 噪声抑制 混响抑制算法_语音识别_08为麦克风的编号,Java混音 噪声抑制 混响抑制算法_语音识别_09为滤波器的抽头(Filter Tap)数,预测步长Java混音 噪声抑制 混响抑制算法_Java混音 噪声抑制_10Java混音 噪声抑制 混响抑制算法_权重_11 代表滤波器权重,Java混音 噪声抑制 混响抑制算法_算法_12为观测信号。下图描述了WPE一步预测。

Java混音 噪声抑制 混响抑制算法_权重_13

TVG 模型(time-varying Gaussian model)

WPE基于单通道干净语音服从均值为零,方差为Java混音 噪声抑制 混响抑制算法_算法_14的复高斯分布,且各通道独立的假设:

Java混音 噪声抑制 混响抑制算法_语音识别_15

(1)

对于多通道语音分布则为:

Java混音 噪声抑制 混响抑制算法_语音识别_16

(2)

目标函数

因为TVG模型是时频域独立的模型,对于一个frequency bin, 似然函数可写为:

Java混音 噪声抑制 混响抑制算法_权重_17

(3)

其中Java混音 噪声抑制 混响抑制算法_Java混音 噪声抑制_18为未知的方差,Java混音 噪声抑制 混响抑制算法_权重_19为权重,我们希望得到的信号为Java混音 噪声抑制 混响抑制算法_Java混音 噪声抑制_20Java混音 噪声抑制 混响抑制算法_Java混音 噪声抑制_21为time index。

用极大似然法估计Java混音 噪声抑制 混响抑制算法_Java混音 噪声抑制_18Java混音 噪声抑制 混响抑制算法_权重_19,上式等价于最小化负log似然函数,问题可转化为求解如下优化问题:

Java混音 噪声抑制 混响抑制算法_信号处理_24

(4)

迭代求权重离线解

默认流程为不断迭代优化方差Java混音 噪声抑制 混响抑制算法_算法_14和滤波器权重系数Java混音 噪声抑制 混响抑制算法_算法_26

Java混音 噪声抑制 混响抑制算法_语音识别_27

  1. 估计权重g
    假设方差Java混音 噪声抑制 混响抑制算法_语音识别_28固定,我们可以转化为最小方差问题(LS Problem)求解:
  2. Java混音 噪声抑制 混响抑制算法_权重_29

  3. (5)
    由信号的混响模型可知,
  4. Java混音 噪声抑制 混响抑制算法_权重_30

  5. (6)
    将公式(6)代入(5)中,得到对Java混音 噪声抑制 混响抑制算法_语音识别_31的估计:
  6. Java混音 噪声抑制 混响抑制算法_算法_32

  7. (7)
  8. 估计方差Java混音 噪声抑制 混响抑制算法_语音识别_28

为了最小化 cost fucntion(4),这一步假设Java混音 噪声抑制 混响抑制算法_权重_19固定,估计的Java混音 噪声抑制 混响抑制算法_算法_35可以用(6)式计算,则估计的方差为:

Java混音 噪声抑制 混响抑制算法_信号处理_36


这个问题的解表示为:

Java混音 噪声抑制 混响抑制算法_信号处理_37


实际中,为了防止更新时被除数为0,我们一般规定一个最低阈值Java混音 噪声抑制 混响抑制算法_算法_38,取:

Java混音 噪声抑制 混响抑制算法_语音识别_39


这样的迭代程序不断重复,直到满足收敛条件满足或达到最大的迭代次数。

通常初始化方差为:Java混音 噪声抑制 混响抑制算法_信号处理_40

这与初始化clean speech Java混音 噪声抑制 混响抑制算法_语音识别_41等价。

  1. 算法流程:

以上就是离线WPE算法,目前也有各种对WPE算法的改进,例如:预训练的log-spectral先验 [4],对clean speech的时变Laplacain模型[5],还有一些基于自回归模型的方法[6]。

参考文献

[1] Yoshioka, Takuya, and Tomohiro Nakatani. “Generalization of multi-channel linear prediction methods for blind MIMO impulse response shortening.” IEEE Transactions on Audio, Speech, and Language Processing 20.10 (2012): 2707-2720.

[2] L. Drude, J. Heymann, C. Boeddeker和R. Haeb-Umbach, “NARA-WPE: A Python package for weighted prediction error dereverberation in Numpy and Tensorflow for online and offline processing”, Speech Communication; 13th ITG-Symposium, 10. 2018, pp1–5.

[3] A. Jukić, T. van Waterschoot, T. Gerkmann and S. Doclo, “Multi-Channel Linear Prediction-Based Speech Dereverberation With Sparse Priors,” in IEEE/ACM Transactions on Audio, Speech, and Language Processing, vol. 23, no. 9, pp. 1509-1520, Sept. 2015. doi: 10.1109/TASLP.2015.2438549

[4] Y. Iwata and T. Nakatani, “Introduction of speech log-spectral priors into dereverberation based on Itakura-Saito distance minimization,” in Proc. IEEE Int. Conf. Acoust., Speech, Signal Process. (ICASSP), Kyoto, Japan, May 2012, pp. 245–248

[5] A. Jukić and S. Doclo, “Speech dereverberation using weighted prediction error with Laplacian model of the desired signal,” in Proc. IEEE Int. Conf. Acoust., Speech, Signal Process. (ICASSP), Florence, Italy, May 2014, pp. 5172–5176.

[6] M. Togami and Y. Kawaguchi, “Noise robust speech dereverberation with Kalman smoother,” in Proc. IEEE Int. Conf. Acoust., Speech, Signal Process. (ICASSP), Vancouver, BC, Canada, May 2013, pp. 7447–7451

附Python 代码


更新:

有很多人私信问代码该怎么用,下面贴一下我的使用。

我输入是的melspectrogram,参数具体问题具体分析,欢迎大家交流探讨。

Java混音 噪声抑制 混响抑制算法_算法_42