捋一捋相关性运算,以及DTD和NLP中的应用
- 相关性和相干性,有木有傻傻分不清
- 相关性
- 数字信号的相关运算
- 同维度信号的相关理解
- 相关--互相关--相干
- 回声消除过程如何套用这些知识
- 相关性/相干性检测在DT中的应用
- 时域的标量与向量结合的互相关方法
- 适合block处理的频域相干性方法
- Normalized正则化的互相关方法
- 小结
- 相干性在NLP/NRES中的应用理解
- 引申了解一下NRES的一般形式
- 参考
相关性和相干性,有木有傻傻分不清
这是容易混淆的两个概念,对应于英语分别是 correlation 和 coherence,原来英语也这么相似。翻阅了很多资料,给出的定义和描述也大同小异,但真的想一针见血的区分出来这两个概念,以至于看papers的时候不要脑子混浆浆的,那还要从频域的角度思考,相关性-correlation 应该理解为一种更为广泛的信号相似度评价指标,而相干性-coherence更加注重在某一个频率上两个信号相位的关系,即恒定相位差的两个同频信号(分量)具备相关(相干)性,所指的范围更加狭义了一些。也不知道这么理解靠谱不,严不严谨。具体到数字信号处理领域的话,我们评价时域信号的相似程度,往往用相关性来指示,有正相关,负相关或者不相关的说法,到了时域谱分析的时候,通常用相干性来评价某个子带频率是否相干。
相关性
Correlation in Psychology: Meaning, Types, Examples & coefficient这篇文章讲述了何为相关性,以及正相关、负相关和不相关的二维理解,引用它的图如下:
那具体到数字信号处理怎么来理解呢?你可以从x轴和y轴分别抽取一些点,这些点随着另外一些点有共性的正向或者反向生长。那么分别从两个值域中提取这些信号如果排列成一个队列,能否发现一些相关性的规律呢?这就提出了相关性检测的问题。
数字信号的相关运算
数字信号的相关性比较是一种计算两个序列相似性的数学方法。这里引申出来自相关和互相关,那么定义x和y两个(复数)序列的相关运算如下:
r x y ( L ) = ∑ n = − ∞ ∞ x ( n ) × y ∗ ( n + L ) r_{xy}(L)=\sum_{n=-\infty}^\infty x(n)\times y^*(n+L) rxy(L)=n=−∞∑∞x(n)×y∗(n+L)自相关 r x x ( L ) = ∑ n = − ∞ ∞ x ( n ) × x ∗ ( n + L ) r_{xx}(L)=\sum_{n=-\infty}^\infty x(n)\times x^*(n+L) rxx(L)=n=−∞∑∞x(n)×x∗(n+L)
自相关函数比较明显的看出当L=0时,会出现相关峰,而对于有限长序列这更加确认无疑,互相关的一种解释:两个(序列)函数如果具有相同周期分量的时候,它的极大值能体现这种周期性的分量(数(3)相关运算和卷积运算)。
同维度信号的相关理解
同维度信号可以理解为两组向量,在学习高维向量的相似度判定-距离产生了,美还在吗以及正交性,从內积开始到施密特正交化的时候我们可以用向量的办法来理解这种相关性计算,即这种相关是多维向量的内积,或者说一个向量到另一个向量的投影,如果内积为零,说明两个向量正交,即一点也不相关,如果内积越大说明两个向量有着千丝万缕的联系。这种联系就是高维空间的embedding,一般用夹角来表征:
s i m i l a r i t y c o s = c o s θ = a ⋅ b ∣ ∣ a ∣ ∣ ⋅ ∣ ∣ b ∣ ∣ = ∑ i = 1 n ( x i ∗ y i ) ∑ i = 1 n ( x i ) 2 ∗ ∑ i = 1 n ( y i ) 2 similarity_{cos}= cos\theta =\frac{a \cdot b}{||a|| \cdot ||b||}=\frac{\sum_{i=1}^n(x_i*y_i)}{\sqrt{\sum_{i=1}^n(x_i)^2}*\sqrt{\sum_{i=1}^n(y_i)^2}} similaritycos=cosθ=∣∣a∣∣⋅∣∣b∣∣a⋅b=∑i=1n(xi)2∗∑i=1n(yi)2∑i=1n(xi∗yi)这种归一化的相关性使得结果有了清晰的值域,+1为PositiveCorrelation,-1为NegativeCorrelation,0为NoCorrelation(待考证)。相关性运算结果能给出一个比较清晰的映射了。
相关–互相关–相干
实际应用中,自相关是理想主义者,用不到。互相关才是实用主义者,任何两片雪花都不会一模一样,任何一个源信息,经过传播后都会发生变化,令人无法再看出他们是不是兄弟姐妹,或者谁先谁后。相关性的判断能最大可能的告诉你这组序列的前世今生有何关联。而互相关从理论上很难得出相似度为1的结果,一个不大不小的值往往很令人迷惑,这时候就可以跑到频域去看看相干性的一些特性,进而对参与比较的信号有更深的认识。直观的理解可以先看下一个网站4.3.9 Coherence and Correlation,引用上面的定义
Coherence measures the degree of linear dependency of two signals by testing for similar frequency components. If two signals correspond to each other perfectly at a given frequency, the magnitude of coherence is 1. If they are totally unrelated coherence will be 0.Correlation is another measure of the relationship between two signals. A correlation coefficient is used to evaluate similarity. If two signals have a high degree of similarity, the magnitude of the computed correlation coefficient is large. If there is little or no linear relationship between two signals, the magnitude of the coefficient is small.
我觉得说的比较清晰。相关性计算可以理解为一种内积或者归一化的cos相似度判断,相干性的数学表达又是什么呢?我们跟随18. Cross-Spectra and Coherence的推导尝试了解 一下。一般通用的线性系统表达为: y m = ∑ − ∞ ∞ h k x m − k + n m y_m=\sum_{-\infty}^{\infty}h_k x_{m-k}+n_m ym=−∞∑∞hkxm−k+nm简化处理,我们只用傅里叶变换的方式把时域搬到频域来看看(卷积变相乘的性质), y ( ω ) = h ( ω ) x ( ω ) + n ( ω ) y(\omega)=h(\omega)x(\omega)+n(\omega) y(ω)=h(ω)x(ω)+n(ω)等式两测同时乘以 x ∗ ( ω ) x^*(\omega) x∗(ω),则有 y ( ω ) x ∗ ( ω ) = h ( ω ) x ( ω ) x ∗ ( ω ) + n ( ω ) x ∗ ( ω ) y(\omega)x^*(\omega)=h(\omega)x(\omega)x^*(\omega)+n(\omega)x^*(\omega) y(ω)x∗(ω)=h(ω)x(ω)x∗(ω)+n(ω)x∗(ω),定义 Φ y x ( ω ) = y ( ω ) x ∗ ( ω ) \Phi_{yx}(\omega)=y(\omega)x^*(\omega) Φyx(ω)=y(ω)x∗(ω), Φ x x ( ω ) = x ( ω ) x ∗ ( ω ) \Phi_{xx}(\omega)=x(\omega)x^*(\omega) Φxx(ω)=x(ω)x∗(ω),另外大胆假设噪声和输入信号的正交性,则可以忽略最后一项,则有: Φ y x ( ω ) = h ( ω ) Φ x x ( ω ) \Phi_{yx}(\omega)=h(\omega)\Phi_{xx}(\omega) Φyx(ω)=h(ω)Φxx(ω)这样我们得到频域响应函数的另外一种表达: h ( ω ) = Φ y x ( ω ) Φ x x ( ω ) h(\omega)=\frac{\Phi_{yx}(\omega)}{\Phi_{xx}(\omega)} h(ω)=Φxx(ω)Φyx(ω)如果此时定义 C y x ( ω ) = Φ y x ( ω ) Φ y y ( ω ) Φ x x ( ω ) C_{yx}(\omega)=\frac{\Phi_{yx}(\omega)}{\sqrt{\Phi_{yy}(\omega)\Phi_{xx}(\omega)}} Cyx(ω)=Φyy(ω)Φxx(ω)Φyx(ω)那么可以得到频响的另一种表达: h ( ω ) = C y x ( ω ) Φ y y ( ω ) Φ x x ( ω ) h(\omega)=C_{yx}(\omega)\sqrt{\frac{\Phi_{yy}(\omega)}{\Phi_{xx}(\omega)}} h(ω)=Cyx(ω)Φxx(ω)Φyy(ω)这个等式的开根号自功率谱是实数,所以频响的相位特征有 C y x C_{yx} Cyx所表达,我们定义这个 C y x C_{yx} Cyx为相干性指标。我们观察一下它的特性,令 y ( ω ) = h ( ω ) x ( ω ) + n ( ω ) y(\omega)=h(\omega)x(\omega)+n(\omega) y(ω)=h(ω)x(ω)+n(ω)等式两测同时乘以 y ∗ ( ω ) y^*(\omega) y∗(ω),可以推导出下面的式子: Φ y y ( ω ) = ∣ h ( ω ) ∣ 2 Φ x x ( ω ) + Φ n n ( ω ) \Phi_{yy}(\omega)=|h(\omega)|^2\Phi_{xx}(\omega)+\Phi_{nn}(\omega) Φyy(ω)=∣h(ω)∣2Φxx(ω)+Φnn(ω)替换 C y x C_{yx} Cyx,则有 Φ y y ( ω ) = ∣ C y x ( ω ) Φ y y ( ω ) Φ x x ( ω ) ∣ 2 Φ x x ( ω ) + Φ n n ( ω ) = ∣ C y x ∣ 2 Φ y y ( ω ) + Φ n n ( ω ) \Phi_{yy}(\omega)=|C_{yx}(\omega)\sqrt{\frac{\Phi_{yy}(\omega)}{\Phi_{xx}(\omega)}}|^2\Phi_{xx}(\omega)+\Phi_{nn}(\omega)=|C_{yx}|^2\Phi_{yy}(\omega)+\Phi_{nn}(\omega) Φyy(ω)=∣Cyx(ω)Φxx(ω)Φyy(ω)∣2Φxx(ω)+Φnn(ω)=∣Cyx∣2Φyy(ω)+Φnn(ω)换个写法: Φ y y ( ω ) ( 1 − ∣ C y x ∣ 2 ) = Φ n n ( ω ) \Phi_{yy}(\omega)(1-|C_{yx}|^2)=\Phi_{nn}(\omega) Φyy(ω)(1−∣Cyx∣2)=Φnn(ω), ( 1 − ∣ C y x ∣ 2 ) (1-|C_{yx}|^2) (1−∣Cyx∣2)定义为不相关功率,即如果 ∣ C y x ∣ = 1 |C_{yx}|=1 ∣Cyx∣=1, y n y_n yn可以有 x n x_n xn完美计算出来。即: Φ y y ( ω ) ( ∣ C y x ∣ 2 ) = ∣ h ( ω ) ∣ 2 Φ x x ( ω ) \Phi_{yy}(\omega)(|C_{yx}|^2)=|h(\omega)|^2\Phi_{xx}(\omega) Φyy(ω)(∣Cyx∣2)=∣h(ω)∣2Φxx(ω)以上是关于相干性的数学推导,需要提到的是这些参数大部分只是理想的计算,真正的系统都是测试观察获得的,所以带入到这些公式里,我们只能称作估计"estimation"。
回声消除过程如何套用这些知识
下图是一张典型的回声消除框架图
我们把它复制一份,通过DFT(STFT)过程变换到频域,那么左侧的内积,卷积,相关运算都可以理解为寻找相关性。右侧频域的谱估计过程可以理解为寻找相干性。不失一般性的胡说,且认为相关性是相干性的时域体验,相干性是相关性的频域分解吧。
相关性/相干性检测在DT中的应用
先回顾一下DoubleTalk算法,我找了一下百度通信中的自适应回波抵消以及相关技术及应用,觉得这段话写的很言简意赅,但这个网站有些…,只能截图发一下:
各种自适应滤波器总结 这个篇博客除了上述的两种方法,又总结了一种,即所谓的矢量夹角法,其实就是计算cos相似度, 这类有些频域相干性检测的意思了,可以对比着看看。国内的网文都比较经典(老旧),这段再找几个外部的文献看一看有什么花样能耍出来。
时域的标量与向量结合的互相关方法
由简入繁,先看一个比较简单的 A New Double-Talk Detection Algorithm Based on the Orthogonality Theorem,我看很多论文引用了它,而它的新奇思路是建立在滤波器收敛情况下,误差信号 e ( n ) e(n) e(n)和输入序列 X ⃗ ( n ) \vec{X}(n) X(n),即 E [ e ( n ) X ⃗ ( n ) ] = 0 E[e(n)\vec{X}(n)]=0 E[e(n)X(n)]=0同样双讲时,近端信号,包括噪声信号,同样应该和远端输入信号正交,则有: E [ ( e ′ ( n ) + v ( n ) + u ( n ) ) X ⃗ ( n ) ] = 0 E[(e^{'}(n)+v(n)+u(n))\vec{X}(n)]=0 E[(e′(n)+v(n)+u(n))X(n)]=0这里 e ′ ( n ) = y ( n ) − y ′ ( n ) e^{'}(n)=y(n)-y^{'}(n) e′(n)=y(n)−y′(n)基于这一系列假设,作者认为可以建立一种互相关运算,这种运算由于正交性的存在,不会对双讲敏感,而只对于回声路径的变化(有可能是双讲引入的?)敏感,所以这种检测不仅仅限于双讲检查,更加广义的涵盖了回声路径变化的鉴别,所以定义了这样一个相关检查过程:
P e 2 ( n ) = λ P e 2 ( n − 1 ) + ( 1 − λ ) e 2 ( n ) P i 2 ( n ) = λ P i 2 ( n − 1 ) + ( 1 − λ ) x 2 ( n − i ) P e , i ( n ) = λ P e , i ( n − 1 ) + ( 1 − λ ) e ( n ) x ( n − i ) C i ( n ) = P e , i ( n ) P e ( n ) P i ( n ) \begin{aligned} P_e^2(n)&=\lambda P_e^2(n-1)+(1-\lambda)e^2(n) \\ P_i^2(n)&=\lambda P_i^2(n-1)+(1-\lambda)x^2(n-i) \\ P_{e,i}(n)&=\lambda P_{e,i}(n-1)+(1-\lambda)e(n)x(n-i) \\ C_i(n) &= \frac{P_{e,i}(n)}{P_e(n)P_i(n)} \end{aligned} Pe2(n)Pi2(n)Pe,i(n)Ci(n)=λPe2(n−1)+(1−λ)e2(n)=λPi2(n−1)+(1−λ)x2(n−i)=λPe,i(n−1)+(1−λ)e(n)x(n−i)=Pe(n)Pi(n)Pe,i(n)
这最后一行的式子看着眼熟吧,有一个类似cos相似度的算法,不过它先平滑再计算确实有些不一样(虽然觉得怪)。上述四行是针对于一个采样点的,对一个block再取一个平均如下: A C C ( n ) = [ ∑ i = 0 N − 1 ∣ C i ( n ) ∣ ] N ACC(n)=\frac{\bigg [ \sum_{i=0}^{N-1}|C_i(n)|\bigg ]}{N} ACC(n)=N[∑i=0N−1∣Ci(n)∣]剩下的就是评估这个 A C C ACC ACC和设定门限和双讲来寻找规律了。这个是假设了时域的正交性来做的一个双讲判决,还有些新意。
适合block处理的频域相干性方法
再看一篇利用频域相干性的A Double-Talk Detector Based on Coherence,这篇在铺垫了一些预制条件后,提出了一种维纳滤波器的表达形式: F ( f ) = S y x 1 ( f ) S y y ( f ) = S x x ( f ) ∣ H ( f ) ∣ 2 S y y ( f ) F(f)=\frac{S_{yx_1}(f)}{S_{yy}(f)}=\frac{S_{xx}(f)|H(f)|^2}{S_{yy}(f)} F(f)=Syy(f)Syx1(f)=Syy(f)Sxx(f)∣H(f)∣2这里 S y x ( f ) = y ( f ) x ∗ ( f ) S_{yx}(f)=y(f)x^*(f) Syx(f)=y(f)x∗(f), S x x ( f ) = x ( f ) x ∗ ( f ) S_{xx}(f)=x(f)x^*(f) Sxx(f)=x(f)x∗(f),用于估计近端没有加入本地声音的远端传递函数 X 1 ( f ) = X ( f ) H ( f ) X_1(f)=X(f)H(f) X1(f)=X(f)H(f),而 y ( n ) = x 1 ( n ) + v ( n ) y(n)=x_1(n)+v(n) y(n)=x1(n)+v(n),当没有近端声音的时候,可以根据前面的推导认为 S y y ( f ) = S x x ( f ) ∣ H ( f ) ∣ 2 S_{yy}(f)=S_{xx}(f)|H(f)|^2 Syy(f)=Sxx(f)∣H(f)∣2,那么前式等于1了,意思没有双讲。接下来的推导有点懵,直接让 F ( f ) = ∣ S y x ( f ) ∣ 2 S x x ( f ) S y y ( f ) = γ y x ( f ) F(f)=\frac{|S_{yx}(f)|^2}{S_{xx}(f)S_{yy}(f)}=\gamma_{yx}(f) F(f)=Sxx(f)Syy(f)∣Syx(f)∣2=γyx(f)但结果我看懂了,这就是相干性的表达吗,然后设定一个 ξ \xi ξ作为判别式: ξ = 1 I + 1 ∑ i = 0 I γ y x ( f i ) \xi=\frac{1}{I+1}\sum_{i=0}^I\gamma_{yx}(f_i) ξ=I+11i=0∑Iγyx(fi)剩下的就是寻找一个门限 T T T,大于门限认为是单讲,小于门限认为是双讲(或者信道变化),为了提高频率频谱平滑度,还定义了所谓的多窗估计,升华了 S ^ y x ( f ) = 1 K ∑ k = 0 K − 1 c k y k ( f ) x k ∗ ( f ) \hat{S}_{yx}(f)=\frac{1}{K}\sum_{k=0}^{K-1}c_ky_k(f)x_k^*(f) S^yx(f)=K1k=0∑K−1ckyk(f)xk∗(f) S ^ x x ( f ) = 1 K ∑ k = 0 K − 1 c k ∣ x k ( f ) ∣ 2 \hat{S}_{xx}(f)=\frac{1}{K}\sum_{k=0}^{K-1}c_k|x_k(f)|^2 S^xx(f)=K1k=0∑K−1ck∣xk(f)∣2可得出多窗版本的估计: ξ ^ = 1 I + 1 ∑ i = 0 I γ ^ y x ( f i ) = 1 I + 1 ∑ i = 0 I ∣ S ^ y x ( f ) ∣ 2 S ^ x x ( f ) S ^ y y ( f ) \hat{\xi}=\frac{1}{I+1}\sum_{i=0}^I\hat\gamma_{yx}(f_i)=\frac{1}{I+1}\sum_{i=0}^I\frac{|\hat{S}_{yx}(f)|^2}{\hat{S}_{xx}(f)\hat{S}_{yy}(f)} ξ^=I+11i=0∑Iγ^yx(fi)=I+11i=0∑IS^xx(f)S^yy(f)∣S^yx(f)∣2后面还有分布统计和复杂的推导,没太看懂,从这个式子其实可以看出就是基于相干性的平滑估计,最终远端和近端在没有双讲的相干性能够明辨于双讲时刻的相干性,那么这个算法就算成功了。
Normalized正则化的互相关方法
这是论文A new class of doubletalk detectors based on cross-correlation在A New Double-Talk Detection Algorithm Based on the Orthogonality Theorem基础上提出来的,如果我们把语音信号能假设为正态分布的话,均值为0,方差 σ 2 \sigma^2 σ2就是能量值,据此重定义互相关系数为:
c x y ( 1 ) = E { x ( n ) y ( n ) } E { x 2 ( n ) } E { y 2 ( n ) } = r x y σ x σ y = [ c x y , 0 ( 1 ) c x y , 1 ( 1 ) c x y , 2 ( 1 ) . . . c x y , L − 2 ( 1 ) c x y , L − 1 ( 1 ) ] \begin{aligned} c_{xy}^{(1)}&=\frac{E\{\bold x(n)y(n)\}}{\sqrt{E\{\bold x^2(n)\}E\{ y^2(n)\}}}\\ &=\frac{\bold r_{xy}}{\sigma_x\sigma_y}\\ &=[c_{xy,0}^{(1)}\quad c_{xy,1}^{(1)}\quad c_{xy,2}^{(1)}\quad ...\quad c_{xy,L-2}^{(1)}\quad c_{xy,L-1}^{(1)} ] \end{aligned} cxy(1)=E{x2(n)}E{y2(n)}E{x(n)y(n)}=σxσyrxy=[cxy,0(1)cxy,1(1)cxy,2(1)...cxy,L−2(1)cxy,L−1(1)]据此互相关系数求: ξ ( 1 ) = ∣ ∣ c x y ( 1 ) ∣ ∣ ∞ = m a x i ∣ c x y , i ( 1 ) ∣ i = 0 , 1 , . . . , L − 1 \begin{aligned} \xi^{(1)}&=||c_{xy}^{(1)}||_{\infty}\\ &=\mathop{max}\limits_{i} |c_{xy,i}^{(1)}| \quad \quad i = 0, 1, ... , L-1\\ \end{aligned} ξ(1)=∣∣cxy(1)∣∣∞=imax∣cxy,i(1)∣i=0,1,...,L−1此值与门限T作比较,大了认为单讲,小了认为双讲。这里与前文处理的有比较大的差异了,但关键点是这个 c x y c_{xy} cxy本身是复数,去模之后有可能无法保证小于1,为此当近端没有任何数据的时候,根据 y ( n ) = h T x ( n ) y(n)=\bold h^T\bold x(n) y(n)=hTx(n)可以用下面的式子表达 σ y 2 \sigma_y^2 σy2: σ y 2 = h T R x x h R x x = E { x ( n ) x T ( n ) } r x y = R x x h h = R x x − 1 r x y \sigma_y^2=\bold h^TR_{xx} \bold h\\R_{xx}=E\{\bold x(n)\bold x^T(n)\}\\r_{xy}=\bold R_{xx}\bold h\\h=\bold R_{xx}^{-1}r_{xy} σy2=hTRxxhRxx=E{x(n)xT(n)}rxy=Rxxhh=Rxx−1rxy讲最后的式子带入第一个式子: σ y 2 = r x y T R x x − 1 r x y \sigma_y^2=r_{xy}^T\bold R_{xx}^{-1}r_{xy} σy2=rxyTRxx−1rxy近端不等于0时: σ y 2 = r x y T R x x − 1 r x y + σ v 2 \sigma_y^2=r_{xy}^T\bold R_{xx}^{-1}r_{xy}+\sigma_v^2 σy2=rxyTRxx−1rxy+σv2把没有尾巴的式子去除以 σ y 2 \sigma_y^2 σy2并且开根号求解:
ξ ( 2 ) = r x y T R x x − 1 r x y / σ y 2 = ∣ ∣ c x y ( 2 ) ∣ ∣ 2 = r x y T ( σ y 2 R x x ) − 1 r x y \begin{aligned}\xi^{(2)}&=\sqrt{r_{xy}^T\bold R_{xx}^{-1}r_{xy}}/\sigma_y^2\\ &=||c_{xy}^{(2)}||_2\\ &=\sqrt{r_{xy}^T(\sigma_y^2\bold R_{xx})^{-1}r_{xy}}\\ \end{aligned} ξ(2)=rxyTRxx−1rxy/σy2=∣∣cxy(2)∣∣2=rxyT(σy2Rxx)−1rxy而此刻的相关系数可以认为是 c x y ( 2 ) = ( σ y 2 R x x ) − 1 / 2 r x y = r x y ( σ y 2 R x x ) \begin{aligned}c_{xy}^{(2)}&=(\sigma_y^2\bold R_{xx})^{-1/2}r_{xy}\\&=\frac{r_{xy}}{\sqrt{(\sigma_y^2\bold R_{xx})}}\\\end{aligned} cxy(2)=(σy2Rxx)−1/2rxy=(σy2Rxx)rxy针对于近端有语音的时候,经过推导又得出(个人觉得有点牵强) ξ ( 2 ) = h T R x x h h T R x x h + σ v 2 \xi^{(2)}=\frac{\sqrt{\bold h^TR_{xx} \bold h}}{\sqrt{\bold h^TR_{xx} \bold h+\sigma_v^2}} ξ(2)=hTRxxh+σv2hTRxxh通过这个式子推测判别式不会再比1大了。并且根据测试这种效果要比之前的好。
小结
上述三篇论文的共性特点是:DTD的判定是根据原始信号以及经过信道被采集的两个信号的相关特性做的比较。
相干性在NLP/NRES中的应用理解
上面是利用采集信号的相关性(干)来辨别单双讲状态,那么NLP的核心是判断处理后的残差信号与远近端信号的相似程度来决定抑制的水平,偷懒的话可以直接学习分析一下webrtc的NLP技术,它们正好用到了误差信号与远端/近端分别比较后的结果作为nlp的参考。
这里的NLP是比较狭义上的对线性回声消除后的residual non-linear echo进行处理的一种方法,朴素的理论是在单讲时对阅过噪声门限的声音都认为是非线性残留,直接抑制到一个低水平。引用Non-Linear Processing in Echo Cancellation中的一张图来直观的感受一下这种简单的非线性处理。
但朴素的理论在复杂的场景下就会遇到问题,比如双讲,比如非线性回声占主导的声学回路系统,所以需要更佳复杂的办法。这种一般进一步的被成为Nonlinear Residual Echo Suppressor (NRES)。
引申了解一下NRES的一般形式
这里翻译一下NONLINEAR ACOUSTIC ECHO CANCELLATION论文,理解一下残留回声消除的一般过程: r ( n ) = d ( n ) − y ^ ( n ) = z ( n ) + v ( n ) + y ( n ) − y ^ ( n ) r(n)=d(n)-\hat y(n)=z(n)+v(n)+y(n)-\hat y(n) r(n)=d(n)−y^(n)=z(n)+v(n)+y(n)−y^(n)这个r(n)一般被定义为残留信号,但这个残留信号不一定是会线性回声,所以此时我们另外定义一个p(n)作为真实回声和估计回声的差,则有: p ( n ) = y ( n ) − y ^ ( n ) r ( n ) = d ( n ) − y ^ ( n ) = z ( n ) + v ( n ) + p ( n ) p(n)=y(n)-\hat y(n)\\r(n)=d(n)-\hat y(n)=z(n)+v(n)+p(n) p(n)=y(n)−y^(n)r(n)=d(n)−y^(n)=z(n)+v(n)+p(n)NRES的过程大部分是以帧为基础的、频域依赖的一个实值滤波器 C ( f ) C(f) C(f),那么 r ( n ) r(n) r(n)的频域滤波结果为: E ( m ) ( f ) = C ( m ) ( f ) R ( m ) ( f ) E^{(m)}(f)=C^{(m)}(f)R^{(m)}(f) E(m)(f)=C(m)(f)R(m)(f)得出第m帧,频域子带f的结果,最终经过反傅里叶变换,恢复出经过抑制的信号。那么最优化的 C ( f ) C(f) C(f)如何求解呢?根据MSE准测,论文给出了如下解: C ( f ) = S r ( f ) − S p ( f ) S r ( f ) C(f)=\frac{S_r(f)-S_p(f)}{S_r(f)} C(f)=Sr(f)Sr(f)−Sp(f) S r ( f ) S_r(f) Sr(f)和 S p ( f ) S_p(f) Sp(f)分别为 r ( n ) r(n) r(n)和 p ( n ) p(n) p(n)的功率谱密度函数。如果噪声不能忽略,增加一个 S v ( f ) S_v(f) Sv(f),可以表示为如下函数: C ( f ) = S r ( f ) − S p ( f ) − S v ( f ) S r ( f ) C(f)=\frac{S_r(f)-S_p(f)-S_v(f)}{S_r(f)} C(f)=Sr(f)Sr(f)−Sp(f)−Sv(f),这种类似维纳滤波器的求解就变成了求功率谱了,其中 S r ( f ) S_r(f) Sr(f)等价于估计 ∣ R ( m ) ( f ) ∣ 2 |R^{(m)}(f)|^2 ∣R(m)(f)∣2,加入遗忘因子 λ \lambda λ的估计公式: S ^ r ( m ) ( f ) = λ S ^ r ( m − 1 ) ( f ) + ( 1 − λ ) ∣ R ( m ) ( f ) ∣ 2 \hat S_r^{(m)(f)}=\lambda \hat S_r^{(m-1)}(f) + (1-\lambda)|R^{(m)}(f)|^2 S^r(m)(f)=λS^r(m−1)(f)+(1−λ)∣R(m)(f)∣2如果噪声谱忽略,或者利用最小跟踪方法也可以做一个平滑跟踪,那么最难的就是估计 S p ( f ) S_p(f) Sp(f)了,文中也给了参考论文去估计,即NONLINEAR RESIDUAL ECHO SUPPRESSION USING A POWER FILTER MODEL OF THE ACOUSTIC ECHO PATH。此处不做探讨了。
参考
Intuitive explanation of coherence
18. Cross-Spectra and Coherence
Introduction to Time Series Analysis. Lecture 23.