有人能解释并/或者发布高级卡尔曼滤波算法的C代码吗?

6

我需要一份高级卡尔曼滤波算法的解释。最好提供C代码,但只有算法也可以。

1个回答

15
Kalman滤波器是Wiener滤波器的专业版本。具体而言,Kalman滤波器通过应用特定于问题域的知识来增强Wiener滤波器。我发现维基百科页面是理解该算法细节的绝佳参考来源。
不重复具体细节(无线性代数图像函数),Kalman滤波器逐步估计未来状态(Wiener滤波器也是如此)。特别地,我们估计状态,应用问题域特定的噪声估计和状态变化近似,然后迭代。也就是说,我们获取当前状态的观察值,过滤这些观察值,预测下一个状态,然后将该输出组合以产生一些新的下一个状态观察值。
我发现Kalman滤波器非常有用,可以用于预测运动路径。由于运动路径是平滑的,因此Kalman滤波器特别有效-可以使用过去已知的状态观察值轻松地预测运动。因此,假设您正在驾驶汽车沿着道路行驶,您将记录汽车的当前坐标作为当前状态。然后,您会过滤状态的过去观察值(先前的位置)来预测汽车在未来的某个时间点的位置。请注意,您可以应用物理定律(例如动量)来自定义此滤波器,并得出相当合理的结果。速度或方向的随机变化会对预测产生一些影响。
请看这个 C语言实现,你可以看到我们运行卡尔曼滤波器有两个主要的函数estimateupdate维基百科文章讨论了这些,但将estimate称为“predict”)。
最终,您需要确定与应用卡尔曼滤波器的问题非常具体的统计数据。特别是,您需要生成/记录/观察噪声信号的方差随时间的演变统计数据。假设您预测的过程也是随机的,并且因此您还需要估计其统计数据。

这实际上只是一个相对礼貌的版本,关于这个元主题:http://meta.stackexchange.com/questions/15650/ban-lmgtfy-let-me-google-that-for-you-links。我敦促您编辑您的答案。如果您知道什么是卡尔曼滤波器,请详细说明。否则,如果您不知道,则删除您的答案。因此,提供上下文、评论和一些算法见解。但是,仅仅提供Google链接就能赚取声望点数,这会削弱声望点数的意义,最终降低StackOverflow的价值。 - jason
2
哇,你知道如何使用谷歌。 - Greg
1
就 OP 的问题而言,我的原始回答已经回答了算法的问题。我很乐意对算法的使用提供评论,但是 SO 对线性代数的支持不足,因此应该足以链接到大学的维护良好的数学资源。我将尝试避免在未来直接链接。 - Mark Elliot
我对这个答案感到满意,你提供了很好的见解。如果你能通过算法引导OP,将其转化为杰出的答案(这种答案将使你获得声誉点数直到永远),那就更好了。谢谢你认真考虑我的评论并回来提供这样的答案。这就是StackOverflow的价值所在。我给你加一分。 - jason
非常好,我认为这是一个很棒的答案。 - jason
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接