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

相关文章

如何突破底层思维方式的牢笼

我始终认为,牛人和普通人的根本区别在于思维方式的不同,而非知识多少、阅历多少。 在这个世界上总有一帮神一样的人物存在。就像读到的那句话:“人类就像是一条历史长河中的鱼,只有某几条鱼跳出河面,看到世界的法则,但是却无法改变,当那几条鱼中有跳上岸,进化了,改变河道流向,那样才能改变法则。”  最近一段时间一直在不断寻在内心的东西,同时也在不断的去反省和否定自己的一些思维模式,尝试重

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

idea lanyu方式激活

访问http://idea.lanyus.com/这个地址。根据提示将0.0.0.0 account.jetbrains.com添加到hosts文件中,hosts文件在C:\Windows\System32\drivers\etc目录下。点击获得注册码即可。

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

以canvas方式绘制粒子背景效果,感觉还可以

这个是看到项目中别人写好的,感觉这种写法效果还可以,就存留记录下 就是这种的背景效果。如果想改背景颜色可以通过canvas.js文件中的fillStyle值改。 附上demo下载地址。 https://download.csdn.net/download/u012138137/11249872

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

vue子路由回退后刷新页面方式

最近碰到一个小问题,页面中含有 <transition name="router-slid" mode="out-in"><router-view></router-view></transition> 作为子页面加载显示的地方。但是一般正常子路由通过 this.$router.go(-1) 返回到上一层原先的页面中。通过路由历史返回方式原本父页面想更新数据在created 跟mounted

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

大林 PID 算法

Dahlin PID算法是一种用于控制和调节系统的比例积分延迟算法。以下是一个简单的C语言实现示例: #include <stdio.h>// DALIN PID 结构体定义typedef struct {float SetPoint; // 设定点float Proportion; // 比例float Integral; // 积分float Derivative; // 微分flo