python - 如何定义卡尔曼滤波器的状态转移矩阵?
问题描述
我正在尝试理解卡尔曼滤波器,但有些术语我无法理解。
我正在阅读有关动态模型转换矩阵(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.]])
有人可以帮我理解这一点吗?这种表示究竟是什么?
解决方案
状态转换矩阵描述了在给定初始状态的情况下,您的状态如何随时间传播。对于线性时不变 (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]] 称为状态转移矩阵。请注意,这类似于您如何以矩阵形式编写线性方程组以使用克莱默规则或矩阵求逆同时求解它们。
如您所见,只有 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
注意:对于连续时间模型,获取状态转移矩阵需要找到矩阵指数。
推荐阅读
- python - pandas.to_datetime(字符串)中的错误
- jquery - 为什么我的“如果条件”会破坏我的代码?
- c++ - 何时通过 T*& p 而不是 T* p?
- javascript - 将对象的属性作为道具传递Vuejs
- angular - 无法创建 Angular 6 项目
- angular - Angular 材质扩展面板错误 - TypeError: this.driver.containsElement is not a function
- android - 如果存储库的属性不起作用,如何解决?
- python - 让python利用任何符号的输入
- bamboo - Bamboo 远程代理池
- c - C - 将指向数组的指针传递给函数以打印数组