添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

关于filtering 滤波我觉得知乎上的这个回答非常的精彩,我个人觉得用加权平均来理解,更好一些

一位专业课的教授给我们上课的时候,曾谈到:filtering is weighting(滤波即加权)。

滤波的作用就是给不同的信号分量不同的权重。最简单的loss pass filter, 就是直接把低频的信号给 1 1

从统计信号处理的角度,降噪,可以看成滤波的一种。降噪的目的在于突出信号本身而抑制噪声影响。从这个角度,降噪就是给信号一个高的权重而给噪声一个低的权重。维纳滤波就是一个典型的降噪滤波器。

​ 引自知乎:王航臣 https://www.zhihu.com/question/34809533/answer/61345742

同时插值、滤波、预测可以理解为:

插值 interpolation(或者说平滑 smoothing),就是用 过去 的数据来拟合 过去 的数据,比如牛顿插值,拉格朗日插值
滤波 filtering,是用 当前 过去 的数据来求取 当前 的数据
预测 prediction,是指用 当前 过去 的数据来求取 未来 的数据

关于 Kalman Filter

Kalman Filter 算法,是一种递推预测滤波算法,算法中即涉及到滤波,也涉及到对下一时刻数据的预测。Kalman Filter 由一系列递归数学公式描述。它们提供了一种高效可计算的方法来估计过程的状态,并使估计均方误差最小。卡尔曼滤波器应用广泛且功能强大:它可以估计信号的过去和当前状态,甚至能估计将来的状态,即使并不知道模型的确切性质。

Kalman Filter 也可以被认为是一种数据融合算法(Data fused algorithm),已有50多年的历史,是当今使用最重要和最常见的数据融合算法之一。Kalman Filter 的巨大成功归功于其小的计算需求,优雅的递归属性以及作为具有高斯误差统计的一维线性系统的最优估计器的状态[1]。

Kalman Filter 只能减小均值为0的测量噪声带来的影响。只要噪声期望为0,那么不管方差多大,只要迭代次数足够多,那效果都很好。反之,噪声期望不为0,那么估计值就还是与实际值有偏差。

因此使用 Kalman Filter 不用假设误差是正态分布,不过若所有的误差都是正态分布,Kalman Filter 可以得到正确的条件概率估计。关于此,可以参见文章[3]。

这里主要参考了文章[1] 和知乎的 回答[4]

让我们考虑一个一维问题,也是一个最简单的情况,一个在轨道上的小车的运动情况。

假若我们知道了小车的运动方向、所受的力、质量等等参数,以及初始状态,理论上我们可以求出它任意时刻的状态。当然,实际情况不会这么美好:

这个推算的过程可能会 受到各种不确定因素的影响 (内在的外在的,比如刮风下雨地震,小车结构不紧密,轮子不圆等等)导致我们并不能精确标识小车实际的状态。

假设每个状态分量受到的不确定因素都服从正态分布:

对小车的位置进行估计

下图: t = 0 t=0

根据小车的位置、运动方向等,我们可以 估计 t = 1 t=1

小车位置的分布变宽了,计算的过程中又加了新的噪声,所以不确定性变大了

估计中加入测量(measurement)

为了避免纯估计带来的偏差,我们在 t = 1 t=1

好了,现在我们得到两个不同的结果,估计的结果与测量的结果。Kalman先生,找到了相应权值,加权平均使红蓝分布合并为下图这个 绿色的正态分布

绿色分布不仅保证了在红蓝给定的条件下,小车位于该点的概率最大,而且它还是一个正态分布!

正态分布就意味着,可以把它当做初值继续往下算!这就是 Kalman Filter 迭代的关键,即 两个正态分布的融合仍是正态分布!

离散卡尔曼滤波器

1960年,Kalman 发表了他著名的用递归方法解决离散数据线性滤波问题的文章。这部分内容主要来自[2]。

被估计的过程状态

卡尔曼滤波器用于估计离散时间过程的状态变量 x R n x \in R^n

x k = F k x k 1 + B k u k 1 + w k 1 x_k = F_k \cdot x_{k-1}+ B_k \cdot u_{k-1}+w_{k-1}

定义观测变量 z R m z \in R^m

z k = H k x k + v k z_k=H_k \cdot x_k+v_k

随机信号 w k w_k

{ p ( w ) N ( 0 , Q ) p ( v ) N ( 0 , R ) \left\{\begin{matrix} p(w) \sim N(0,Q)\\ p(v) \sim N(0,R) \end{matrix}\right.

实际系统中, Q Q

离散卡尔曼滤波器算法

Kalman Filter 用反馈控制的方法估计过程状态:

滤波器估计过程某一时刻的状态,然后以(含噪声的)测量变量的方式获得反馈

因此 Kalman Filter 可分为两个部分: 时间更新方程 测量(状态)更新方程

时间更新方程负责及时向前推算当前状态变量和误差协方差估计的值,以便为下一个时间状态构造先验估计。测量更新方程负责反馈——也就是说,它将先验估计和新的测量变量结合以构造改进的后验估计。

时间更新方程也可视为 预估方程 ,测量更新方程可视为 校正方程 。最后的估计算法成为一种 预估-校正算法 ,如下图所示:

时间更新方程

离散卡尔曼滤波器 时间更新方程:

x k ^ = F x k 1 ^ + B u k 1 \hat{x_k}^-=F \cdot \hat{x_{k-1}}+B \cdot u_{k-1}

离散卡尔曼滤波器 测量更新方程:

x ^ k = x ^ k + K k ( z k H x ^ k ) \hat{x}_k=\hat{x}_k^-+K_k(z_k-H\cdot \hat{x}_k^-)

最大似然法、Ricatti方程法,以及文章[1]提及的直接对高斯密度函数变形的方法,都可以得到 K k K_k

计算完时间更新方程和测量更新方程,整个过程再次重复。

上一次计算得到的后验估计被作为下一次计算的先验估计。这种递归推算是卡尔曼滤波器最吸引人的特性之一——它比其它滤波器更容易实现:例如维纳滤波器 [Brown92] ,每次估计必须直接计算全部数据,而卡尔曼滤波器每次只根据以前的测量变量递归计算当前的状态估计。

整个卡尔曼滤波器的过程如下图所示:

另一种来自 Wiki 的表示方式如下:

卡尔曼滤波器可以认为是一个时域中离散线性动态系统,可以看做含高斯噪声的误差的线性算子的马尔可夫链( Markov chain

实践:估计随机常数

这个例子来自文章[2],Python代码 见此

在这个简单的例子里我们估计一个常数随机变量,比如电压。假设我们可以测量这个常数的幅值,但观测幅值中掺

入了幅值均方根(Root-Mean-Square, RMS)为 0.1 伏的白噪声。

过程的状态不随时间变化,所以 F = 1 F = 1

描述状态的线性差分方程变为:

x k = x k 1 + w x_k=x_{k-1}+w

观测变量为:

z k = x k + v z_k=x_k+v

滤波器方程和参数

时间更新方程为:

x ^ k = x ^ k 1 + w \hat{x}_k^- = \hat{x}_{k-1}+w

P k = P k 1 + Q P_k^-=P_{k-1}+Q

测量更新方程为:

K k = P k ( P k + R ) 1 = P k P k + R K_k=P_k^-(P_k^-+R)^{-1}=\frac{P_k^-}{P_k^-+R}

x ^ k = x ^ k + K k ( z k x ^ k ) \hat{x}_k=\hat{x}_k^-+K_k(z_k-\hat{x}_k^-)

P k = P k K k P k P_k=P_k^--K_k\cdot P_k^-

假设过程噪声方差 Q Q

类似地,我们要选择 P_{k−1} 的初值 P 0 P_0

此处请参见文章[2]

Reference

[1] R. Faragher, “Understanding the Basis of the Kalman Filter Via a Simple and Intuitive Derivation [Lecture Notes]”, IEEE Signal Processing Magazine , vol. 29, no. 5, pp. 128–132, Sep. 2012.

[2] G. Welch and G. Bishop, “ An Introduction to the Kalman Filter ”, p. 16, 2006.

[3] Fitzgerald, Robert J. “Divergence of the Kalman filter”, Automatic Control IEEE Transactions on 16.6(1971):736-747.

[4] 如何通俗并尽可能详细解释卡尔曼滤波? - 肖畅的回答 - 知乎 https://www.zhihu.com/question/23971601/answer/46480923

卡尔曼增益 K k K_k

测量(状态)更新方程