如何为卡尔曼滤波器定义状态转移矩阵?

时间:2019-03-16 08:47:59

标签: python opencv image-processing computer-vision kalman-filter

我正在尝试理解Kalman Filter,有些术语我无法理解。

我正在阅读有关动力学模型转换矩阵(4x4)的文章。它表示此矩阵会将下面的方程式映射到状态分量。这些方程是简单的物理方程:

xt = x(t-1) + vx(dt)
yt = y(t-1) + vy(dt)
dt = 1

代表该代码的代码如下:

dt = 0.1
DT = np.matrix([[1.,0.,dt,0],[0.,1.,0.,dt],[0.,0.,1.,0.],[0.,0.,0.,1.]])

有人可以帮助我理解吗?这种表示是什么?

2 个答案:

答案 0 :(得分:1)

因此,转换矩阵描述的是从一个时间点 i 到下一个 i + 1 的自发转换。假设您有一个小机器人穿过您的房屋。然后有时它会在地板上滑动一点,因为它并不总是具有良好的附着力。过渡矩阵会尝试对其建模。

然后在卡尔曼滤波器的多个部分中使用过渡模型。首先,描述时间点i时机器人的方差和位置。这是制定传感器模型的预测误差(卡尔曼增益)的一部分,以最大程度地减少下一个度量的方差。

从根本上讲,它是卡尔曼滤波器的重要组成部分,但也是微不足道的。它只是试图模拟随时间的自发转变(也就是滑动,滑移,被风推动...)

请问更多是否无济于事。

答案 1 :(得分:0)

状态转换矩阵描述了给定初始状态时状态如何随时间传播。对于线性时不变(LTI)系统,这是一个常数矩阵。

例如,假设我有一个下面给出的二维离散时间LTI模型:

x(k + 1)= x(k) ----(1)

y(k + 1)= y(k)+ 2x(k) -----(2)

这可以通过查看每个方程式中的状态系数来以矩阵形式编写,如下所示:

[x(k + 1),y(k + 1)] = [[1.0,0.0],[2.0,1.0]] * [x(k),y(k)]

矩阵[[1.0,0.0],[2.0,1.0]]被称为状态转换矩阵。请注意,这类似于您以矩阵形式编写方程式的线性系统使用Cramer规则或矩阵求逆同时求解它们。

如您所见,(1)中只有x(k)的系数为1,因此转换矩阵的第一行是[1.0,0.0]。同样,第二行是[2.0,1.0]。

看看矩阵的结构

DT = np.matrix( [[1.,0.,dt,0],[0.,1.,0.,dt],[0.,0.,1.,0。 ],[0.,0.,0.,1。]]

我可以告诉您有4个变量[x(t-1),y(t-1),vx,vy]。您仅显示了两个状态方程(x(t)和y(t)),矩阵的前两行与方程中变量的系数很好地吻合。

从您的矩阵中,我可以推断出最后两个方程是

vx(t)= vx(t-1)和vy(t)= vy(t-1)。

我建议您阅读有关状态空间模型的更多信息(LTI应该足够)。 https://en.wikipedia.org/wiki/State-space_representation

注意:对于连续时间模型,获取状态转换矩阵将需要找到矩阵指数。