捋一捋相关性运算,以及DTD和NLP中的应用

捋一捋相关性运算,以及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∣∣ab=i=1n(xi)2 i=1n(yi)2 i=1n(xiyi)这种归一化的相关性使得结果有了清晰的值域,+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=hkxmk+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(ω)=Cyx2Φyy(ω)+Φnn(ω)换个写法: Φ y y ( ω ) ( 1 − ∣ C y x ∣ 2 ) = Φ n n ( ω ) \Phi_{yy}(\omega)(1-|C_{yx}|^2)=\Phi_{nn}(\omega) Φyy(ω)(1Cyx2)=Φnn(ω) ( 1 − ∣ C y x ∣ 2 ) (1-|C_{yx}|^2) (1Cyx2)定义为不相关功率,即如果 ∣ 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(ω)(Cyx2)=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(n1)+(1λ)e2(n)=λPi2(n1)+(1λ)x2(ni)=λPe,i(n1)+(1λ)e(n)x(ni)=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=0N1Ci(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=0Iγ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=0K1ckyk(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=0K1ckxk(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=0Iγ^yx(fi)=I+11i=0IS^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,L2(1)cxy,L1(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)=imaxcxy,i(1)i=0,1,...,L1此值与门限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=Rxx1rxy讲最后的式子带入第一个式子: σ 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=rxyTRxx1rxy近端不等于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=rxyTRxx1rxy+σ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)=rxyTRxx1rxy /σ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+σv2 hTRxxh 通过这个式子推测判别式不会再比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(m1)(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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:normalizer

一、概述 ‌Elastic normalizer‌是Elasticsearch中用于处理keyword类型字段的一种工具,主要用于对字段进行规范化处理,确保在索引和查询时保持一致性。 Normalizer与analyzer类似,都是对字段进行处理,但normalizer不会对字段进…

go语言的成神之路-筑基篇-对文件的操作

目录 一、对文件的读写 Reader?接口 ?Writer接口 copy接口 bufio的使用 ioutil库? 二、cat命令 三、包 1. 包的声明 2. 导入包 3. 包的可见性 4. 包的初始化 5. 标准库包 6. 第三方包 ?7. 包的组织 8. 包的别名 9. 包的路径 10. 包的版本管理 四、go mo…

SQL Server中FIRST_VALUE和 LAST_VALUE窗口函数允许在一个指定的窗口内返回第一个或最后一个值

在 SQL Server 中,FIRST_VALUE 和 LAST_VALUE 是用于窗口函数(Window Functions)的两个非常有用的函数。它们允许你在一个指定的窗口内返回第一个或最后一个值。这两个函数通常与 OVER 子句一起使用,以定义窗口的范围和排序规则。…

【入门】拐角III

描述 输入整数N&#xff0c;输出相应方阵。 输入描述 一个整数N。&#xff08; 0 < n < 10 ) 输出描述 一个方阵&#xff0c;每个数字的场宽为3。 用例输入 1 5 用例输出 1 5 5 5 5 55 4 4 4 45 4 3 3 35 4 3 2 25 4 3 2 1 来源 二维数组…

攻防世界 ics-06

开启场景 可以交互的按钮不是很多&#xff0c;没有什么有用信息&#xff0c;查看页面源代码找到了index.php &#xff0c;后面跟着“报表中心” 传参访问 /index.php 看到了参数 id1&#xff0c;用 burp 抓包爆破&#xff08;这里应该不是 sql 注入&#xff09; 2333 的长度与众…

VMware虚拟机安装银河麒麟操作系统KylinOS教程(超详细)

目录 引言1. 下载2. 安装 VMware2. 安装银河麒麟操作系统2.1 新建虚拟机2.2 安装操作系统2.3 网络配置 3. 安装VMTools 创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄袭…

ByConity BSP 解锁数据仓库新未来

文章目录 前言BSP 模式简介基于 TPC-DS 的 ELT 活动测试环境登录 ECS数据查询配置 执行 02.sqlsql解释&#xff1a;1. 第一步&#xff1a;创建 wscs 临时表2. 第二步&#xff1a;创建 wswscs 临时表3. 第三步&#xff1a;对比 2001 年和 2002 年的数据子查询 1&#xff1a;提取…

Sql Sqserver 相关知识总结

Sql Sqserver 相关知识总结 文章目录 Sql Sqserver 相关知识总结前言优化语句查询&#xff08;select&#xff09;条件过滤&#xff08;Where&#xff09;分组处理&#xff08;GROUP BY&#xff09;模糊查询&#xff08;like&#xff09;包含&#xff08;in&#xff09;合集&am…

论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 王志豪&#xff0c;厦门大学博士生 刘诗雨&#xff0c;厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型&#xff08;LLMs&#xff…

Android OpenGl(二) Shader

一、Shader 1、什么是Shader&#xff0c;为什么要使用Shder &#xff08;1&#xff09;shader运行在gpu上的小程序 &#xff08;2&#xff09;以前使用固定管线&#xff0c;但缺点是灵活度不够&#xff0c;无法满足复杂需求&#xff0c;为了解决固定管线的缺点&#xff0c;出…

软考:系统架构设计师教材笔记(持续更新中)

教材中的知识点都会在。其实就是将教材中的废话删除&#xff0c;语言精练一下&#xff0c;内容比较多&#xff0c;没有标注重点 系统架构概述 定义 系统是指完成某一特定功能或一组功能所需要的组件集&#xff0c;而系统架构则是对所有组件的高层次结构表示&#xff0c;包括各…

TDengine 新功能 VARBINARY 数据类型

1. 背景 VARBINARY 数据类型用于存储二进制数据&#xff0c;与 MySQL 中的 VARBINARY 数据类型功能相同&#xff0c;VARBINARY 数据类型长度可变&#xff0c;在创建表时指定最大字节长度&#xff0c;使用进按需分配存储&#xff0c;但不能超过建表时指定的最大值。 2. 功能说明…

虚拟机桥接模式

主机Win10,虚拟机xp 1.虚拟机设置中选择桥接模式 2.在虚拟机菜单&#xff1a;编辑>虚拟机网络编辑&#xff0c;点击“更改设置”&#xff0c;可以看到三个网卡&#xff0c;这三个网卡分别对应不同的网络共享模式。桥接模式须使用VMnet0&#xff0c;如果没看到这个网卡&…

游戏开发线性空间下PS工作流程

前言 使用基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui 在游戏引擎中的渲染结果与 PS 中的不一致&#xff1a; PS&#xff08;颜色空间默认是sRGB伽马空间&#xff09;&#xff1a…

MAC M4安装QT使用国内镜像源在线安装

MAC M4安装QT使用国内镜像源在线安装 一、下载安装包1. 访问[https://www.qt.io/](https://www.qt.io/)下载在线安装包2. 下载结果 二、创建QT账户&#xff0c;安装的时候需要三、安装1. 终端打开安装包2. 指定安装源3. 运行安装完的QT 一、下载安装包 1. 访问https://www.qt.…

Linux应用软件编程-多任务处理(线程)

线程&#xff1a;轻量级的进程&#xff0c;线程的栈区独立&#xff08;8M&#xff09;&#xff0c;与同一进程中的其他线程共用进程的堆区&#xff0c;数据区&#xff0c;文本区。 进程是操作系统资源分配的最小单位&#xff1b;线程是cpu任务调度的最小单位。 1. 线程的创建…

BFS中的多源BFS、最小步数模型和双端队列广搜

多源BFS 多源BFS时有从多个源点出发的bfs算法,只需要将多个源点都连一条边权为0的边到虚拟源点,那么问题就等价于从虚拟源点开始BFS。 一开始直接将所有源点加入BFS的队列即可. 173. 矩阵距离 给定一个 N N N 行 M M M 列的 01 01 01 矩阵 A A A&#xff0c; A [ i ] […

分布式版本管理工具——git 中忽略文件的版本跟踪(初级方法及高级方法)

git工具忽略指定文件的版本跟踪 一、简单方式实现二、复杂方式实现&#xff08;模式匹配&#xff09;1. 相关规则2. 应用案例a) 忽略所有内容b) 忽略所有目录&#xff08;不忽略当前目录的具体文件&#xff09;c)忽略指定目录下的所有文件&#xff0c;但排除某文件d&#xff09…

Bash Shell知识合集

1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行&#xff0c;我们要用chmod命令授予它可执行的权限&#xff1a; ~script $ chmod 755 hello.sh授权后的脚本可以直接执行&#xff1a; ~script $ ./hello.sh2.指定运行…

1225. 报告系统状态的连续日期 - 力扣(LeetCode)

目录 1. 力扣链接 2. 题目 3. 分析 4. 代码实现 5. 代码验证 6. 总结 1. 力扣链接 1225. 报告系统状态的连续日期 - 力扣&#xff08;LeetCode&#xff09; 2. 题目 表&#xff1a;Failed ----------------------- | Column Name | Type | -----------------------…