了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:自适应滤波器

--neozng1@hnu.edu.cn

自适应滤波

自适应滤波以前述的wiener filter为基础,这里我们也从统计与优化和控制理论两个角度来介绍它,顺着上一篇介绍维纳滤波器的文章的思路继续进行推导。

  • 统计与优化

    前述的wiener filter在求取最优解的时候受到的限制很多,不仅要求噪声和目标信号的统计特性已知,还需要采集无限时间的信号序列(从零到正无穷)后以得到最优解,而在实际情况下我们一般利用一段时间内的信号序列对 ω o \omega_o ωo做出无偏估计。不过,这也只是权宜之计。首先倘若要对序列信号进行实时处理,采集一段时间这个要求就无法满足。其次若对信号和噪声的统计特性完全未知甚至它们是非平稳态的,那么问题相当于无解。

    不过,我们可以从维纳滤波器的近似求解中看出一些蛛丝马迹:利用一小段时间内的信号对误差的期望进行最小化,如果再对这个结果进行推广,缩小这个“一小段时间”的长度进行估计并保存这次的结果,认为是当前最佳同时在稍后进行迭代,不再追求最优解而是尽量消除噪声并尽可能快速的收敛,不也是一种很好的方法吗?

    那要怎么才能知道 ω \omega ω要如何更新呢?对于全局最优解,我们要求一个 ω \omega ω使得下式为零:
    ▽ = ∂ L ∂ ω T = E { − 2 y ( n ) x ( n ) + 2 x ( n ) T x ( n ) ω } \bigtriangledown =\frac{\partial{L}}{\partial{\omega^T}}=E\{-2y(n)x(n)+2x(n)^Tx(n)\omega\} =ωTL=E{2y(n)x(n)+2x(n)Tx(n)ω}
    并且之前我们已经得到,我们要优化的误差函数拥有很好的性质:它是一个凸函数,其上没一点的梯度都指向最优解!很直觉的想法就是,我们让 ω \omega ω每次往最优解迭代若干步,即 ω t + 1 = ω t − k ∂ L ∂ ω t \omega_{t+1}=\omega_t-k\frac{\partial{L}}{\partial{\omega_t}} ωt+1=ωtkωtL,其中k为调制因子(学习率),这不就是梯度下降法吗!如果在每一次采集完成后都进行数据更新,就成为了随机梯度下降法。很多的优化问题如果无法一次性求解,往往会诉诸迭代的解法,逐步逼近最终的解。对于极限情况,我们每采集一次数据就进行一次参数估计,即每一步都更新 ω \omega ω

    不过这里还有一个问题亟待解决,要计算处代价函数上某一点的梯度,还是需要输入信号和原信号的一些统计特性,因此我们让代价函数就等于误差向量,认为当前的样本的损失可以替代总损失。学习过优化或者神经网络的朋友应该对此应该不陌生了,那么求梯度就有:
    ▽ J ^ = ∂ e ( n ) 2 ∂ ω ( n ) = ∂ [ y ( n ) − y ^ ( n ) ] 2 ∂ ω ( n ) = − 2 [ y ( n ) − y ^ ( n ) ] ⋅ ∂ y ( n ) ^ ∂ ω ( n ) = − 2 e ( n ) x ( n ) (2) \hat{\bigtriangledown J}=\frac{\partial{e(n)^2}}{\partial\omega(n)}=\frac{\partial[{y(n)-\hat{y}(n)}]^2}{\partial\omega(n)}=-2[{y(n)-\hat{y}(n)}]\cdot\frac{\partial{\hat{y(n)}}}{\partial\omega(n)}=-2e(n)x(n)\tag{2} J^=ω(n)e(n)2=ω(n)[y(n)y^(n)]2=2[y(n)y^(n)]ω(n)y(n)^=2e(n)x(n)(2)
    其实也就是把式(1)中的后半部分用 y ^ ( n ) x ( n ) \hat{y}(n)x(n) y^(n)x(n)代替然后用结合律和前半部分相消(当然这种视角不太严谨,比较直觉,因为矩阵乘法没对齐,时间戳也不是对应的)。

    所以我们只需要之前的 ω \omega ω加上当前梯度乘上一个系数就可以达到参数更新的目的了。对于稳态信号,逐渐迭代就能够收敛到最优解附近(根据推导可以发现每次的误差一定会比上次来的小);而对于非平稳信号,也可在数十步之内逐渐跟上,但不可避免的有相较于稳态信号稍大的误差。

    对于k值的选取,经过稳定性计算可以得出以下条件:
    0 < μ < 1 λ m a x 0<μ<\frac{1}{\lambda_{max}} 0<μ<λmax1
    其中λ为输入信号自相关矩阵的最大特征值,感兴趣的同学可以自行查找资料,大概证明过程是保证代价函数会随着 ω \omega ω的迭代递降,根据递推公式,保证特征值小于1就会让滤波器的输出值收敛。μ越大收敛得越快,但也容易跑飞或者使得累积误差变得的不可接受。

    所以最终权重更新的公式为:
    ω t + 1 = ω t + 2 μ e ( n ) x ( n ) \omega_{t+1}=\omega_t+2μe(n)x(n) ωt+1=ωt+2μe(n)x(n)

    搜索关键词:自适应滤波、泰勒展开、特征分解、学习率。

    虽然已经找到了求解的方法,但它肯定还是有不足之处,比如收敛速度慢、震荡比较剧烈等。针对这些缺点人们又提出了NLMS、AP、RLS优化等,有些是针对梯度下降的(可以参考之前神经网络部分的adam和momentum);有些是针对噪声和误差统计特性的;感兴趣的同学可以自己搜索。

    几个参考资料:adaptic noise canceling

  • 控制理论

    待更新。笔者还需要进一步查找相关资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值