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

作者 : admin 本文共6509个字,预计阅读时间需要17分钟 发布时间: 2024-06-13 共1人阅读

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=Fxk1+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

    k1 时刻转移到

    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}

    xkk1=Fxk1∣k1=[10Δt1][xk1vk1]=[xk1+vk1Δtvk1]

  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

    zkk1=Hxkk1=[10][xk1+vk1Δtvk1]=xk1+vk1Δ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}

    xkk1=Fxk1∣k1=

    10000100Δt0100Δt01

    xk1yk1vx,k1vy,k1

    =

    xk1+vx,k1Δtyk1+vy,k1Δtvx,k1vy,k1

  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}

    zkk1=Hxkk1=[10010000]

    xk1+vx,k1Δtyk1+vy,k1Δtvx,k1vy,k1

    =[xk1+vx,k1Δtyk1+vy,k1Δ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=xk1+vx,k1Δt

    y

    k

    =

    y

    k

    1

    +

    v

    y

    ,

    k

    1

    Δ

    t

    y_{k} = y_{k-1} + v_{y,k-1} \Delta t

    yk=yk1+vy,k1Δt

  1. 速度更新
  • 由于匀速直线运动,速度保持不变:

    v

    x

    ,

    k

    =

    v

    x

    ,

    k

    1

    v_{x,k} = v_{x,k-1}

    vx,k=vx,k1

    v

    y

    ,

    k

    =

    v

    y

    ,

    k

    1

    v_{y,k} = v_{y,k-1}

    vy,k=vy,k1

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

状态定义
  • 定义状态向量:

    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=Fxk1+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

    xk1yk1vx,k1vy,k1


    这就构成了状态转移矩阵:

    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=xk1+vx,k1Δt

    y

    k

    =

    y

    k

    1

    +

    v

    y

    ,

    k

    1

    Δ

    t

    y_{k} = y_{k-1} + v_{y,k-1} \Delta t

    yk=yk1+vy,k1Δt

  • 速度更新

    v

    x

    ,

    k

    =

    v

    x

    ,

    k

    1

    v_{x,k} = v_{x,k-1}

    vx,k=vx,k1

    v

    y

    ,

    k

    =

    v

    y

    ,

    k

    1

    v_{y,k} = v_{y,k-1}

    vy,k=vy,k1
    通过这种方式,状态转移矩阵

    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

k1 变化到时间

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=xk1+vx,k1Δt

y

k

=

y

k

1

+

v

y

,

k

1

Δ

t

y_{k} = y_{k-1} + v_{y,k-1} \Delta t

yk=yk1+vy,k1Δt

v

x

,

k

=

v

x

,

k

1

v_{x,k} = v_{x,k-1}

vx,k=vx,k1

v

y

,

k

=

v

y

,

k

1

v_{y,k} = v_{y,k-1}

vy,k=vy,k1

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

为了将这些方程组表示为矩阵形式,我们可以使用线性代数中的矩阵乘法,将多个方程合并到一个矩阵方程中。我们希望找到一个矩阵

F

\mathbf{F}

F,使得下面的矩阵方程表示我们系统的状态更新:

x

k

=

F

x

k

1

\mathbf{x}_{k} = \mathbf{F} \mathbf{x}_{k-1}

xk=Fxk1

具体过程如下:

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

  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=1xk1+Δtvx,k1+0yk1+0vy,k1

    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=0xk1+1vx,k1+0yk1+0vy,k1

  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=0xk1+0vx,k1+1yk1+Δtvy,k1

    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=0xk1+0vx,k1+0yk1+1vy,k1
    接下来,我们可以将这些方程组合成矩阵形式:

    [

    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

    xk1yk1vx,k1vy,k1

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

本站无任何商业行为
个人在线分享 » DeepSORT(目标跟踪算法) 卡尔曼滤波 状态空间模型的理解
E-->