DeepSORT(目标跟踪算法) 卡尔曼滤波 状态空间模型的理解

DeepSORT(目标跟踪算法) 卡尔曼滤波 状态空间模型的理解

flyfish

卡尔曼滤波器是一种用于估计动态系统状态的递归算法,它基于状态空间模型进行工作。状态空间模型由两个主要方程组成:状态方程和观测方程

状态方程描述系统的状态如何随时间演变,而观测方程描述如何通过测量值观察到系统的状态。

状态空间模型可以表示为:

  1. 状态方程
    x k = F x k − 1 + B u k + w k \mathbf{x}{k} = \mathbf{F} \mathbf{x}{k-1} + \mathbf{B} \mathbf{u}{k} + \mathbf{w}{k} xk=Fxk−1+Buk+wk
  2. 观测方程
    z k = H x k + v k \mathbf{z}{k} = \mathbf{H} \mathbf{x}{k} + \mathbf{v}_{k} zk=Hxk+vk
    其中:
  • x k \mathbf{x}_{k} xk 是时刻 k k k 的状态向量。
  • F \mathbf{F} F 是状态转移矩阵,描述状态如何从 k − 1 k-1 k−1 时刻转移到 k k k 时刻。
  • B \mathbf{B} B 是控制输入矩阵,描述控制向量 u k \mathbf{u}_{k} uk 对状态的影响。
  • w k \mathbf{w}_{k} wk 是过程噪声,假定为零均值的高斯白噪声。
  • z k \mathbf{z}_{k} zk 是时刻 k k k 的观测向量。
  • H \mathbf{H} H 是观测矩阵,描述状态向量如何映射到观测向量。
  • v k \mathbf{v}_{k} vk 是观测噪声,假定为零均值的高斯白噪声。
    为了说明卡尔曼滤波中的状态空间模型和矩阵乘法之间的关系,下面举两个具体的例子:

例子 1:一维位置和速度估计

假设我们有一个在直线上运动的物体,我们希望估计它的位置信息和速度信息。

状态空间模型
  • 状态向量: x k = [ x k v k ] \mathbf{x}{k} = \begin{bmatrix} x{k} \\ v_{k} \end{bmatrix} xk=[xkvk],其中 x k x_{k} xk 是位置, v k v_{k} vk 是速度。
  • 控制输入:假设没有控制输入,所以 u k = 0 \mathbf{u}_{k} = 0 uk=0。
  • 状态转移矩阵: F = [ 1 Δ t 0 1 ] \mathbf{F} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} F=[10Δt1],其中 Δ t \Delta t Δt 是时间间隔。
  • 观测矩阵:假设我们只能测量位置, H = [ 1 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]。
矩阵乘法
  1. 状态预测:
    x k ∣ k − 1 = F x k − 1 ∣ k − 1 = [ 1 Δ t 0 1 ] [ x k − 1 v k − 1 ] = [ x k − 1 + v k − 1 Δ t v k − 1 ] \mathbf{x}{k|k-1} = \mathbf{F} \mathbf{x}{k-1|k-1} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x_{k-1} \\ v_{k-1} \end{bmatrix} = \begin{bmatrix} x_{k-1} + v_{k-1} \Delta t \\ v_{k-1} \end{bmatrix} xk∣k−1=Fxk−1∣k−1=[10Δt1][xk−1vk−1]=[xk−1+vk−1Δtvk−1]
  2. 观测预测:
    z k ∣ k − 1 = H x k ∣ k − 1 = [ 1 0 ] [ x k − 1 + v k − 1 Δ t v k − 1 ] = x k − 1 + v k − 1 Δ t \mathbf{z}{k|k-1} = \mathbf{H} \mathbf{x}{k|k-1} = \begin{bmatrix} 1 & 0 \end{bmatrix} \begin{bmatrix} x_{k-1} + v_{k-1} \Delta t \\ v_{k-1} \end{bmatrix} = x_{k-1} + v_{k-1} \Delta t zk∣k−1=Hxk∣k−1=[10][xk−1+vk−1Δtvk−1]=xk−1+vk−1Δt

例子 2:二维位置和速度估计

假设我们有一个在平面上运动的物体,我们希望估计它的二维位置和速度。

状态空间模型
  • 状态向量: x k = [ x k y k v x , k v y , k ] \mathbf{x}{k} = \begin{bmatrix} x{k} \\ y_{k} \\ v_{x,k} \\ v_{y,k} \end{bmatrix} xk= xkykvx,kvy,k ,其中 x k x_{k} xk 和 y k y_{k} yk 是位置, v x , k v_{x,k} vx,k 和 v y , k v_{y,k} vy,k 是速度。
  • 控制输入:假设没有控制输入,所以 u k = 0 \mathbf{u}_{k} = 0 uk=0。
  • 状态转移矩阵: F = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] \mathbf{F} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} F= 10000100Δt0100Δt01 。
  • 观测矩阵:假设我们能测量位置, H = [ 1 0 0 0 0 1 0 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} H=[10010000]。
矩阵乘法
  1. 状态预测:
    x k ∣ k − 1 = F x k − 1 ∣ k − 1 = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] [ x k − 1 y k − 1 v x , k − 1 v y , k − 1 ] = [ x k − 1 + v x , k − 1 Δ t y k − 1 + v y , k − 1 Δ t v x , k − 1 v y , k − 1 ] \mathbf{x}{k|k-1} = \mathbf{F} \mathbf{x}{k-1|k-1} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_{k-1} \\ y_{k-1} \\ v_{x,k-1} \\ v_{y,k-1} \end{bmatrix} = \begin{bmatrix} x_{k-1} + v_{x,k-1} \Delta t \\ y_{k-1} + v_{y,k-1} \Delta t \\ v_{x,k-1} \\ v_{y,k-1} \end{bmatrix} xk∣k−1=Fxk−1∣k−1= 10000100Δt0100Δt01 xk−1yk−1vx,k−1vy,k−1 = xk−1+vx,k−1Δtyk−1+vy,k−1Δtvx,k−1vy,k−1
  2. 观测预测:
    z k ∣ k − 1 = H x k ∣ k − 1 = [ 1 0 0 0 0 1 0 0 ] [ x k − 1 + v x , k − 1 Δ t y k − 1 + v y , k − 1 Δ t v x , k − 1 v y , k − 1 ] = [ x k − 1 + v x , k − 1 Δ t y k − 1 + v y , k − 1 Δ t ] \mathbf{z}{k|k-1} = \mathbf{H} \mathbf{x}{k|k-1} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} x_{k-1} + v_{x,k-1} \Delta t \\ y_{k-1} + v_{y,k-1} \Delta t \\ v_{x,k-1} \\ v_{y,k-1} \end{bmatrix} = \begin{bmatrix} x_{k-1} + v_{x,k-1} \Delta t \\ y_{k-1} + v_{y,k-1} \Delta t \end{bmatrix} zk∣k−1=Hxk∣k−1=[10010000] xk−1+vx,k−1Δtyk−1+vy,k−1Δtvx,k−1vy,k−1 =[xk−1+vx,k−1Δtyk−1+vy,k−1Δt]

物理运动方程转化为状态转移矩阵的形式

物理运动模型

假设我们有一个物体在二维平面上运动。我们希望用状态向量描述其位置和速度。假设物体的运动是匀速直线运动,以下是它的物理运动方程:

  1. 位置更新
  • 在时间 Δ t \Delta t Δt 内,位置更新为:
    x k = x k − 1 + v x , k − 1 Δ t x_{k} = x_{k-1} + v_{x,k-1} \Delta t xk=xk−1+vx,k−1Δt
    y k = y k − 1 + v y , k − 1 Δ t y_{k} = y_{k-1} + v_{y,k-1} \Delta t yk=yk−1+vy,k−1Δt
  1. 速度更新
  • 由于匀速直线运动,速度保持不变:
    v x , k = v x , k − 1 v_{x,k} = v_{x,k-1} vx,k=vx,k−1
    v y , k = v y , k − 1 v_{y,k} = v_{y,k-1} vy,k=vy,k−1

结合运动模型构造状态转移矩阵

状态定义
  • 定义状态向量:
    x k = [ x k y k v x , k v y , k ] \mathbf{x}{k} = \begin{bmatrix} x{k} \\ y_{k} \\ v_{x,k} \\ v_{y,k} \end{bmatrix} xk= xkykvx,kvy,k
    其中 x k x_{k} xk 和 y k y_{k} yk 是位置, v x , k v_{x,k} vx,k 和 v y , k v_{y,k} vy,k 是速度。
状态方程
  • 将物理运动模型的方程转化为状态方程:
    x k = F x k − 1 + w k \mathbf{x}{k} = \mathbf{F} \mathbf{x}{k-1} + \mathbf{w}{k} xk=Fxk−1+wk
    其中 F \mathbf{F} F 是状态转移矩阵, w k \mathbf{w}
    {k} wk 是过程噪声。
构造状态转移矩阵
  • 根据上述物理运动模型,位置和速度的更新关系可以写成矩阵形式:
    [ x k y k v x , k v y , k ] = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] [ x k − 1 y k − 1 v x , k − 1 v y , k − 1 ] \begin{bmatrix} x_{k} \\ y_{k} \\ v_{x,k} \\ v_{y,k} \end{bmatrix} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_{k-1} \\ y_{k-1} \\ v_{x,k-1} \\ v_{y,k-1} \end{bmatrix} xkykvx,kvy,k = 10000100Δt0100Δt01 xk−1yk−1vx,k−1vy,k−1
    这就构成了状态转移矩阵:
    F = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] \mathbf{F} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} F= 10000100Δt0100Δt01

解释状态转移矩阵

这个状态转移矩阵表示以下更新规则:

  • 位置更新 : x k = x k − 1 + v x , k − 1 Δ t x_{k} = x_{k-1} + v_{x,k-1} \Delta t xk=xk−1+vx,k−1Δt y k = y k − 1 + v y , k − 1 Δ t y_{k} = y_{k-1} + v_{y,k-1} \Delta t yk=yk−1+vy,k−1Δt
  • 速度更新 : v x , k = v x , k − 1 v_{x,k} = v_{x,k-1} vx,k=vx,k−1 v y , k = v y , k − 1 v_{y,k} = v_{y,k-1} vy,k=vy,k−1
    通过这种方式,状态转移矩阵 F \mathbf{F} F 将物理模型中位置和速度的更新关系转化为矩阵运算。这使得卡尔曼滤波器能够系统地处理状态预测和更新。

构造状态转移矩阵的过程

这种转换就是将多个线性方程组合成一个矩阵方程。具体步骤如下:

1. 定义状态向量

首先,我们需要定义系统的状态向量。状态向量包含了系统在每个时间步的所有状态变量。在二维位置和速度估计的例子中,状态向量定义为:
x k = [ x k y k v x , k v y , k ] \mathbf{x}{k} = \begin{bmatrix} x{k} \\ y_{k} \\ v_{x,k} \\ v_{y,k} \end{bmatrix} xk= xkykvx,kvy,k

2. 写出状态更新的方程组

根据物理模型,写出系统状态变量如何从时间 k − 1 k-1 k−1 变化到时间 k k k 的更新方程。对于匀速直线运动模型,我们有:
x k = x k − 1 + v x , k − 1 Δ t x_{k} = x_{k-1} + v_{x,k-1} \Delta t xk=xk−1+vx,k−1Δt
y k = y k − 1 + v y , k − 1 Δ t y_{k} = y_{k-1} + v_{y,k-1} \Delta t yk=yk−1+vy,k−1Δt
v x , k = v x , k − 1 v_{x,k} = v_{x,k-1} vx,k=vx,k−1
v y , k = v y , k − 1 v_{y,k} = v_{y,k-1} vy,k=vy,k−1

3. 将方程组转换为矩阵形式

为了将这些方程组表示为矩阵形式,我们可以使用线性代数中的矩阵乘法,将多个方程合并到一个矩阵方程中。我们希望找到一个矩阵 F \mathbf{F} F,使得下面的矩阵方程表示我们系统的状态更新:
x k = F x k − 1 \mathbf{x}{k} = \mathbf{F} \mathbf{x}{k-1} xk=Fxk−1

具体过程如下:

首先,写出状态更新方程的分量形式:

  1. 对于位置 x k x_k xk 和速度 v x , k v_{x,k} vx,k:
    x k = 1 ⋅ x k − 1 + Δ t ⋅ v x , k − 1 + 0 ⋅ y k − 1 + 0 ⋅ v y , k − 1 x_{k} = 1 \cdot x_{k-1} + \Delta t \cdot v_{x,k-1} + 0 \cdot y_{k-1} + 0 \cdot v_{y,k-1} xk=1⋅xk−1+Δt⋅vx,k−1+0⋅yk−1+0⋅vy,k−1
    v x , k = 0 ⋅ x k − 1 + 1 ⋅ v x , k − 1 + 0 ⋅ y k − 1 + 0 ⋅ v y , k − 1 v_{x,k} = 0 \cdot x_{k-1} + 1 \cdot v_{x,k-1} + 0 \cdot y_{k-1} + 0 \cdot v_{y,k-1} vx,k=0⋅xk−1+1⋅vx,k−1+0⋅yk−1+0⋅vy,k−1
  2. 对于位置 y k y_k yk 和速度 v y , k v_{y,k} vy,k:
    y k = 0 ⋅ x k − 1 + 0 ⋅ v x , k − 1 + 1 ⋅ y k − 1 + Δ t ⋅ v y , k − 1 y_{k} = 0 \cdot x_{k-1} + 0 \cdot v_{x,k-1} + 1 \cdot y_{k-1} + \Delta t \cdot v_{y,k-1} yk=0⋅xk−1+0⋅vx,k−1+1⋅yk−1+Δt⋅vy,k−1
    v y , k = 0 ⋅ x k − 1 + 0 ⋅ v x , k − 1 + 0 ⋅ y k − 1 + 1 ⋅ v y , k − 1 v_{y,k} = 0 \cdot x_{k-1} + 0 \cdot v_{x,k-1} + 0 \cdot y_{k-1} + 1 \cdot v_{y,k-1} vy,k=0⋅xk−1+0⋅vx,k−1+0⋅yk−1+1⋅vy,k−1
    接下来,我们可以将这些方程组合成矩阵形式:
    [ x k y k v x , k v y , k ] = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] [ x k − 1 y k − 1 v x , k − 1 v y , k − 1 ] \begin{bmatrix} x_{k} \\ y_{k} \\ v_{x,k} \\ v_{y,k} \end{bmatrix} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_{k-1} \\ y_{k-1} \\ v_{x,k-1} \\ v_{y,k-1} \end{bmatrix} xkykvx,kvy,k = 10000100Δt0100Δt01 xk−1yk−1vx,k−1vy,k−1

4. 构造状态转移矩阵 F \mathbf{F} F

通过上面的矩阵形式,我们得到了状态转移矩阵 F \mathbf{F} F:
F = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] \mathbf{F} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} F= 10000100Δt0100Δt01

相关推荐
penguin_bark3 分钟前
69. x 的平方根
算法
这可就有点麻烦了12 分钟前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
A_lvvx16 分钟前
OpenCV透视变换
人工智能·opencv·计算机视觉
苏宸啊18 分钟前
顺序表及其代码实现
数据结构·算法
lin zaixi()21 分钟前
贪心思想之——最大子段和问题
数据结构·算法
FindYou.22 分钟前
C - Separated Lunch
算法·深度优先
百锦再24 分钟前
自动驾驶的技术实现及原理
人工智能·机器学习·自动驾驶
AcademicIdeas学境思源26 分钟前
避免学术欺诈!在ChatGPT帮助下实现严格引用并避免抄袭
人工智能
夜雨翦春韭28 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
Kent_J_Truman39 分钟前
【平方差 / C】
算法