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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第17章通信系统架构设计理论与实践

常见的5种常用的网络架构和构建网络的相关技术,以及网络构建的分析和设计方法。 17.1通信系统概述 通信技术和网络技术的发展,通信网络发生很大变化,入网的形式变化,传输的速率的提高、接入网络的方式多样化、网络结构的更为复杂…

~$开头的临时文件是什么?可以删除吗?

(2023.12.4) 在进行Word文档编辑的时候,都会产生一个以~$开头的临时文件,它会自动备份文档编辑内容,若是正常关闭程序,这个文档就会自动消失;而在非正常情况下关闭word文档,如断电&…

考研计组chap2数据的表示和运算(补充)

一、进位计数制 1.r进制 第i位表示r进制的权为i 2.进制转换 (1)r->10 对应位置数*权值 (2)2 -> 16 or 8 每三位2进制数可表示1位16进制 每四位2进制数可表示1位16进制 so 分开之后转为16进制即可 eg:11…

JDK8新特性【接口新特征、lambda语法、Supplier、Consumer、Function、Predicate】

目录 一、关于接口的新特性1.1 jdk1.8之前的接口重要特性1.2 JDK8以后代码演示 1.3 总结通过代码演示发现作用 二、Lambda表达式[重点]2.1 将匿名内部类写法改写为lambda写法2.2 语法特点能够写成lambda形式的的前提语法特征代码演示深入理解lambda 2.3 总结 三、函数式接口3.1…

ISO17025认证是什么?怎么做?

ISO17025认证是一种国际通用的实验室质量管理体系认证,其目标是确保实验室的技术能力、管理水平以及测试结果的可靠性和准确性达到国际认可的标准。该认证由国际标准化组织(ISO)和国际电工委员会(IEC)联合发布&#xf…

pytorch神经网络训练(AlexNet)

导包 import osimport torchimport torch.nn as nnimport torch.optim as optimfrom torch.utils.data import Dataset, DataLoaderfrom PIL import Imagefrom torchvision import models, transforms 定义自定义图像数据集 class CustomImageDataset(Dataset): 定义一个自…

美丽的拉萨,神奇的布达拉宫

原文链接:美丽的拉萨,神奇的布达拉宫 2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。2023年11月7日,OpenAI首届…

TcpClient 服务器、客户端连接

TcpClient 服务器 TcpListener 搭建tcp服务器的类,基于socket套接字通信的 1 创建服务器对象 TcpListener server new TcpListener(IPAddress.Parse("127.0.0.1"), 3000); 2 开启服务器 设置最大连接数 server.Start(1000); 3 接收客户端的链接,只能…

Android帧绘制流程深度解析 (二)

书接上回:Android帧绘制流程深度解析 (一) 5、 dispatchVsync: 在请求Vsync以后,choreographer会等待Vsync的到来,在Vsync信号到来后,会触发dispatchVsync函数,从而调用onVsync方法…

手机和模拟器的 Frida 环境配置

目录 一、配置 JDK 和 android 环境 二、连接设备和查看权限 1、连接设备 2、查看手机权限 三、手机配置 Frida 1、frida-server下载 2、验证 四、模拟器配置 Frida 1、下载模拟器并调节成手机版: 2、连接并查看架构 3、配置并开启 x86 的 frida-serve…

中文大数据训练的数据集

在训练中文大模型时,选择合适的数据集至关重要。以下是一些常用于中文大数据训练的数据集: 1. 新闻数据集 新闻数据集通常涵盖广泛的领域,包括时事、财经、体育、科技等,具有实时性和高质量的特点。 SogouCA:搜狗公…

shell脚本循环

循环: 循环是一种重复执行一段代码的结构。只要满足循环的条件会一直执行此代码。 组成部分:循环条件、循环体 **循环条件:**在一定范围之内,按照指定的次数来执行循环。 **循环体:**在指定的次数内,执行…

Phybers:脑纤维束分析软件包

摘要 本研究提供了一个用于分析脑纤维束数据的Python库(Phybers)。纤维束数据集包含由表示主要白质通路的3D点组成的流线(也称为纤维束)。目前已经提出了一些算法来分析这些数据,包括聚类、分割和可视化方法。由于流线的几何复杂性、文件格式和数据集的大小(可能包…

深度学习 - RNN训练过程推演

1. 数据准备 字符序列 “hello” 转换为 one-hot 编码表示: 输入: [‘h’, ‘e’, ‘l’, ‘l’]输出: [‘e’, ‘l’, ‘l’, ‘o’] 2. 初始化参数 假设我们使用一个单层的 RNN,隐藏层大小为2。初始参数如下: W x h ( 0.1 0.2 0.3 0.4…

HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

多层tablayout+ViewPager,NestedScrollView+ViewPager+RecyclerView,嵌套吸顶滑动冲突

先看实现的UI效果 其实就是仿BOSS的页面效果,第二层tab下的viewpager滑到最右边再右滑,就操作第一层viewpager滑动。页面上滑时把第一层tab和vp里的banner都推出界面,让第二层tab吸顶。 滑上去第二个tab块卡在顶部,如图 我混乱…

React 渲染函数render、初始化函数、更新函数运行了两次,原因为何,如何解决? React.StrictMode

文章目录 Intro官网解释解决另一篇官网文章——初始化函数或更新函数运行了两次 Intro 我在用 react 写一个 demo ,当我在某个自定义组件的 return 语句之前加上一句log之后,发现:每次页面重新渲染,该行日志都打印了两次&#xf…

HOW - 锚点(Anchor)导航

目录 创建锚点导航目录结构页面内容 说明样式和体验优化关键点总结 在Web开发中,锚点(Anchor)通常用于创建页面内的导航链接,使用户可以点击链接跳转到页面的特定部分。这通常通过HTML中的id属性和链接中的哈希片段实现。 以下是…

vue-loader

Vue Loader 是一个 webpack 的 loader,它允许你以一种名为单文件组件 (SFCs)的格式撰写 Vue 组件 起步 安装 npm install vue --save npm install webpack webpack-cli style-loader css-loader html-webpack-plugin vue-loader vue-template-compiler webpack…