语音去混响之MCLP算法

概述 MCLP(Multichannel Linear Prediction)算法也被称为WPE(Weighted Prediction Error)算法,是实现语音信号去混响的一种方法。本文关注MISO(Multiple Input Single Output)版本的MCLP算法的原理,即输入为多个麦克风接收信号,输出为一路去除混响之后的语音信号。主要内容包括MCLP模型、待求解的目标函数、离线解,自适应解,并给出仿真波形。
符号表示:对语音信号做短时傅里叶变换, n n n表示帧号, l l l表示频点, M M M表示麦克风个数。 y 1 , n , l y_{1,n,l} y1,n,l?表示第一个麦克风接收的第 n n n帧第 l l l个频点的信号, s n , l s_{n,l} sn,l?表示纯净信号,将多个麦克风的接收信号写成向量形式为 y n , l = ( y 1 , n , l , y 2 , n , l , . . . , y M , n , l ) T \textbf{y}_{n,l}=(y_{1,n,l},y_{2,n,l},...,y_{M,n,l})^T yn,l?=(y1,n,l?,y2,n,l?,...,yM,n,l?)T,将 n ? Δ n-\Delta n?Δ帧到 n ? Δ ? K + 1 n-\Delta-K+1 n?Δ?K+1帧的接收信号记为 y ˉ n ? Δ , l = ( y n ? Δ , l T , . . . , y n ? Δ ? K + 1 , l T ) T \bar{\textbf{y}}_{n-\Delta,l}=(\textbf{y}_{n-\Delta,l}^T,..., \textbf{y}_{n-\Delta-K+1,l}^T)^T yˉ?n?Δ,l?=(yn?Δ,lT?,...,yn?Δ?K+1,lT?)T。
原理 MCLP模型
MCLP模型表示当前接收信号由当前纯净信号与过去若干帧的接收信号线性组合而成。忽略噪声,用公式表示如下


y 1 , n , l = g l H y ˉ n ? Δ , l + s n , l y_{1,n,l}=\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}+s_{n,l} y1,n,l?=glH?yˉ?n?Δ,l?+sn,l?

这里 g l \textbf{g}_l gl?为长度为 M K MK MK的列向量,被称为线性系数(linear coefficients),去混响算法的目的就是估计出 g l \textbf{g}_l gl?,从当前接收信号 y 1 , n , l y_{1,n,l} y1,n,l?中减去混响部分“ g l H y ˉ n ? Δ , l \textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l} glH?yˉ?n?Δ,l?”,从而恢复出 s n , l s_{n,l} sn,l?。
目标函数
求解上述 g l \textbf{g}_l gl?的思路是最大化似然函数。假设已知 n = 1 n=1 n=1~ N N N帧的接收信号,则最优化问题表示为


m a x ∑ n = 1 N l o g p ( y 1 , n , l ) max \sum\limits_{n=1}^N log p(y_{1,n,l}) maxn=1∑N?logp(y1,n,l?)
<=> m a x ∑ n = 1 N l o g p ( y 1 , n , l ∣ s n , l ) p ( s n , l ) max \sum\limits_{n=1}^N log p(y_{1,n,l}|s_{n,l})p(s_{n,l}) maxn=1∑N?logp(y1,n,l?∣sn,l?)p(sn,l?)

由MCLP模型,上式中 p ( y 1 , n , l ∣ s n , l ) = δ ( y 1 , n , l ? g l H y ˉ n ? Δ , l ) p(y_{1,n,l}|s_{n,l})=\delta(y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}) p(y1,n,l?∣sn,l?)=δ(y1,n,l??glH?yˉ?n?Δ,l?),并假设 s n , l s_{n,l} sn,l?服从时变复高斯分布,即 s n , l s_{n,l} sn,l?~ N C ( 0 , λ n , l ) N_C(0,\lambda_{n,l}) NC?(0,λn,l?),将高斯分布的概率表达式代入上式,可知上述最优化问题等价于

min ? λ n , l > 0 , g l ∑ n = 1 N ( ∣ s n , l ∣ 2 λ n , l + l o g π λ n , l ) \min \limits_{\lambda_{n,l}> 0,\textbf{g}_l} \sum\limits_{n=1}^N (\frac{|s_{n,l}|^2}{\lambda_{n,l}}+log\pi\lambda_{n,l}) λn,l?>0,gl?min?n=1∑N?(λn,l?∣sn,l?∣2?+logπλn,l?)

离线解
上式目标函数包含两组参数: g l \textbf{g}_l gl?与 λ n , l \lambda_{n,l} λn,l?。可用EM算法求解,首先固定 g l \textbf{g}_l gl?不变求解 λ n , l \lambda_{n,l} λn,l?,有


λ n , l = ∣ y 1 , n , l ? g l H y ˉ n ? Δ , l ∣ 2 \lambda_{n,l}=|y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}|^2 λn,l?=∣y1,n,l??glH?yˉ?n?Δ,l?∣2

再固定 λ n , l \lambda_{n,l} λn,l?不变求解 g l \textbf{g}_l gl?,即

min ? g l ∑ n = 1 N ∣ y 1 , n , l ? g l H y ˉ n ? Δ , l ∣ 2 λ n , l \min \limits_{\textbf{g}_l} \sum\limits_{n=1}^N \frac{|y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}|^2}{\lambda_{n,l}} gl?min?n=1∑N?λn,l?∣y1,n,l??glH?yˉ?n?Δ,l?∣2?

注意到上式目标函数为 g l \textbf{g}_l gl?的二次函数,对 g l \textbf{g}_l gl?求导置零可得解析解:

g l = ( ∑ n = 1 N y ˉ n ? Δ , l y ˉ n ? Δ , l H λ n , l ) ? 1 ( y ˉ n ? Δ , l y 1 , n , l ? λ n , l ) \textbf{g}_l=(\frac{\sum\limits_{n=1}^N \bar{\textbf{y}}_{n-\Delta,l}\bar{\textbf{y}}_{n-\Delta,l}^H}{\lambda_{n,l}})^{-1}(\frac{\bar{\textbf{y}}_{n-\Delta,l} y_{1,n,l}^*}{\lambda_{n,l}}) gl?=(λn,l?n=1∑N?yˉ?n?Δ,l?yˉ?n?Δ,lH??)?1(λn,l?yˉ?n?Δ,l?y1,n,l???)

不断重复上式计算 g l \textbf{g}_l gl?与 λ n , l \lambda_{n,l} λn,l?直至收敛即可。该 g l \textbf{g}_l gl?的解析解通常被称为离线解,因为需要已知 n = 1 n=1 n=1~ N N N帧所有接收信号来计算去混响之后的信号,属于“batch processing”。下一部分讨论 g l \textbf{g}_l gl?的自适应解。
自适应解
自适应解也称为在线解,使算法可用于实时处理信号。将求解 g l \textbf{g}_l gl?的目标函数加入指数因子,


min ? g l ∑ n = 1 N α N ? n ∣ y 1 , n , l ? g l H y ˉ n ? Δ , l ∣ 2 λ n , l \min \limits_{\textbf{g}_l} \sum\limits_{n=1}^N \alpha^{N-n}\frac{|y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}|^2}{\lambda_{n,l}} gl?min?n=1∑N?αN?nλn,l?∣y1,n,l??glH?yˉ?n?Δ,l?∣2?

采用RLS(Recursive Least Square)算法求解上式,可得

k l ( n ) = Σ l ( n ? 1 ) y ˉ n ? Δ , l α λ n , l + y ˉ n ? Δ , l H Σ l ( n ? 1 ) y ˉ n ? Δ , l \textbf{k}_l(n)=\frac{\Sigma_l(n-1) \bar{\textbf{y}}_{n-\Delta,l} }{\alpha \lambda_{n,l}+\bar{\textbf{y}}_{n-\Delta,l}^H \Sigma_l(n-1)\bar{\textbf{y}}_{n-\Delta,l}} kl?(n)=αλn,l?+yˉ?n?Δ,lH?Σl?(n?1)yˉ?n?Δ,l?Σl?(n?1)yˉ?n?Δ,l??
Σ l ( n ) = Σ l ( n ? 1 ) ? k l ( n ) y ˉ n ? Δ , l H Σ l ( n ? 1 ) α \Sigma_l(n)=\frac{\Sigma_l(n-1)-\textbf{k}_l(n)\bar{\textbf{y}}_{n-\Delta,l}^H \Sigma_l(n-1)}{\alpha} Σl?(n)=αΣl?(n?1)?kl?(n)yˉ?n?Δ,lH?Σl?(n?1)?
g l ( n ) = g l ( n ? 1 ) + k l ( n ) ( y 1 , n , l ? g l H ( n ? 1 ) y ˉ n ? Δ , l ) \textbf{g}_l(n)=\textbf{g}_l(n-1)+\textbf{k}_l(n)(y_{1,n,l}-\textbf{g}_l^H(n-1) \bar{\textbf{y}}_{n-\Delta,l}) gl?(n)=gl?(n?1)+kl?(n)(y1,n,l??glH?(n?1)yˉ?n?Δ,l?)

其中 k l \textbf{k}_l kl?为 M K MK MK长度的列向量, Σ l \Sigma_l Σl?为 M K × M K MK\times MK MK×MK的复矩阵。
仿真图形 使用麦克风阵列为彼此间距6cm的四麦克风圆阵,在室内带一定混响的安静环境采集语音数据。采用上文所述自适应MCLP算法处理语音数据,输出一路数据,将其中一路输入信号与算法输出信号对比如下。从波形上可看出处理后的语音拖尾变小,可见MCLP能有效去除混响。


语音去混响之MCLP算法
文章图片

图1 MCLP算法处理语音

Reference 本文主要参照[1]和[2],其中离线解部分参照[1],自适应解部分参照[2]。
常见的MCLP算法还包括SISO(Single Input Single Output)版本和MIMO(Multiple Input Multiple Output)版本。其中SISO为本文MISO版本的算法的一个特例,上述推导过程只需修改使M=1即可。MIMO版本通常要求输出的多路去混响信号保持TDOA信息不变,以便后续接波束算法。MIMO版本的MCLP算法推导与本文有所不同,离线解可参照[3]、自适应解可参照[4]。
【语音去混响之MCLP算法】[1] GB/T 7714 Jukic A , Van Waterschoot T , Gerkmann T , et al. Multi-Channel Linear Prediction-Based Speech Dereverberation With Sparse Priors[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2015, 23(9):1509-1520.
[2] Yoshioka T , Tachibana H , Nakatani T , et al. Adaptive dereverberation of speech signals with speaker-position change detection[C]// IEEE International Conference on Acoustics. IEEE, 2009.
[3] Yoshioka T , Nakatani T . Generalization of Multi-Channel Linear Prediction Methods for Blind MIMO Impulse Response Shortening[J]. IEEE Transactions on Audio Speech & Language Processing, 2012, 20(10):2707-2720.
[4] Nakatani T , Yoshioka T . Dereverberation for Reverberation-Robust Microphone Arrays[C]// Signal Processing Conference. IEEE, 2014.

    推荐阅读