卡尔曼滤波器:如何在没有“状态转移模型”的情况下使用?

7
我正在处理来自安卓手机的加速度计数据。我希望能够过滤掉加速度计返回的噪声,记录手机的移动。
我了解到低通滤波并不足够,所以我在研究卡尔曼滤波器。
但是我没有从“ACCELERATION(k-1)”到“ACCELERATION(k)”的转换模型,因为它是用户的移动。所以我没有状态转移矩阵(不同论文中的H或F,它们在方程Xk = HXk-1 + Bcommand+noise中与Xk-1相乘)。
我看到有些人在简单的例子中使用单位矩阵。但是对于动态加速度,这如何起作用呢?
我知道卡尔曼滤波器,但我不知道在我的情况下应该如何生成H矩阵。

你为什么要自己做呢?为什么不使用SensorManager的LINEAR_ACCELERATION呢? - Ali
这个想法是再次进行过滤。我知道谷歌使用了卡尔曼滤波器来创建线性加速度(他们称之为传感器融合)。但是线性加速度的结果非常嘈杂。 - Poutrathor
是的,我明白。但是即使他们知道当前传感器中存在非常重要的噪声量。这已经在不同场合和许多人口中说过。我只需要一个干净的信号进行双重积分,我知道它不会起作用,因为双重积分。但这是一个项目,我必须完成它:(这是一场失败的战争,但我必须做出一些成果。 :((((( - Poutrathor
无论你做什么,你都不能做双重积分,请参见我的答案 - Ali
嗨,抱歉回复晚了。当然,我已经阅读了你的答案,你知道吗,在谷歌搜索这个主题时,它是最早的信息聚合之一吗?;) 顺便说一下,感谢你提供它,我相信它帮助了很多人。 编辑:没意识到你是 Ali,直到你提供了链接 ^^ - Poutrathor
显示剩余4条评论
4个回答

5
卡尔曼滤波器通常被认为是一个线性滤波器,其中你拥有所有的模型矩阵,但是滤波器的概念及其最初的应用来自于非线性模型。在这种情况下,你使用函数而不是矩阵。
如果预测和更新的函数高度非线性,你可以使用统计方法在线估计参数。首先可以尝试使用无迹卡尔曼滤波器,它通过确定性采样技术-无迹变换来恢复均值和协方差。我认为在你的情况下,这可能是最好的开始。
卡尔曼滤波器还有其他变体。你可以从维基百科开始,但如果你搜索"自适应卡尔曼滤波器",你会看到这个主题的多样性。
如果你想深入了解这个主题,但不一定要从数学方面开始,我推荐Phil Kim的优秀书籍:Kalman Filter for Beginners。还有其他可能性,如传感器融合,但这是另一个广泛的主题。

4

您可以使用单位矩阵。

状态转移矩阵用于在没有新的测量值情况下根据当前状态预测未来状态。在您的情况下,正如您所说,您没有任何方法来预测未来状态(加速度)-所以您最好的猜测就是未来状态(加速度)与当前状态相同。这正是单位矩阵所做的事情。

在许多卡尔曼滤波器中,存在一些方法可以根据当前状态预测未来状态,这就是非单位状态转移矩阵发挥作用的地方。例如,假设您的卡尔曼滤波器基于GPS和速度表估计车辆位置和速度,则可以通过根据速度改变位置来预测未来位置,即使没有新的测量值。Dave的答案展示了如何使用状态转移矩阵实现此目的。


2

给定一个状态向量[x, v_x, a_x],即物体在一个方向上的位置、速度和加速度(同样的逻辑适用于其它两个自由度)。通常情况下,你会将状态转移矩阵定义为:

1   dt   0.5*dt*dt
0   1    dt
0   0    1

如果您将这个写出来,您会得到:
xnew = x+v_x*dt + 0.5*a_x*dt*dt
vnew = v_x + a_x*dt
anew = a_x

这些是描述物体在恒定加速度下运动的运动方程。

Kalman框架中处理未知用户引起的运动的方法是通过植入噪声项。您假设,与其继续具有完全相同的加速度,存在未知的随机扰动加速度(以及状态的其他组件)。


-1
Kalman滤波器的特点在于它进行预测,然后根据观察结果对预测进行修正。如果您的模型不是非常动态,尽管您的模型假设位置是恒定的,但基于您的观察结果,您将得到介于两者之间的结果。因此,Identity可能会起作用。

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