DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式

本文主要是介绍DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式

flyfish
测量向量和观测变量在卡尔曼滤波的上下文中通常是同一个意思。它们都指的是从系统中直接获得的数据,这些数据用于更新系统的状态估计。可以是从传感器或测量设备直接获得的数据。这些数据反映了系统在某一时刻的状态或者实际观测到的值,但通常带有噪声。

状态向量映射到观测向量的过程通过观测矩阵 H \mathbf{H} H 实现。观测矩阵 H \mathbf{H} H 描述了系统状态如何映射到观测值。下面通过一个具体的例子来详细说明这一过程。

构造观测矩阵 H \mathbf{H} H 的步骤包括:

  1. 定义状态变量:明确系统的状态变量。
  2. 定义观测变量:明确系统的观测变量。
  3. 写出观测方程:根据观测变量和状态变量之间的关系写出观测方程。
  4. 构造观测矩阵:根据观测方程提取观测矩阵 H \mathbf{H} H

例子:一维位置和速度的观测

假设我们有一个物体在一维直线上运动,我们希望估计其位置和速度,并且我们可以直接观测到位置,但不能直接观测到速度。

定义状态变量

状态向量定义为:
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 是速度。

观测模型

我们可以直接测量位置 x k x_k xk,但不能直接测量速度 v k v_k vk。因此,观测向量定义为:
z k = [ z k ] \mathbf{z}_k = \begin{bmatrix} z_k \end{bmatrix} zk=[zk]
其中, z k z_k zk 是我们观测到的位置。

观测方程

观测方程描述了观测向量如何由状态向量生成。在这个例子中,观测向量只包含位置,因此观测矩阵 H \mathbf{H} H 为:
z k = H x k + v k \mathbf{z}_k = \mathbf{H} \mathbf{x}_k + \mathbf{v}_k zk=Hxk+vk
其中, v k \mathbf{v}_k vk 是观测噪声。

对于这个例子,观测矩阵 H \mathbf{H} H 是:
H = [ 1 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]

这样,观测方程可以写成:
z k = 1 ⋅ x k + 0 ⋅ v k + v k z_k = 1 \cdot x_k + 0 \cdot v_k + v_k zk=1xk+0vk+vk

即:
z k = x k + v k z_k = x_k + v_k zk=xk+vk

构造观测矩阵 H \mathbf{H} H

通过上面的分析,我们得到了观测矩阵 H \mathbf{H} H
H = [ 1 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]

另一个例子:二维位置和速度的观测

假设我们有一个物体在二维平面上运动,我们希望估计其二维位置和速度,并且我们可以直接观测到位置,但不能直接观测到速度。

定义状态变量

状态向量定义为:
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 x_k xk y k y_k yk,但不能直接测量速度 v x , k v_{x,k} vx,k v y , k v_{y,k} vy,k。因此,观测向量定义为:
z k = [ z x , k z y , k ] \mathbf{z}_k = \begin{bmatrix} z_{x,k} \\ z_{y,k} \end{bmatrix} zk=[zx,kzy,k]
其中, z x , k z_{x,k} zx,k z y , k z_{y,k} zy,k 是我们观测到的位置。

观测方程

观测方程描述了观测向量如何由状态向量生成。在这个例子中,观测向量只包含位置,因此观测矩阵 H \mathbf{H} H 为:
z k = H x k + v k \mathbf{z}_k = \mathbf{H} \mathbf{x}_k + \mathbf{v}_k zk=Hxk+vk
其中, v k \mathbf{v}_k vk 是观测噪声。

对于这个例子,观测矩阵 H \mathbf{H} H 是:
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]

这样,观测方程可以写成:
[ z x , k z y , k ] = [ 1 0 0 0 0 1 0 0 ] [ x k y k v x , k v y , k ] + [ v x , k v y , k ] \begin{bmatrix} z_{x,k} \\ z_{y,k} \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} x_k \\ y_k \\ v_{x,k} \\ v_{y,k} \end{bmatrix} + \begin{bmatrix} v_{x,k} \\ v_{y,k} \end{bmatrix} [zx,kzy,k]=[10010000] xkykvx,kvy,k +[vx,kvy,k]

即:
[ z x , k z y , k ] = [ x k y k ] + [ v x , k v y , k ] \begin{bmatrix} z_{x,k} \\ z_{y,k} \end{bmatrix} = \begin{bmatrix} x_k \\ y_k \end{bmatrix} + \begin{bmatrix} v_{x,k} \\ v_{y,k} \end{bmatrix} [zx,kzy,k]=[xkyk]+[vx,kvy,k]

构造观测矩阵 H \mathbf{H} H

通过上面的分析,我们得到了观测矩阵 H \mathbf{H} H
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]

测量向量(Measurement Vector)

测量向量包含实际观测或测量得到的数据。它通常是状态向量的一部分或线性变换。

  • 记作 z k \mathbf{z}_k zk,反映了系统在时间 k k k 的观测数据。

观测矩阵(Observation Matrix)

观测矩阵将状态向量映射到测量向量,表示从状态向量到测量向量的关系。它定义了哪些状态变量是可观测的以及如何被观测。

  • 记作 H k \mathbf{H}_k Hk,用于从状态向量中提取测量向量:
    z k = H k x k + v k \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k zk=Hkxk+vk

关系与应用

  • 测量向量与观测矩阵:观测矩阵 H k \mathbf{H}_k Hk 描述了如何从状态向量 x k \mathbf{x}_k xk 中提取测量向量 z k \mathbf{z}_k zk。例如,如果我们只能测量位置而不能直接测量速度,那么观测矩阵可能是: H k = [ 1 0 ] \mathbf{H}_k = \begin{bmatrix} 1 & 0 \end{bmatrix} Hk=[10]

例子

假设我们要跟踪一个在平面上运动的物体,其状态包括位置和速度:

  • 状态向量 x k \mathbf{x}_k xk: x k = [ x k y k x ˙ k y ˙ k ] \mathbf{x}_k = \begin{bmatrix} x_k \\ y_k \\ \dot{x}_k \\ \dot{y}_k \end{bmatrix} xk= xkykx˙ky˙k 这里 x k x_k xk y k y_k yk 是位置, x ˙ k \dot{x}_k x˙k y ˙ k \dot{y}_k y˙k 是速度。
  • 状态转移矩阵 A k \mathbf{A}_k Ak: A k = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] \mathbf{A}_k = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Ak= 10000100Δt0100Δt01 这表示位置随时间步长 Δ t \Delta t Δt 变化。
  • 测量向量 z k \mathbf{z}_k zk: z k = [ z x k z y k ] \mathbf{z}_k = \begin{bmatrix} z_{x_k} \\ z_{y_k} \end{bmatrix} zk=[zxkzyk]这里 z x k z_{x_k} zxk z y k z_{y_k} zyk 是测量得到的位置。
  • 观测矩阵 H k \mathbf{H}_k Hk: H k = [ 1 0 0 0 0 1 0 0 ] \mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} Hk=[10010000]这表示我们只测量位置,而速度不可测。

在卡尔曼滤波中,预测步骤利用状态转移矩阵和控制输入预测系统的下一个状态。具体步骤如下:

测量向量通过观测矩阵可以得到预测测量值。这一过程是将状态向量映射到测量空间的关键步骤,用于比较实际测量值和预测测量值,从而更新状态估计。观测矩阵和测量残差一起在卡尔曼滤波器中发挥作用,使得状态估计更加准确和可靠。

观测矩阵的作用

观测矩阵(Observation Matrix)描述了状态向量与测量向量之间的关系。它将状态向量映射到测量空间,使得可以从状态向量中提取出测量向量。

测量向量与预测测量值

假设系统的状态向量为 x k \mathbf{x}_k xk,测量向量为 z k \mathbf{z}_k zk,观测矩阵为 H k \mathbf{H}_k Hk。观测矩阵将状态向量映射到测量空间,得到预测测量值(或估计测量值) z ^ k \hat{\mathbf{z}}_k z^k
z ^ k = H k x k \hat{\mathbf{z}}_k = \mathbf{H}_k \mathbf{x}_k z^k=Hkxk

具体步骤

  1. 预测步骤:利用状态转移矩阵和控制输入预测下一时刻的状态向量 x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1
  2. 计算预测测量值:利用观测矩阵 H k \mathbf{H}_k Hk 将预测状态向量 x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1 转换为预测测量值 z ^ k \hat{\mathbf{z}}_k z^k
    z ^ k = H k x ^ k ∣ k − 1 \hat{\mathbf{z}}_k = \mathbf{H}_k \hat{\mathbf{x}}_{k|k-1} z^k=Hkx^kk1
  3. 更新步骤:比较预测测量值 z ^ k \hat{\mathbf{z}}_k z^k 和实际测量值 z k \mathbf{z}_k zk,计算测量残差 y k \mathbf{y}_k yk,并用它来更新状态向量和误差协方差矩阵。

例子

假设我们跟踪一个物体,其状态向量包括位置和速度:
x k = [ x k y k x ˙ k y ˙ k ] \mathbf{x}_k = \begin{bmatrix} x_k \\ y_k \\ \dot{x}_k \\ \dot{y}_k \end{bmatrix} xk= xkykx˙ky˙k
假设我们只能测量位置,而不能直接测量速度,观测矩阵可以表示为:
H k = [ 1 0 0 0 0 1 0 0 ] \mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} Hk=[10010000]
假设在时间步长 k k k 的预测状态向量为:
x ^ k ∣ k − 1 = [ 10 15 1 − 1 ] \hat{\mathbf{x}}_{k|k-1} = \begin{bmatrix} 10 \\ 15 \\ 1 \\ -1 \end{bmatrix} x^kk1= 101511
观测矩阵将状态向量映射到测量空间,得到预测测量值:
z ^ k = H k x ^ k ∣ k − 1 = [ 1 0 0 0 0 1 0 0 ] [ 10 15 1 − 1 ] = [ 10 15 ] \hat{\mathbf{z}}_k = \mathbf{H}_k \hat{\mathbf{x}}_{k|k-1} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} 10 \\ 15 \\ 1 \\ -1 \end{bmatrix} = \begin{bmatrix} 10 \\ 15 \end{bmatrix} z^k=Hkx^kk1=[10010000] 101511 =[1015]

测量残差和更新

实际测量值可能为:
z k = [ 11 14 ] \mathbf{z}_k = \begin{bmatrix} 11 \\ 14 \end{bmatrix} zk=[1114]
测量残差(或创新)为:
y k = z k − z ^ k = [ 11 14 ] − [ 10 15 ] = [ 1 − 1 ] \mathbf{y}_k = \mathbf{z}_k - \hat{\mathbf{z}}_k = \begin{bmatrix} 11 \\ 14 \end{bmatrix} - \begin{bmatrix} 10 \\ 15 \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \end{bmatrix} yk=zkz^k=[1114][1015]=[11]
测量残差用于更新预测状态,使其更接近实际测量值。更新后的状态向量和误差协方差矩阵通过卡尔曼增益 K k \mathbf{K}_k Kk 进行修正:
x ^ k ∣ k = x ^ k ∣ k − 1 + K k y k \hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k \mathbf{y}_k x^kk=x^kk1+Kkyk
P k ∣ k = ( I − K k H k ) P k ∣ k − 1 \mathbf{P}_{k|k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k|k-1} Pkk=(IKkHk)Pkk1

这篇关于DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058435

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API