实践中的卡尔曼滤波器

信息处理 卡尔曼滤波器 自适应算法
2022-01-09 01:14:54

我已经阅读了卡尔曼滤波器的描述,但我不清楚它在实践中是如何结合在一起的。它似乎主要针对机械或电气系统,因为它需要线性状态转换,并且出于同样的原因(它需要线性状态转换),它对于异常检测或定位状态转换没有用,对吗?在实践中,人们通常如何找到预期提前知道的组件以使用卡尔曼滤波器。我已经列出了组件,如果我对需要提前知道的内容的理解不正确,请纠正我。

我相信这些不需要“提前”知道:

  • 过程噪音w
  • 观察噪声v
  • 实际状态x(这是卡尔曼滤波器试图估计的)

我相信这些需要“提前”知道才能使用卡尔曼滤波器:

  • 我们应用的线性状态转移模型x(我们需要提前知道这一点,因此我们的状态必须受已知定律的支配,即,当从一种状态到另一种状态的转换被充分理解并且具有一定的噪声时,卡尔曼滤波器可用于校正测量 - 它是不是异常查找器或查找随机状态变化的工具)
  • 控制向量u
  • 应用于控制向量的控制输入模型u(我们需要提前知道这一点,所以要使用卡尔曼滤波器,我们还需要提前知道我们的控制值如何影响模型,最多是一些高斯噪声,并且效果需要是线性的)
  • 协方差Q过程噪声(在维基百科文章中似乎与时间有关,即取决于时间k) - 看来我们需要提前知道这一点,随着时间的推移,我认为在实践中它被认为是恒定的?
  • (线性)观测模型H
  • 协方差R(在维基百科文章中似乎也取决于时间) - 类似的问题Q

PS 是的,我知道其中很多都取决于时间,我只是删除了所有的下标混乱。随意想象小写字母k如果您愿意,可以从每个变量名称的右侧和下方。

1个回答

对于某些上下文,让我们回到卡尔曼滤波器方程:

x(k+1)=F(k)x(k)+G(k)u(k)+w(k)z(k)=H(k)x(k)+v(k).

简而言之,对于普通的香草 KF:

F(k)必须完全定义。这直接来自系统的微分方程。如果不是,你有一个双重估计问题(即估计状态和系统模型)。如果您没有系统的微分方程,那么 KF 不适合您!

x(k)根据定义,是不可知的。毕竟,如果你知道它,它就不会是一个估计问题!

控制向量u(k)必须完全定义。如果没有额外的系统建模,控制向量的唯一不确定性可能是AWGN,它可能会被合并到过程噪声中。已知矩阵G(k)将控制输入与状态相关联——例如,副翼运动如何影响飞机的滚动。这在数学上被建模为 KF 开发的一部分。

系统过程噪声w(k)根据定义,也是不可知的(因为它是随机噪声!)。但是,必须知道噪声的统计数据,对于普通的普通 KF,噪声统计数据必须为零均值 AWGN,协方差已知Q(k). 有时,噪声的协方差可能会在样本之间发生变化,但在许多情况下它是固定的,因此Q是一个常数。在某些情况下,这将是已知的,但在许多情况下,这将在系统开发期间进行“调整”。

观察是一个类似的故事。将您的测量与状态相关联的矩阵H(k)必须完全定义。您的测量结果z(k)也是众所周知的,因为那是传感器的读数!

然而,传感器测量值被 AWGN 破坏 v(k),它是随机噪声,根据定义是未知的。必须知道噪声的统计量,即具有协方差的零均值R(k). 再一次,协方差可能会随时间变化,但对于许多应用程序来说,它是一个固定值。通常,您的传感器将具有数据表中已知的噪声特性。否则,确定您需要使用的传感器的均值和方差并不难。是的,这也可以根据经验进行“调整”。

有大量的“技巧”可以解决普通 KF 中的限制,但这些远远超出了这个问题的范围。


事后思考:

虽然在谷歌上搜索“卡尔曼滤波器”会产生一百万次点击,但我认为有几件事值得一看。维基百科页面太杂乱,无法有效学习:(

AVR Freaks上,我前段时间写了一个关于卡尔曼滤波器的“无方程”介绍,试图介绍它的实际用途。

如果您不怕数学,那么有几本值得一读的高年级本科/研究生早期书籍。尝试包含所有理论和大量示例系统的Brown 和 Hwang 。另一个强烈推荐但我没有读过的是Gelb,它具有便宜的明显优势!