状态空间模型(SSM)

论文:A new approach to linear filtering and prediction problems http://160.78.24.2/Public/Kalman/Kalman1960.pdf

状态空间模型介绍

术语状态空间模型具有非常广泛的含义,它简单地表示任何具有潜在状态的循环过程的概念。 它已被用来指代不同学科中的许多不同概念,包括马尔可夫决策过程 (MDP)(强化学习(Hafner 等人,2020))、动态因果建模(DCM)(计算神经科学(Friston、Harrison 和 Penny 2003) ))、卡尔曼滤波器(控制(Kalman 1960))、隐马尔可夫模型(HMM)和线性动力系统(LDS)(机器学习)以及循环(有时是卷积)模型(深度学习)。
状态空间模型是一种描述动态系统行为的数学模型,它使用一组一阶微分方程(连续时间系统)或差分方程(离散时间系统)来表示系统的内部状态的演化,同时用另一组方程来描述系统状态和输出之间的关系。这些方程可以表示为矩阵和向量的形式,以处理多变量系统。
在状态空间表述中,系统由下面的两个方程组定义。SSM将一个1-D的输入向量 u ( t ) u(t) u(t)映射为一个N-D的潜在状态变量 x ( t ) x(t) x(t),然后再映射为一个1-D的输出向量 y ( t ) y(t) y(t)我们的目标是将这个SSM作为黑盒转化为深度模型,其中参数F、D、M、G通过梯度下降等方法学习,并且参数G可以省略,因为参数G的作用类似残差网络的跳跃链接。

  1. 状态方程
    x ′ ( t ) = F x ( t ) + D u ( t ) + ω ( t ) x'(t) = Fx(t) + Du(t) + \omega(t) x(t)=Fx(t)+Du(t)+ω(t)** 公式(1) **
    这个方程描述了系统内部状态 x ( t ) x(t) x(t)随时间的演化。这里:
  • x ( t ) x(t) x(t) 是系统状态变量,包含所有必要的变量来描述系统在任意时刻的状况,是一个 n n n维向量。
  • x ′ ( t ) x'(t) x(t) x ( t ) x(t) x(t) 关于时间的微分,表示系统状态的变化率。
  • F F F 是系统矩阵,描述了系统状态之间的关系,以及它们如何随时间自然演化(无控制输入时),是一个 n × n n \times n n×n矩阵。
  • u ( t ) u(t) u(t) 是控制输入向量,表示外部输入或控制信号的影响,是一个 m m m维向量,并且 m ≤ n m \le n mn
  • D D D 是输入矩阵,描述了控制输入如何影响系统状态,是一个 n × m n \times m n×m矩阵。
  • ω ( t ) \omega(t) ω(t)是过程噪声,它代表系统内部的不确定性,一般假设为高斯噪声。
  1. 观测方程
    y ( t ) = M x ( t ) + G u ( t ) + e ( t ) y(t) = Mx(t) + Gu(t) + e(t) y(t)=Mx(t)+Gu(t)+e(t)** 公式(2)**
    这个方程描述了系统的输出 y ( t ) y(t) y(t) 如何依赖于系统状态和控制输入。这里:
  • y ( t ) y(t) y(t)是输出向量或者观测向量,包含所有的测量或观测到的变量,是一个 p p p维向量,并且 p ≤ n p \le n pn矩阵。
  • M M M是输出矩阵,描述了系统状态如何影响输出,是一个 p ≤ n p \le n pn矩阵。
  • G G G是直达传递矩阵(在很多实际系统中,这个矩阵通常是零或者不显著),表示控制输入直接对输出的影响,是一个 n × m n \times m n×m矩阵。
  • e ( t ) e(t) e(t)是测量噪声,它代表了测量过程中的不确定性或误差,一般假设为高斯噪声。

用下图可以说明这个过程。
image.png

状态空间模型离散化

将状态空间模型从连续过程转换为离散过程是控制理论和信号处理中的一个常见任务,因为数字计算机和微控制器通常只能处理离散时间信号。为了在数字设备上实现卡尔曼滤波器,我们需要将连续时间下的状态空间模型离散化。
连续时间状态空间模型通常表示为微分方程的形式:
x ˙ ( t ) = A ( t ) x ( t ) + B ( t ) u ( t ) \dot{\mathbf{x}}(t) = \mathbf{A}(t) \mathbf{x}(t) + \mathbf{B}(t) \mathbf{u}(t) x˙(t)=A(t)x(t)+B(t)u(t)
y ( t ) = C ( t ) x ( t ) + D ( t ) u ( t ) \mathbf{y}(t) = \mathbf{C}(t) \mathbf{x}(t) + \mathbf{D}(t) \mathbf{u}(t) y(t)=C(t)x(t)+D(t)u(t)
这里, x ( t ) \mathbf{x}(t) x(t) 是状态向量, u ( t ) \mathbf{u}(t) u(t) 是输入向量, y ( t ) \mathbf{y}(t) y(t)是输出向量, A ( t ) \mathbf{A}(t) A(t), B ( t ) \mathbf{B}(t) B(t), C ( t ) \mathbf{C}(t) C(t), 和 D ( t ) \mathbf{D}(t) D(t) 分别是系统矩阵。
离散化过程涉及以下步骤:

  1. 采样时间的选择
  • 确定一个合适的采样时间间隔 Δ t \Delta t Δt,这个时间间隔要基于系统动态特性以及所需的控制精度。
  1. 离散化系统矩阵
  • 使用适当的数值方法将连续系统矩阵 A ( t ) \mathbf{A}(t) A(t) B ( t ) \mathbf{B}(t) B(t) 转换为离散矩阵 A d \mathbf{A}_d Ad_ 和 _ B d \mathbf{B}_d Bd。最常见的方法是指数映射(也称为矩阵指数):
    A d = e A Δ t \mathbf{A}_d = e^{\mathbf{A}\Delta t} Ad=eAΔt
    B d = ( ∫ 0 Δ t e A τ d τ ) B \mathbf{B}_d = (\int{0}^{\Delta t} e^{\mathbf{A}\tau} d\tau) \mathbf{B} Bd=(0ΔteAτdτ)B
  • 这些公式适用于时间不变系统。对于时间变化系统,需要更复杂的积分或数值分析方法。
  1. 离散化状态和输出方程
  • 确定的离散时间点 t k = k Δ t t_k = k\Delta t tk=kΔt 上的状态和输出方程可以表示为:
    x [ k + 1 ] = A d x [ k ] + B d u [ k ] \mathbf{x}[k+1] = \mathbf{A}_d \mathbf{x}[k] + \mathbf{B}_d \mathbf{u}[k] x[k+1]=Adx[k]+Bdu[k]
    y [ k ] = C d x [ k ] + D d u [ k ] \mathbf{y}[k] = \mathbf{C}_d \mathbf{x}[k] + \mathbf{D}_d \mathbf{u}[k] y[k]=Cdx[k]+Ddu[k]
  • 其中, C d \mathbf{C}_d Cd_和 _ D d \mathbf{D}_d Dd 通常可以直接等同于连续时间模型中的 C \mathbf{C} C D \mathbf{D} D,除非输出方程也涉及时间的导数。

一旦连续系统被转换为离散系统,就可以使用离散时间的卡尔曼滤波器来估计系统的状态。注意,离散化过程必须保留系统的关键动态特性,而且采样时间必须遵守奈奎斯特采样定理,以避免混叠现象。
用下图可以说明这个过程。
image.png

卡尔曼滤波器

我们可以使用卡尔曼滤波器解决状态空间方程。
卡尔曼滤波器用于解决状态空间模型中的估计问题时,分为两个阶段:预测阶段和更新阶段。状态空间模型通常由两个方程定义:状态方程和观测方程。
状态方程描述了系统状态的时间演化,通常形式为:
x k = F k x k − 1 + B k u k + w k \mathbf{x}_k = \mathbf{F}_k \mathbf{x}_{k-1} + \mathbf{B}_k \mathbf{u}_k + \mathbf{w}_k xk=Fkxk1+Bkuk+wk
其中,

  • x k \mathbf{x}_k xk 是时间点 (k) 的状态向量。
  • F k \mathbf{F}_k Fk是状态转移矩阵,描述了状态如何从时间 k − 1 k-1 k1 k k k 转移。
  • B k \mathbf{B}_k Bk_是控制输入矩阵,将控制向量 _ u k \mathbf{u}_k uk 的影响加入状态转移。
  • w k \mathbf{w}_k wk 是系统过程噪声,通常假设为高斯白噪声。

观测方程描述了如何从状态向量得到观测量,形式为:
z k = H k x k + v k \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k zk=Hkxk+vk
其中,

  • z k \mathbf{z}_k zk 是时间点 (k) 的观测向量。
  • H k \mathbf{H}_k Hk 是观测矩阵,将状态空间映射到观测空间。
  • v k \mathbf{v}_k vk是观测噪声,通常也假设为高斯白噪声。

现在我们来看卡尔曼滤波器如何工作:

  1. 初始化
  • 估计初始状态 x ^ 0 \hat{\mathbf{x}}_0 x^0_和初始误差协方差矩阵 _ P 0 \mathbf{P}_0 P0
  1. 预测阶段(Predict):
  • 用状态方程预测下一个状态 x ^ k − \hat{\mathbf{x}}_k^- x^k
    x ^ k − = F k − 1 x ^ k − 1 + B k − 1 u k − 1 \hat{\mathbf{x}}_k^- = \mathbf{F}_{k-1} \hat{\mathbf{x}}_{k-1} + \mathbf{B}_{k-1} \mathbf{u}_{k-1} x^k=Fk1x^k1+Bk1uk1
  • 估计预测状态的误差协方差 P k − \mathbf{P}_k^- Pk
    P k − = F k − 1 P k − 1 F k − 1 T + Q k − 1 \mathbf{P}_k^- = \mathbf{F}_{k-1} \mathbf{P}_{k-1} \mathbf{F}_{k-1}^T + \mathbf{Q}_{k-1} Pk=Fk1Pk1Fk1T+Qk1
  • 其中, Q k − 1 \mathbf{Q}_{k-1} Qk1 是过程噪声协方差矩阵,表示模型的不确定性。
  1. 更新阶段(Update):
  • 计算卡尔曼增益 K k \mathbf{K}_k Kk
    K k = P k − H k T ( H k P k − H k T + R k ) − 1 \mathbf{K}_k = \mathbf{P}_k^- \mathbf{H}_k^T (\mathbf{H}_k \mathbf{P}_k^- \mathbf{H}_k^T + \mathbf{R}_k)^{-1} Kk=PkHkT(HkPkHkT+Rk)1
  • 其中, R k \mathbf{R}_k Rk是观测噪声协方差矩阵。
  • 用观测值更新预测的状态:
    x ^ k = x ^ k − + K k ( z k − H k x ^ k − ) \hat{\mathbf{x}}_k = \hat{\mathbf{x}}_k^- + \mathbf{K}_k (\mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_k^-) x^k=x^k+Kk(zkHkx^k)
  • 更新误差协方差矩阵:
    P k = ( I − K k H k ) P k − \mathbf{P}_k = (I - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_k^- Pk=(IKkHk)Pk这个过程会不断迭代,随着新的观测数据的到来,卡尔曼滤波器会继续预测和更新系统的状态。卡尔曼滤波器的优势在于它能够在存在噪声的情况下,提供实时的最优估计。此外,卡尔曼滤波器是最小均方误差(MMSE)估计的一种实现,能够确保估计误差的协方差最小化。

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

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

相关文章

MySQL数据库进阶第四篇(视图/存储过程/触发器)

文章目录 一、视图简单介绍与基础语法二、视图的检查选项三、视图的更新四、视图的作用五、存储过程的概念与特点六、存储过程的 创建,调用,查看,删除七、存储过程 — 系统变量八、存储过程 — 用户定义变量九、存储过程 — 局部变量十、存储…

深入理解指针2

各位小伙伴们,我们继续来学习指针,指针和结构体以及动态内存管理对后面的数据结构学习有非常大的帮助,所有我们一定要把这些知识点学会。OK,正式进入学习之旅吧 1.数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时,有这…

免费分享一套SpringBoot+Vue实验室(预约)管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue实验室(预约)管理系统 ,分享下哈。 项目视频演示 【免费】SpringBootVue实验室(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue实验室(预约)管理系统 Java毕…

微信小程序 wxs内联与外联的写法

内联写法 <!-- 内联wxs --> <view>大写字母{{m1.toUpper("xmly")}}</view> <wxs module"m1">module.exports.toUpperfunction(str){return str.toUpperCase()} </wxs> 外联写法 新建一个wxs文件 写一个函数&#xff0c;将…

争取用一张图说清楚什么是编译器(Compiler)

抽完一颗烟&#xff0c;回来&#xff0c;突然看到了德州仪器的各个DSP芯片的编译器&#xff0c;想到了给编译器做个说明&#xff0c;争取对编译器概念有点糊涂的小朋友能突然一下明白&#xff0c; ┗|&#xff40;O′|┛ 嗷~~ 编译器就是 人机间 语言 的 翻译官&#xff08;Tra…

YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

论文地址&#xff1a;https://arxiv.org/pdf/2402.13616.pdf 代码地址&#xff1a;GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information yolov7的作者更新了yolov9 摘要 当今的深度学习方…

TypeScript基础知识点

TypeScript 简介和发展 TypeScript 是一种由微软开发的开源编程语言&#xff0c;其设计目标是为了解决 JavaScript 在大规模应用开发时所面临的类型安全和可维护性问题。TypeScript 的诞生背景可以追溯到2012年&#xff0c;当时随着Web应用程序复杂度的日益增长&#xff0c;J…

PCIe 5.0 Layout Guide笔记

一、松耦合和紧耦合 松耦合优点是相同走线宽度下电介质更薄,同时对线间距的变化不敏感,提供了更好的阻抗控制;松耦合缺点是需要更大的区域进行绕线;紧耦合优点是更高的布线密度,相同阻抗下走线可以更细,同时具有更好的共模噪声抑制;紧耦合缺点是阻抗随线间距的变化大;【…

一个模板项目复制多个时候报错

复制的项目虽然用新idea打开&#xff0c;但是用的parent版本号&#xff0c;或者名字还是一个&#xff0c;这块要改&#xff0c;改版本号就行&#xff0c;子项目也改 循环依赖解决 pom中引入了循环依赖&#xff0c;pom已经最新&#xff0c;但是启动还是报错&#xff0c;idea缓…

基于Java的艺培管理解决方案

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

cmake构建在Visual stdio 2019 和Xcode的Qt的程序

概述&#xff1a;用CMake可以方便地构建Qt的应用程序&#xff0c;前提是你已经配置好用Visual Stdio 开发的Qt的环境或者Xcode的Qt开发环境。 1、编写CMakeLists.txt cmake_minimum_required(VERSION 3.6)set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STR…

介绍 Gradio 与 Hugging Face

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 我们可以使用 Gradio 库为我们的模型构建演示。Gradio 允许您完全使用 Python 为任何机器学习模型构建、自定义和共享基于 Web 的演示。使机器学习模型变得可交互和易于使用。 为什么首先要为您的机器…

Parade Series - NVR Stat

获取文件夹占用空间信息 DIR %NVRHOME% /W /SDIR %NVRHOME% /s | tail -n2 | sed s/,//g | awk {if(NR1){key"Used";}else{key"Free";};sum$3/(1024*1024);unit"MB";if(sum^>1024){sumsum/1024;unit"GB";}printf("{\"Ty…

Ansible group模块 该模块主要用于添加或删除组。

目录 创建组验证删除组验证删除一个不存在的组 常用的选项如下&#xff1a; gid  #设置组的GID号 name  #指定组的名称 state  #指定组的状态&#xff0c;默认为创建&#xff0c;设置值为absent为删除 system  #设置值为yes&#xff0c;表示创建为系统组 创建组 ansib…

【Leetcode】938. 二叉搜索树的范围和

文章目录 题目思路代码结论 题目 题目链接 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输入&#xff1a;root [10,5,15,3,7,null,18], low 7, high 15 输出&#xff1a;32 示例 2&#xff1a; 输入…

linux+fortify

系统版本:Ubuntu22.04桌面版 一:登录root用户关闭防火墙 sudo passwd root systemctl stop ufw.service systemctl disable ufw.service 二:开启ssh服务 sudo apt update sudo apt install openssh-server sudo systemctl start ssh sudo systemctl status ssh连接上WinS…

笔记本如何录屏?很简单,我来告诉你

“最近遇到了一些工作上的问题&#xff0c;需要录制一些会议和讨论的内容&#xff0c;以便于后续的整理和回顾。但是&#xff0c;我没有使用过笔记本进行录屏&#xff0c;不知道该如何操作。大家有没有简单易懂的笔记本录屏指南&#xff0c;教教我&#xff01;” 在当今数字化…

vue3(vite)+electron打包踩坑记录(1)

vue3(vite)electron打包踩坑记录 - 打包vue 第一步 编译vue 使用vite构建vue&#xff0c;package.json如下 {"name": "central-manager","private": true,"version": "0.0.0","type": "commonjs",&q…

2D目标检测正负样本分配集合

一&#xff1a;CenterNet Center point based正负样本分配方式&#xff1a;中心像素分配为当前目标。 如果同类的两个高斯核具有交叠的情况&#xff0c;我们逐元素【像素】的选取最大值。Center point based 正样本分配方式的缺点&#xff1a;如果两个不同的物体完美匹配&…

CFS的覆灭,Linux新调度器EEVDF详解

本文主要总结了EEVDF论文和Linux内核实现中关键逻辑的推导&#xff0c;着重强调代码逻辑和论文公式之间的关系&#xff0c;它又长又全&#xff0c;像今天的汤圆又大又圆:D Warn&#xff1a;多行的公式编号渲染有点问题&#xff0c;当存在多行公式时&#xff0c;仅对最后一条式…