谁能解释和/或发布高级卡尔曼滤波器算法的 C 代码?

标签 c algorithm

我需要高级卡尔曼滤波算法的解释。最好是 C 代码,但只有算法适合我。

最佳答案

卡尔曼滤波器是维纳滤波器的特殊版本。具体来说,卡尔曼滤波器获取有关问题域的信息,并通过应用该领域特定知识来增强维纳滤波器。我发现维基百科页面是了解算法细节的极佳引用来源。

在此不重复具体细节(没有线性代数图像函数),卡尔曼滤波器会逐步估计 future 状态(就此而言,维纳滤波器也是如此)。特别是,我们估计状态,应用问题域特定噪声估计和状态变化近似,然后迭代。也就是说,我们采用当前的状态观察,过滤这些观察,预测下一个状态,然后组合该输出以产生一些新的下一个状态观察。

我发现卡尔曼滤波器对于预测运动路径非常有用。由于运动路径是平滑的,卡尔曼滤波器工作得特别好——运动可以很容易地使用过去已知的状态观察来预测。因此,假设您在路上行驶的汽车中,您会将汽车的当前坐标记录为当前状态。然后,您过滤过去的状态观察(您之前的位置)以预测汽车将(及时)到达的下一个点。请注意,您可以应用物理定律(例如,动量)来自定义此过滤器并得出非常合理的结果。速度或方向的随机变化对预测有一定影响。

看看这个C implementation你可以看到我们在运行卡尔曼滤波器时有两个主要函数 estimateupdate(wikipedia article 谈到了这些,但调用了 estimate预测”)。

最终,您将需要为您希望应用卡尔曼滤波器的问题确定一些非常具体的统计数据。特别是,您需要生成/记录/观察有关您观察到的噪声信号的方差如何随时间演变的统计数据。假设您预测的过程也是随机的,因此您也需要估计其统计数据。

关于谁能解释和/或发布高级卡尔曼滤波器算法的 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2011030/

相关文章:

android - 为什么 texImage2D 总是给出无效操作错误?

c - 为什么这个指针操作不起作用?

c++ - 如何判断 Qt (C/C++) 程序中是否正在运行屏幕保护程序? (微软 Windows )

sql - 计算同一组成员的有效方法

algorithm - 一个关于数据结构的谜题

c - "for"循环出错,我认为是内存问题

c - 如何将 scanf 的输入限制为整数和 float (一般为数字)

sql - 如何确定同时发生的事件数量最多的时间?

javascript - Hackerrank 算法挑战问题 - 在 hackerrank 环境(节点)中显示类型错误,但在浏览器控制台上运行良好。怎么了?

algorithm - 打印距离给定节点 k 处的所有节点