论文翻译:A new cross correlation based double talk detection algorithm for nonlinear acoustic echo cancellation
论文代码:需要的同学可以在私信留言,看到必回
摘要
声学回声消除器(AEC)存在于移动通信系统中,它是一种流行的个人通信系统模式。AEC用于消除抑制语音信号并降低信号传输效率的回声。AEC面临的主要问题是非线性和双向通话。由于在AEC框架中使用低成本电子扬声器、麦克风和设计不良的外壳,会出现非线性。非线性导致振动和谐波失真,并且还降低了语音质量。当近端和远端扬声器同时活动时,就会造成双方通话的场景。双端通话检测器(DTD)的作用是检测两个远端扬声器的存在,并通过自适应算法修改滤波器的权重,以防止自适应滤波器发散。双端检测算法如Geigel、互相关和优化互相关DTD被用来提高AECs的性能。本文提出了一种独特的方法,利用远端信号和接收信号之间的互相关来获得有效的双端通话检测算法。该方法采用变步长最小均方算法作为自适应算法。
关键词—自适应滤波器、回声消除器、双端检测器、互相关、变步长LMS。
1.介绍
声学回声消除器(AEC) [1]、[2]用于消除电话信道中产生的回声。电话回声有两种类型——混合回声和声学回声。由于通信信道中的阻抗不匹配,有线电话系统中会出现混合回声[3]。并且由于麦克风和扬声器之间的耦合,电话系统中会出现声学回声。在本文中,已经针对声学回声非线性和双端通话的问题进行了讨论。由于市场的竞争和技术的进步,存在小型化的趋势,这导致将不同的部件放置得彼此非常接近。彼此靠近放置的元件会捕捉到附近器件的嗡嗡声,导致谐波失真和非线性产生。非线性的其他常见来源是使用扬声器和麦克风等廉价电子元件,这会显著降低线性AEC的性能。目前已经出现了各种用于消除非线性回声的方法。非线性结构,如级联和并行扬声器线性化方法、非线性正交功率滤波器方法、多记忆分解结构、基于仿射投影的自适应Volterra滤波器等,这些方法很受欢迎。在本文中,扬声器线性化被作为一种非线性自适应滤波技术提出,其中扬声器输入由非线性滤波器预处理,称为线性化预处理器[4-6]。
图1示出了利用自适应滤波器和自适应算法进行回声消除的线性声学回声消除器。自适应滤波器近似模拟回波路径,并且从回波近端信号中减去自适应滤波器的这个近似输出。这就是回声消除的原理,并且能够在输出端接收到清晰的近端信号。
线性相位有限脉冲响应(FIR)滤波器[2]被用作自适应滤波器,因为它提供具有复杂性的有界输入和有界输出稳定系统。自适应算法控制自适应滤波器的权重以优化自适应滤波器的效果。各种自适应算法,如LMS [3]、[4]、递归最小二乘法、滤波-X LMS,可用于FIR滤波器的自适应。本文采用了变步长最小均方算法。
当一次只有一个扬声器工作时,AEC工作良好。当近端和远端扬声器同时活动时,就会出现双端通话的情况,从而干扰AEC的工作。它会导致自适应滤波器发散,并且在远端产生大量的令人讨厌的噪声。因此,DTD [5]用于避免自适应滤波器在双方通话的情况下发散。当DTD检测到双方通话时,它阻止自适应算法修改滤波器系数,并且在双方通话期间冻结自适应权重。
让我们来了解一下DTD的一般工作方式。下面给出了DTD工作的算法。
- 根据近端、远端和房间脉冲响应的行为来计算判定参数 η \eta η。
- 然后将 η \eta η与预设阈值 T T T(恒定值)进行比较,并判定双方通话条件。
- 如果出现双方通话,滤波器系数的自适应变化会减慢或停止一段时间。
4. 如果没有双方通话,AEC继续正常工作
各种DTD算法,如Geigel算法、基于互相关的算法、相干方法等,已经被提出来处理双重通话的问题。本文改进了基于互相关的DTD算法,并采用VSLMS算法进行权值更新,以获得更好的收敛性能。
2.现有DTD算法
A.Geigel算法
检测双方通话的基本算法是Geigel算法[4]。它使用接收信号与远端信号的幅度比来计算判决参数。参考图二,决策参数
p
(
n
)
p(n)
p(n) [4]是
p
(
n
)
=
∣
d
(
n
)
∣
m
a
x
(
∣
x
(
n
)
∣
,
,
,
,
,
,
∣
x
(
n
−
n
0
+
1
)
∣
)
p(n) = \frac{|d(n)|}{max(|x(n)|,,,,,,|x(n-n_0+1)|)}
p(n)=max(∣x(n)∣,,,,,,∣x(n−n0+1)∣)∣d(n)∣
其中
d
(
n
)
d(n)
d(n)是所需响应,
X
(
n
)
X(n)
X(n)表示自适应设计中样本的输入。
上述算法工作如下:
a. 如果 p ( n ) > T ( 预 设 阈 值 ) p(n) > T(预设阈值) p(n)>T(预设阈值),则存在双端通话。
b.如果 p ( n ) < T ( 预 设 阈 值 ) p(n) < T(预设阈值) p(n)<T(预设阈值),则不存在双端通话。
虽然Geigel算法简单,但它是一种精度较低的原始方法。它不能直接应用于回声路径特性未知的声学回声消除器。因此,本文提出了一种高效、稳健的基于互相关的DTD算法。
B.基于互相关的DTD
参考图2,在[7]中,提出了基于远端信号
x
(
n
)
x(n)
x(n)和误差信号
e
(
n
)
e(n)
e(n)之间的互相关的互相关DTD。
d
(
n
)
=
h
T
x
(
n
)
+
v
(
n
)
e
(
n
)
=
d
(
n
)
−
h
0
T
x
(
n
)
d(n) = h^Tx(n) +v(n)\\ e(n) = d(n) - h_0^Tx(n)
d(n)=hTx(n)+v(n)e(n)=d(n)−h0Tx(n)
其中,
d
(
n
)
d(n)
d(n)是接收信号,
e
(
n
)
e(n)
e(n)是误差信号,
h
h
h是回声路径的近似脉冲响应,
h
0
T
x
(
n
)
h_0^Tx(n)
h0Tx(n)是近似脉冲响应。
假设近端信号独立于远端信号和回声信号,远端信号和误差信号之间的互相关被给出为[7-10],
r
x
e
=
E
[
e
x
T
]
=
E
[
(
d
−
y
0
)
x
T
]
=
E
[
(
h
T
x
−
h
0
T
x
)
x
T
]
=
(
h
T
−
h
0
T
)
R
x
x
(
7
)
r_{x\space e}=E[e \space x^T]\\ =E[(d-y_0)x^T] \\ =E[(h^Tx-h_0^Tx)x^T] \\ =(h^T-h_0^T)R_{xx}\space\space\space\space\space\space\space\space(7)
rx e=E[e xT]=E[(d−y0)xT]=E[(hTx−h0Tx)xT]=(hT−h0T)Rxx (7)
其中
E
[
.
]
E[.]
E[.]表示数学期望,
R
x
x
R_{xx}
Rxx表示远端信号
x
(
n
)
x(n)
x(n)的自相关。
从公式(7)可以看出,如果回波路径有变化, R x e R_{xe} Rxe就高。因此,这种方法的重点是确定回声路径的变化,而不是双端通话。
C.可变脉冲响应DTD
该算法[6]计算自适应滤波器抽头的方差,并与预设阈值 T T T进行比较。如果方差大于 T T T,则双端通话存在,否则不存在。抽头的大的抽头方差值表示房间脉冲响应变化非常快,这不是由于房间特性的变化,而是由于输入源即远端和近端的变化。该方法提供了比上述算法更好的结果,但是该结果是以高复杂性和高成本为代价获得的。
3.本文提出的算法
A.提议的非线性AEC算法
非线性回声的问题基本上可以通过两种方法来解决,即非线性自适应滤波和残余回声抑制。在非线性自适应滤波中,使用预处理器块,其将远端信号作为输入,对其进行处理,并在扬声器处产生线性输出。在第二种方法中,进行残余回声抑制处理以去除残留回声。残留回波抑制方法没有被普遍使用,因为它会由于残留回波的过高或过低估计而导致近端信号失真。本文采用非线性自适应滤波技术对远端信号进行线性化处理。图3给出了非线性AEC的框图:
在上图中, l ( n ) l(n) l(n)是扬声器的输出, x ( n ) x(n) x(n)是远端信号, h ( n ) h(n) h(n)是实际回声路径, h 0 ( n ) h_0(n) h0(n)是模拟回声路径, e ( n ) e(n) e(n)是误差信号。预处理器包含各种子滤波器,这些子滤波器将远端信号作为输入并将其线性化。[11]
图4给出了预处理器的内部结构:
如图4所示,
h
l
(
m
)
h_l(m)
hl(m)和
h
m
(
l
)
h_m(l)
hm(l)是用于线性化的子滤波器。因此;
l
(
n
)
=
∑
m
=
1
M
h
m
(
n
)
z
T
(
n
)
(
8
)
l(n) = \sum_{m=1}^Mh_m(n)z^T(n)\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space(8)
l(n)=m=1∑Mhm(n)zT(n) (8)
其中
z
(
n
)
=
x
(
n
)
+
∑
l
=
2
L
h
l
(
n
)
x
T
(
n
)
(
9
)
z(n) = x(n) +\sum_{l=2}^{L}h_l(n)x^T(n)\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space(9)
z(n)=x(n)+l=2∑Lhl(n)xT(n) (9)
(8)和(9)中使用的L和M是最大信号指数。
l
(
n
)
=
∑
m
=
1
M
h
m
(
n
)
{
x
T
(
n
)
+
∑
l
=
2
L
x
(
n
)
h
l
T
(
n
)
}
h
1
(
n
)
x
T
(
n
)
+
∑
m
=
2
M
h
m
(
n
)
x
T
(
n
)
+
∑
m
=
2
M
h
m
(
n
)
{
∑
l
=
2
L
x
(
n
)
h
l
T
(
n
)
}
l(n)=\sum_{m=1}^Mh_m(n)\{x^T(n)+\sum_{l=2}^Lx(n)h_l^T(n)\}\\ h_1(n)x^T(n)+\sum_{m=2}^Mh_m(n)x^T(n)+\sum_{m=2}^Mh_m(n)\{\sum_{l=2}^Lx(n)h_l^T(n)\}
l(n)=m=1∑Mhm(n){xT(n)+l=2∑Lx(n)hlT(n)}h1(n)xT(n)+m=2∑Mhm(n)xT(n)+m=2∑Mhm(n){l=2∑Lx(n)hlT(n)}
只考虑第一项,忽略其他项。我们可以得到:
l
(
n
)
≈
h
1
(
n
)
x
T
(
n
)
(
12
)
l(n) \approx h_1(n)x^T(n) \space\space\space\space\space\space\space\space\space\space\space\space\space\space(12)
l(n)≈h1(n)xT(n) (12)
其中
h
1
(
n
)
h_1(n)
h1(n)是扬声器的传递函数。
从(12)可以注意到,扬声器输出与远端信号成线性关系。
B.本文提出的DTD算法
在本文所提出的方法中,其采用接收信号和远端信号之间的互相关,而不是采用远端和误差信号之间的互相关[7]、[11]。当近端信号为
v
=
0
v=0
v=0时,互相关的结果为高。当近端信号存在时,即
v
≠
0
v \neq 0
v=0,接收信号和远端信号之间的互相关很低。当互相关的结果低于预设阈值
T
T
T(恒定值)时,自适应算法停止修改自适应滤波器系数,否则会导致自适应滤波器发散,并且在输出端产生大的噪声。
d
(
n
)
=
h
T
x
(
n
)
+
v
(
n
)
(
13
)
d(n) = h^Tx(n) +v(n)\space\space\space\space\space\space\space(13)
d(n)=hTx(n)+v(n) (13)
将上式的两边乘以远端信号
x
(
n
)
x(n)
x(n)并取期望值,我们得到:
E
[
d
(
n
)
x
T
(
n
)
]
=
h
T
E
[
x
(
n
)
x
T
(
n
)
]
+
E
[
v
(
n
)
x
T
(
n
)
]
(
14
)
E[d(n)x^T(n)] =h^TE[x(n)x^T(n)]+E[v(n)x^T(n)]\space\space\space\space(14)
E[d(n)xT(n)]=hTE[x(n)xT(n)]+E[v(n)xT(n)] (14)
由于近端信号
v
(
n
)
v(n)
v(n)和远端信号
x
(
n
)
x(n)
x(n)不相关,
E
[
v
(
n
)
x
T
(
n
)
]
=
0
(
15
)
E[v(n)x^T(n)] = 0\space(15)
E[v(n)xT(n)]=0 (15)
所以(14)变成了
E
[
d
(
n
)
x
T
(
n
)
]
=
h
T
E
[
x
(
n
)
x
T
(
n
)
]
(
16
)
E[d(n)x^T(n)] =h^TE[x(n)x^T(n)]\space(16)
E[d(n)xT(n)]=hTE[x(n)xT(n)] (16)
再次乘以(13)接收到的信号$d^T(n) $,我们得到
E
[
d
(
n
)
x
T
(
n
)
]
=
h
T
E
[
x
(
n
)
d
T
(
n
)
]
+
E
[
v
(
n
)
d
T
(
n
)
]
(
17
)
E[d(n)x^T(n)] =h^TE[x(n)d^T(n)]+E[v(n)d^T(n)] \space\space\space\space(17)
E[d(n)xT(n)]=hTE[x(n)dT(n)]+E[v(n)dT(n)] (17)
当近端信号不存在时,即
v
(
n
)
=
0
v(n) = 0
v(n)=0,则(17)变为,
E
[
d
(
n
)
d
T
(
n
)
]
=
h
T
E
[
x
(
n
)
d
T
(
n
)
]
(
18
)
E
[
x
(
n
)
d
T
(
n
)
]
=
h
−
1
E
[
d
(
n
)
d
T
(
n
)
]
(
19
)
E[d(n)d^T(n)] =h^TE[x(n)d^T(n)] \space(18) \\ E[x(n)d^T(n)] = h^{-1}E[d(n)d^T(n)](19)
E[d(n)dT(n)]=hTE[x(n)dT(n)] (18)E[x(n)dT(n)]=h−1E[d(n)dT(n)](19)
将(16)和(19)相乘,
{
E
[
x
(
n
)
d
T
(
n
)
]
}
2
=
E
[
x
(
n
)
x
T
(
n
)
]
.
E
[
d
(
n
)
d
T
(
n
)
]
(
20
)
\{E[x(n)d^T(n)]\}^2 =E[x(n)x^T(n)].E[d(n)d^T(n)] \space (20)
{E[x(n)dT(n)]}2=E[x(n)xT(n)].E[d(n)dT(n)] (20)
R d x 2 = E [ d 2 ( n ) ] . E [ x 2 ( n ) ] ( 21 ) R^2_{dx} = E[d^2(n)].E[x^2(n)] \space \space \space \space \space \space \space \space \space \space \space(21) Rdx2=E[d2(n)].E[x2(n)] (21)
其中 R d x R_{dx} Rdx是远端和接收信号之间的互相关。
等式(21)中给出了判定参数:
P
d
x
=
R
d
x
E
[
d
2
(
n
)
]
E
[
x
2
(
n
)
]
P_{dx} = \frac{R_{dx}}{\sqrt{E[d^2(n)]E[x^2(n)]}}
Pdx=E[d2(n)]E[x2(n)]Rdx
因为
P
d
x
P_{dx}
Pdx是向量并且需要一个值作为决策参数
β
\beta
β,所以
β
=
m
a
x
∣
p
d
x
i
∣
\beta = max|p_{dx}^i|
β=max∣pdxi∣
其中
i
=
0
,
1
,
⋯
,
L
−
1
i=0,1, \cdots,L-1
i=0,1,⋯,L−1,L为自适应滤波器的抽头长度。
判定规则是,如果 β > = T \beta >=T β>=T,则双端通话不存在,如果 β < T \beta <T β<T,则双端通话存在。
C. 自适应算法
1). LMS算法
这是一个非常简单的算法,具有低计算复杂度和高性能。LMS算法的权重更新等式给出为:
w
(
n
+
1
)
=
w
(
n
)
+
2
μ
e
(
n
)
x
(
n
)
w(n+1) = w(n) +2\mu e(n)x(n)
w(n+1)=w(n)+2μe(n)x(n)
其中
w
(
n
)
w(n)
w(n)是滤波器权重,
μ
\mu
μ是步长。
步长 μ \mu μ控制权重更新过程。选择合适的 μ \mu μ决定了LMS算法的性能。如果 μ \mu μ太小,收敛时间会很长。另一方面,如果 μ \mu μ非常大,自适应滤波器变得不稳定并发散。因此,可变步长LMS被提出来克服固定步长的问题。
2).可变步长最小均方误差算法(VSLMS)
VS-LMS算法已被用于实现所提出的DTD。它是最小均方算法的一种变体,在保持传统LMS [3]、[4]的鲁棒性和简单性的同时,提供了改进的性能。
可变步长LMS (VSLMS)的基本概念是根据误差来改变权重自适应过程的步长
μ
\mu
μ。如果误差较大,则步长较大,如果误差较小,则步长变化较小。因此,VSLMS算法的权重自适应方程变为[11-13]
w
(
n
+
1
)
=
w
(
n
)
+
μ
(
n
)
e
(
n
)
x
(
n
)
w(n+1) = w(n) +\mu(n) e(n)x(n)
w(n+1)=w(n)+μ(n)e(n)x(n)
步长
μ
(
n
)
\mu(n)
μ(n)对误差信号
e
(
n
)
e(n)
e(n)的依赖性由下式给出。
μ
(
n
+
1
)
=
σ
μ
(
n
)
χ
e
2
(
n
)
\mu (n+1) = \sigma\mu (n)\chi e^2(n)
μ(n+1)=σμ(n)χe2(n)
实验发现,
0
<
σ
<
1
0<\sigma<1
0<σ<1和
χ
>
0
\chi >0
χ>0可获得最佳性能。自适应算法的性能由一个称为回波损耗增强(ERLE)的参数来判断,该参数将在下一节中解释。
4.模拟和结果
到目前为止,双方通话判定变量是根据不同信号之间的互相关来制定的,但是在实际情况下,只存在近端信号 v ( n ) v(n) v(n)和远端信号 x ( n ) x(n) x(n)。互相关的估计是通过找到两个信号乘积的期望值来完成的。
如上所述,自适应滤波器的性能由ERLE决定。它是对回声消除器抑制的回声量的定量分析[14]。它被给定为:
E
R
L
E
d
b
=
10
l
o
g
10
E
[
d
2
(
n
)
]
E
[
e
2
(
n
)
]
ERLE_{db} = 10log10 \frac{E{[d^2(n)]}}{E[e^2(n)]}
ERLEdb=10log10E[e2(n)]E[d2(n)]
ERLE越高,AEC的性能越好。
本文中,用MATLAB 7.10平台做计算机仿真。在所提出的算法中,离散时间样本被取至 N = 100000 N=100000 N=100000,信噪比保持在 S N R = 40 d b SNR=40db SNR=40db并且自适应滤波器的抽头长度为 L = 1000 L=1000 L=1000。 已经测试了不同的阈值,并且发现 T = 1000 T=1000 T=1000的阈值产生最佳结果。图5中示出了近端信号的幅度 v ( n ) v(n) v(n)随迭代的变化。
图6示出了相对于迭代的远端信号变化。图7示出了在噪声脉冲响应中近端信号和远端回波信号的叠加。噪声具有高斯概率密度函数。
在有回声的场景下,当近端和远端信号在适当的操作过程中在相同的迭代持续时间都有效时,双讲是存在的。当接收到的回波信号和远端信号之间的互相关超过预定义的阈值时,如第三节中提出的算法所示,则DTD是活动的,并阻止自适应算法改变滤波器的权重。另一方面,DTD的缺失可能导致回声消除中滤波器性能的发散。图8示出了所提出算法的双方通话检测。结果清楚地表明,所提出的算法为有效的双端通话检测提供了新的途径。图9示出了没有回声的恢复信号。将本文中使用的自适应算法的效率与LMS算法进行了比较。比较了VSLMS和LMS的ERLE,可以得出VSLMS优于LMS的结论,如图10所示。
5.结论
本文提出并分析了一种新的基于接收信号和远端信号互相关的双端通话检测算法。焦点在于在计算上使用了更简单的方法找到阈值。所提出的DTD算法比以前提出的Geigel算法表现出更好的性能。在未来的工作中,可以集中寻找一个动态阈值而不是一个恒定值,以减少错误的概率和漏检的概率。
参考文献
作者:王二黑_Leon
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。