【问题标题】:How to define state transition matrix for Kalman Filters?如何定义卡尔曼滤波器的状态转移矩阵?
【发布时间】:2019-08-07 06:22:44
【问题描述】:

我正在努力理解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.]])

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

【问题讨论】:

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


    【解决方案1】:

    状态转换矩阵描述了在给定初始状态的情况下,您的状态如何随时间传播。对于线性时不变 (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 规则或矩阵求逆同时求解它们。

    如您所见,只有 x(k) 出现在 (1) 中,系数为 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)),并且矩阵的前 2 行与方程中变量的系数很好地对应。

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

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

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

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

    【讨论】:

      【解决方案2】:

      所以转移矩阵描述的是从一个时间点i到下一个i+1的自发转移。比如说,你有一个小机器人开车穿过你的房子。然后有时它会在地板上滑动一点,因为它并不总是具有良好的牵引力。转移矩阵试图对其进行建模。

      然后在卡尔曼滤波器的几个部分中使用转换模型。首先,描述你的机器人在时间点 i 的方差和位置。它是制定传感器模型的预测误差(卡尔曼增益)的一部分,以最小化下一次测量的方差。

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

      如果这没有帮助,请询问更多。

      【讨论】:

      • 如何定义这个矩阵?你能展示一个小代码示例吗?
      • 我正在查看stackoverflow.com/questions/13901997/kalman-2d-filter-in-python 的代码,它是否定义了转换矩阵?
      • 所以 F 似乎是转换矩阵。正如维基百科中所描述的那样。我手头有另一本书,它使用其他变量并使用一个满是变量的矩阵。我认为这取决于您对模型的假设。假设 n = 状态向量 (x_position ,y_position ,velocity_x, velocity_y) 那么你的转换矩阵的大小应该是 n x n。
      • 我有一些代码供参考,它将转换矩阵定义为np.matrix([[1.,0.,0.1,0],[0.,1.,0.,0.1],[0.,0.,1.,0.],[0.,0.,0.,1.]]),它是一个 4x4 矩阵。我无法理解 0.1 在这里的意思。有什么想法吗?
      • 不幸的是没有。我刚刚留言,因为我知道您可以根据需要定义此矩阵及其含义(根据我的书)。为什么我的作者选择了一个矩阵,而您的代码示例包含一个 0.1 我无法分辨。代码假定速度值较小。但为什么?我不知道。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多