--neozng1@hnu.edu.cn
应用举例
然而我们发现,如果
e
(
n
)
e(n)
e(n)不为零,那自适应滤波器在进行迭代的时候始终会得到非零的差值,这样不就相当于输出会逐渐逼近
x
(
n
)
x(n)
x(n)了吗?这也是非常匪夷所思的事情,怎么可能用一个滤波器从噪声信号中还原出原信号呢?
其实,在利用adaptive filter进行noise canceling的时候,有三个前提条件必须得到满足:
-
E
[
s
(
n
)
y
′
(
n
)
]
=
0
E[s(n)y'(n)]=0
E[s(n)y′(n)]=0,这要求原信号和噪声信号不相关
-
E
[
y
(
n
)
y
′
(
n
)
]
≠
0
E[y(n)y'(n)]\neq0
E[y(n)y′(n)]=0,即要求用于参考的信号和噪声信号相关,并且相关程度越大越好
-
E
[
s
(
n
)
]
=
0
E[s(n)]=0
E[s(n)]=0,希望原信号是一个均值为零的信号
有了这三个条件,我们再来看前述的内容就好理解了。$ s(n)
的
期
望
为
零
而
又
不
恒
等
于
零
,
则
在
渐
进
收
敛
的
过
程
中
,
的期望为零而又不恒等于零,则在渐进收敛的过程中,
的期望为零而又不恒等于零,则在渐进收敛的过程中,e(n)
在
一
段
时
间
内
为
正
一
段
时
间
为
负
,
这
样
对
于
滤
波
器
的
参
数
在一段时间内为正一段时间为负,这样对于滤波器的参数
在一段时间内为正一段时间为负,这样对于滤波器的参数\omega$来说,其实是保持动态静止或者说于最优值附近轻微波动的(当几乎收敛的时候,根据参数的更新公式,当误差为正则向正方向更新一步,误差为负则向反方向更新一步,总的结果是保持不变的,但在还未收敛的时候,总有一个方向上更新的距离会超过另一个方向,这个更新步长较大的方向就是趋向解的方向)。
因此,我们避免了"
ω
\omega
ω不断更新使得
y
(
n
)
y(n)
y(n)经过滤波器后的输出逼近
x
(
n
)
x(n)
x(n)”这种给谬论。比如语音信号、心电信号、还有其他许多电信号都有这样的性质,把直流值当成零参考点,其震荡信号的均值为零,这就很好地符合了第三条要求。
笔者也有看到将自适应滤波视为去相关操作的解释:若输入和参考信号有关,就能够利用相关性动态计算参数
ω
\omega
ω使得输出不断逼近参考信号,而对于无关信号(在这里就是
s
(
n
)
s(n)
s(n),没有被噪声污染的原信号)则不去理会。在此例中参考输入
y
(
n
)
y(n)
y(n)是一个和噪声
y
′
(
n
)
y'(n)
y′(n)高度相关的信号,而原信号即需要被还原出来的信号
s
(
n
)
s(n)
s(n)则于参考输入无关。
我们也拿典型的AEC应用进行说明,在此场景下,我们希望消除麦克风采集到扬声器中的声音所产生的回声(你应该也有这样的经历,在线上会议或免提通话时,我们的声音在对方的扬声器中播放时又被对方的麦克风采集到,随后这段信号再次由信道传播回我们的扬声器中播放出来,形成回声),那么期望的
e
(
n
)
e(n)
e(n)应该是麦克风采集到的去除回声之后我们说话的声音:
AEC的应用场景示意图,图源本节末的链接
我们会发现,这里其实增加了一个DTD(double talk detection)模块,他用于检测当前双方是否在说话。这又有什么用呢?前述进行noise canceling的时候必须满足三个条件,在实际情况中第二条是比较容易实现的,但是1、3满足起来就比较困难了,因此利用DTD,回声消除的模式如下:
- 远端语音存在,近端语音不存在:滤波、自适应滤波器系数更新(对方说话我们不说话)
- 远端语音存在,近端语音存在:滤波(两方都说话)
- 远端语音不存在:什么都不用做(没信号过来,没必要做任何动作)
很容易就能发现,我们只有在原信号
s
(
n
)
s(n)
s(n)(我们说话的声音)为零的时候即第一种情况,才会对滤波器的参数进行更新,这就避免了原信号和希望消除的噪声信号之间的耦合导致参数更新不准确的问题。在这种情况下,自适应滤波器的作用原理反倒和接下来要介绍的系统辨识有些相像了:其实我们在利用自适应滤波器去模拟回声路径,让输入经过自适应滤波器后的输出和输入通过环境反射交杂后产生的输出尽量接近。
关于AEC更详细的综述,可以参考这篇文章:声学回声消除原理与实现
-
系统辨识(应用于控制等)
对于系统辨识的应用,我们希望自适应滤波器可以模拟出待估系统的行为。这里,
y
(
n
)
=
x
(
n
)
y(n)=x(n)
y(n)=x(n),滤波器的输出和原系统的输出作差得到误差信号,将此误差输入自适应算法,经过数次迭代
x
(
n
)
x(n)
x(n)将会逐渐逼近参考信号
y
(
n
)
y(n)
y(n)。也就是说,虽然系统内部结构不同,但是自适应滤波器复刻了
G
(
s
)
G(s)
G(s)的传递函数。
在模型十分复杂的情况下,我们就可以使用adaptive filter去逼近模型的黑箱。用一个直观的低维实例来说,就是在用一条直线去逼近一个复杂的曲线。当然,你可以用更高阶数的自适应滤波器从而达到更好的效果,或是在此之后增加其他的非线性拟合部分。
-
估计(预测)
很多读者初看这个应用,会觉得有些无厘头,为什么能够利用过去的值得到当前值呢?请记住,自适应滤波器虽然使用限制相对维纳滤波器放宽了许多,但是仍然要求信号在短时间内能够保持一致的统计特性或不至于变化太多,如果是一个剧烈时变的信号显然我们无法通过历史数据序列来预测将来时刻的值的。
对于已经学习过R
循环神经网络的同学来说,我们可以将自适应滤波器看成是单层RNN,滑窗范围就是参与计算的历史序列长度
n
n
n。不过两者稍有区别,自适应滤波器的参数会一直保持更新,而RNN需要先训练再使用,或者我们将前者看作是一种一直处于学习状态的RNN。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)