【机器学习】线性动态系统的基本概念以及卡尔曼滤波器的概念和应用方式

news2024/11/17 7:42:56

引言

线性动态系统(Linear Dynamical System,LDS)是一类特殊的动态系统,其中系统的状态转移和观测过程都是线性的

文章目录

  • 引言
  • 一、线性动态系统
    • 1.1 LDS的基本组成
    • 1.2 LDS的数学表示
      • 1.2.1 状态方程
      • 1.2.2 观测方程
      • LDS的应用
    • 1.3 LDS与卡尔曼滤波
    • 1.4 LDS的扩展
    • 1.5 LDS的Python实现
  • 二、卡尔曼滤波器
    • 2.1 基本原理
    • 2.2 步骤
    • 2.3 应用
    • 2.4 总结
  • 三、卡尔曼滤波器具体的应用方式
    • 3.1 例子:追踪一个物体的位置
      • 步骤 1: 定义系统模型
      • 步骤 2: 初始化
      • 步骤 3: 预测(时间更新)
      • 步骤 4: 更新(测量更新)
      • 步骤 5: 循环
    • 3.2 具体应用方式
    • 3.3 总结

在这里插入图片描述

一、线性动态系统

线性动态系统(Linear Dynamical System,LDS)是一类特殊的动态系统,其中系统的状态转移和观测过程都是线性的。LDS在机器学习和统计模型中有着广泛的应用,特别是在时间序列分析、系统识别和控制理论中

1.1 LDS的基本组成

一个线性动态系统通常由以下部分组成:

  1. 状态方程:描述了系统状态随时间演化的过程
  2. 观测方程:描述了如何从系统状态生成观测值

1.2 LDS的数学表示

一个线性动态系统可以用以下方程来描述:

1.2.1 状态方程

x t + 1 = A x t + B u t + w t x_{t+1} = A x_t + B u_t + w_t xt+1=Axt+But+wt
其中:

  • x t x_t xt是在时间 t t t的系统状态
  • A A A是状态转移矩阵
  • B B B是控制矩阵
  • u t u_t ut是在时间 t t t的控制输入(可能是未知的或恒定为零)
  • w t w_t wt是过程噪声,通常假设为零均值高斯噪声

1.2.2 观测方程

y t = C x t + D u t + v t y_t = C x_t + D u_t + v_t yt=Cxt+Dut+vt
其中:

  • y t y_t yt是在时间 ( t ) 的观测值
  • C C C是观测矩阵
  • D D D是输入矩阵
  • v t v_t vt是观测噪声,通常假设为零均值高斯噪声

LDS的应用

线性动态系统在以下领域中有应用:

  1. 时间序列分析:预测和分析时间序列数据。
  2. 系统识别:根据观测数据估计系统参数。
  3. 状态估计:使用滤波算法(如卡尔曼滤波)来估计系统的隐藏状态。
  4. 控制理论:设计控制器来引导系统达到期望的状态或行为。

1.3 LDS与卡尔曼滤波

卡尔曼滤波是一种著名的算法,用于在存在噪声的情况下估计线性动态系统的状态。它是一种递归滤波器,能够在每一步迭代中更新状态估计,并最小化估计误差的协方差

1.4 LDS的扩展

  • 非线性动态系统(Nonlinear Dynamical Systems):当状态转移或观测方程是非线性的,可以使用扩展的卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)
  • 隐马尔可夫模型(HMM):可以看作是LDS的一种特殊形式,其中状态是隐藏的,且观测是离散的

1.5 LDS的Python实现

以下是一个简单的LDS实现,使用Python的numpy库:

import numpy as np
# 定义系统参数
A = np.array([[0.5, 0.1], [0, 0.5]])  # 状态转移矩阵
B = np.array([[1], [0]])            # 控制矩阵
C = np.array([[1, 0]])              # 观测矩阵
D = np.array([[0]])                 # 输入矩阵
# 初始状态
x = np.array([[0], [1]])
# 时间步数
T = 10
# 存储状态和观测
states = np.zeros((T+1, 2))
observations = np.zeros((T, 1))
# 模拟系统
for t in range(T):
    # 更新状态
    x = A @ x + B * np.random.randn()  # 假设没有控制输入
    states[t+1] = x.T
    
    # 生成观测
    y = C @ x + D * np.random.randn()  # 假设没有控制输入
    observations[t] = y.T
# 输出结果
print("States:\n", states)
print("Observations:\n", observations)

输出结果:
在这里插入图片描述

在这个例子中模拟了一个简单的线性动态系统,其中状态转移和观测都遵循线性方程。实际应用中的LDS可能会更加复杂,并需要考虑控制输入和更复杂的噪声模型

二、卡尔曼滤波器

卡尔曼滤波器是一种有效的递归滤波器,主要用于线性动态系统的状态估计。它在机器学习、信号处理和控制理论等领域有着广泛的应用

2.1 基本原理

卡尔曼滤波器基于以下假设:

  1. 系统是线性的
  2. 系统和观测噪声是高斯白噪声,即它们的平均值和方差是已知的,且各时刻噪声互不相关

卡尔曼滤波器主要包括两个阶段:预测(Prediction)和更新(Update)

2.2 步骤

  1. 初始化
    • 设置初始状态估计值 (\hat{x}_0|{0}) 和协方差矩阵 P 0 ∣ { 0 } P_0|\{0\} P0{0}
  2. 预测(时间更新)
    • 根据上一时刻的状态估计值和系统动态模型,预测当前时刻的状态:
      x ^ k ∣ k − 1 = F k x ^ k − 1 ∣ k − 1 + B k u k \hat{x}_{k|k-1} = F_k \hat{x}_{k-1|k-1} + B_k u_k x^kk1=Fkx^k1∣k1+Bkuk
    • 同时,预测当前时刻的协方差矩阵:
      P k ∣ k − 1 = F k P k − 1 ∣ k − 1 F k T + Q k P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q_k Pkk1=FkPk1∣k1FkT+Qk
      其中, F k F_k Fk是状态转移矩阵, B k B_k Bk是控制输入矩阵, u k u_k uk是控制向量, Q k Q_k Qk是过程噪声协方差矩阵
  3. 更新(测量更新)
    • 计算卡尔曼增益:
      K k = P k ∣ k − 1 H k T ( H k P k ∣ k − 1 H k T + R k ) − 1 K_k = P_{k|k-1} H_k^T (H_k P_{k|k-1} H_k^T + R_k)^{-1} Kk=Pkk1HkT(HkPkk1HkT+Rk)1
      其中, H k H_k Hk是观测矩阵, R k R_k Rk是观测噪声协方差矩阵。
    • 利用新的观测数据 (z_k) 更新状态估计:
      x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( z k − H k x ^ k ∣ k − 1 ) \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - H_k \hat{x}_{k|k-1}) x^kk=x^kk1+Kk(zkHkx^kk1)
    • 更新协方差矩阵:
      P k ∣ k = ( I − K k H k ) P k ∣ k − 1 P_{k|k} = (I - K_k H_k) P_{k|k-1} Pkk=(IKkHk)Pkk1
      其中, I I I是单位矩阵

2.3 应用

卡尔曼滤波器在以下领域有广泛应用:

  • 导航和定位系统(如GPS)
  • 机器人感知和控制系统
  • 金融时间序列分析
  • 信号处理(如无线通信)

2.4 总结

卡尔曼滤波器的优点是计算效率高,适用于实时系统。对于非线性系统,可以使用扩展卡尔曼滤波器(EKF)或无迹卡尔曼滤波器(UKF)等变体来处理

三、卡尔曼滤波器具体的应用方式

卡尔曼滤波器在具体应用中通常遵循以下步骤,下面以一个简单的例子来说明其应用方式。

3.1 例子:追踪一个物体的位置

假设我们想要追踪一个物体在二维平面上的位置,物体受到随机加速度的影响。

步骤 1: 定义系统模型

首先,我们需要定义系统的状态、动态模型和观测模型。

  • 状态向量 x x x: x = [ x , y , x ˙ , y ˙ ] T x = [x, y, \dot{x}, \dot{y}]^T x=[x,y,x˙,y˙]T,其中 x x x y y y是位置坐标, x ˙ \dot{x} x˙ y ˙ \dot{y} y˙ 是速度
  • 动态模型(状态转移方程):
    x k = F x k − 1 + B u k + w k x_k = F x_{k-1} + B u_k + w_k xk=Fxk1+Buk+wk
    其中:
    • F F F是状态转移矩阵
    • B B B是控制输入矩阵
    • u k u_k uk是控制向量(在这个例子中可能为零,如果没有外部控制)
    • w k w_k wk是过程噪声
  • 观测模型:
    z k = H x k + v k z_k = H x_k + v_k zk=Hxk+vk
    其中:
    • H H H 是观测矩阵
    • v k v_k vk是观测噪声

步骤 2: 初始化

  • 初始化状态估计 x ^ 0 ∣ 0 \hat{x}_0|0 x^0∣0和协方差矩阵 P 0 ∣ 0 P_0|0 P0∣0

步骤 3: 预测(时间更新)

  • 使用状态转移方程预测下一个状态:
    x ^ k ∣ k − 1 = F x ^ k − 1 ∣ k − 1 \hat{x}_{k|k-1} = F \hat{x}_{k-1|k-1} x^kk1=Fx^k1∣k1
  • 更新协方差矩阵:
    P k ∣ k − 1 = F P k − 1 ∣ k − 1 F T + Q P_{k|k-1} = F P_{k-1|k-1} F^T + Q Pkk1=FPk1∣k1FT+Q
    其中, Q Q Q是过程噪声协方差矩阵

步骤 4: 更新(测量更新)

  • 计算卡尔曼增益:
    K k = P k ∣ k − 1 H T ( H P k ∣ k − 1 H T + R ) − 1 K_k = P_{k|k-1} H^T (H P_{k|k-1} H^T + R)^{-1} Kk=Pkk1HT(HPkk1HT+R)1
    其中, R R R是观测噪声协方差矩阵
  • 使用新的观测数据 ( z_k ) 更新状态估计:
    x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( z k − H x ^ k ∣ k − 1 ) \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - H \hat{x}_{k|k-1}) x^kk=x^kk1+Kk(zkHx^kk1)
  • 更新协方差矩阵:
    P k ∣ k = ( I − K k H ) P k ∣ k − 1 P_{k|k} = (I - K_k H) P_{k|k-1} Pkk=(IKkH)Pkk1

步骤 5: 循环

  • k ∣ k k|k kk的估计和协方差作为 k + 1 k+1 k+1的初始估计和协方差,然后重复步骤 3 和步骤 4

3.2 具体应用方式

在具体应用中,以下步骤会被实现为计算机程序:

  1. 模型定义:根据实际应用定义状态向量、状态转移矩阵、观测矩阵、过程噪声和观测噪声
  2. 初始化:设定初始状态和协方差矩阵
  3. 循环执行
    • 预测:根据动态模型预测下一个状态
    • 更新:当有新的观测数据时,计算卡尔曼增益,并更新状态估计和协方差
  4. 输出:输出当前的最优状态估计

3.3 总结

卡尔曼滤波器的应用方式可以根据不同的应用场景进行调整,例如在自动驾驶车辆中,它可以用于融合来自不同传感器的数据来准确估计车辆的位置和速度。在金融领域,它可以用于时间序列数据的预测和分析。在机器人导航中,它可以用于定位和地图构建。每种应用都需要根据具体情况调整模型参数和滤波器设计

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

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

相关文章

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名:/$ $表示普通用户,#表示root用户 2、Linux不分盘,都是绝对路径 /表示根目录,表示计算机文件夹下 ~是当前用户的家,表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…

【C++】—— list 的了解与使用

【C】—— list 的了解与使用 1 list 的函数接口2 迭代器2.1 简单使用 list 的迭代器2.2 迭代器的划分2.3 不同迭代器的使用场景2.3.1 sort2.3.2 reverse2.3.3 find 3 emplace_back4 操作函数4.1 sort4.1.1 list中sort介绍4.1.2 list 中 sort 与算法库中 sort 效率比较 4.2 mer…

软件测试面试少走弯路

自我介绍开场白 只会手工和会写基础脚本分别如何介绍 自动化性能都会该如何介绍?记得面试前准备好如何回答怎么做到的? 项目如何进行介绍 回答验证码机制的处理问题 不会自动化和性能能找到工作吗? 萌芽计划对软件测试的大致了解 自动化测试…

操作系统 ---- 调度算法【先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRRN)】

目录 一、常见的调度算法 1. 先来先服务(FCFS, First-Come, First-Served) 2. 最短作业优先(SJF, Shortest Job First) 3. 优先级调度(Priority Scheduling algorithm,PSA) 4. 轮转调度&am…

嵌入式-QT学习-小练习

1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示&#xff1a; Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …

阿里云 EMR StarRocks 在七猫的应用和实践

七猫公司简介 七猫是一家深耕文化娱乐行业的互联网企业&#xff0c;总部坐落在上海市前滩中心。七猫旗下原创文学网站七猫中文网于2017年5月正式上线&#xff0c;专注为原创作者提供创作指导、版权运营等全方位一体化服务。七猫拳头产品七猫免费小说App于2018年8月正式上线&am…

力扣213-打家劫舍 II(Java详细题解)

题目链接&#xff1a;213. 打家劫舍 II - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 本体是打家劫舍的一个变形题&#xff0c;希望大家能先做198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09;&#xff0c;并看一下我上题的讲解力扣198-打家劫舍&…

TESSY创建需要手写桩的测试用例

如果需要让桩函数有额外的功能&#xff0c;如&#xff1a;传参检测、局部数据处理、多传参检测、函数实现变更等&#xff0c;可以进行手写桩。 我们以tessy5.1 IDE为例&#xff0c;给大家展示编写一个需要手写桩的测试用例过程。 1、前期的准备工作 可以参考以下文章&#xff1…

海运系统推荐:如何实现海运物流轨迹跟踪管理?

在海运业务中&#xff0c;物流信息的及时更新与透明化至关重要。然而&#xff0c;许多从事海运的企业和个人常常面临客户的连环追问&#xff0c;这些问题成为日常工作中的痛点&#xff1a;“我的货到哪了&#xff1f;”“怎么还没更新物流信息&#xff1f;”这样的情形让人感到…

错误: 编码GBK的不可映射字符的解决方法

之前我一直用的eclipse来编写java代码&#xff0c;从来没有出现过这个错误&#xff0c;但是转到VS中后我写个中文注释都没法写&#xff0c;写了就报错&#xff0c;于是开始探索原因 出现这种问题大概率你是在官网下载的JDK&#xff0c;默认是国际版的&#xff0c;他在编译时如果…

828华为云征文|基于华为云Flexus云服务器X实现个人博客搭建

文章目录 ❀前言❀部署前准备❀宝塔安装❀安全组开放❀web访问验证❀安装docker❀安装wordpress❀安全组开放18040端口❀访问博客网址❀发布个人博客❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 近期华为云推出了最新的华为云Flexus云服务器X&#xff0c;这款云主机在算…

TI DSP下载器XDS100 V2.0无法使用问题

前言 TI DSP下载器XDS100 V2.0用着用着会突然报Error&#xff0c;特别是你想要用Code Composer Studio烧录下载程序的时候 查看设备管理器&#xff0c;发现XDS100 V2.0的设备端口莫名其妙消失了 问了淘宝的厂家&#xff0c;他说TI的开发板信号可能会导致调试器通信信号中断&a…

ant.design【点击展示详细信息】

第一部分&#xff1a;const [Visit,setVisit]useState(false);const [data,setdata] useState({});第二部分&#xff1a; render: (text, record) > [ <a style{{marginRight:"2%"}} onClick{()>{ setVisit(true) setdata(record) }} > 详细 </a>…

【HarmonyOS】Beta最新对外版本IDE下载和环境配置

【HarmonyOS】Beta最新对外版本IDE下载和环境配置 前言 目前华为HarmonyOS的系统版本已经从Develop Beta升级为Beta预览版&#xff0c;全面开放。再也不需要白名单限制&#xff0c;才能下载使用最新的IDE和预览最新的开放文档了。 IDE下载和安装 Beta IDE下载地址 1.根据你…

linux-L9.linux中对文件 按照时间排序 显示100 个

find . -type f -exec stat --format %Y %n {} | sort -nr | head -n 100解释&#xff1a; • find . -type f&#xff1a;在当前目录下查找所有文件。 • -exec stat --format ‘%Y %n’ {} &#xff1a;对每个找到的文件执行stat命令&#xff0c;以获取文件的修改时间&#…

stm32 W25Q数据存储

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、cubemx配置二、keil中文件修改与配置三、几个重要函数的说明四、DMA方式传输&#xff08;待写&#xff09;总结 前言 W25Q128 容量为128位 128/8 16 也就…

为什么要进行MySQL增量备份?

进行MySQL增量备份的原因主要包括以下几点&#xff1a; 节省存储空间&#xff1a;增量备份只备份自上次全量或增量备份以来更改过的数据&#xff0c;而不备份所有数据。相比全量备份&#xff0c;增量备份生成的文件通常较小&#xff0c;可以显著减少存储空间的使用。减少备份时…

学习平台|基于java的移动学习平台系统小程序(源码+数据库+文档)

学习平台|学习平台系统|在线学习平台系统小程序 目录 基于java的移动学习平台系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码…

合宙Air201资产定位模组LuatOS入门课程:FOTA远程升级,点点鼠标就搞定

你是否也经常吐槽&#xff1a;开发是个苦差事&#xff01;做项目一时爽&#xff0c;遇到升级火葬场。 如果你也有这种困惑&#xff0c;可以多了解了解合宙的开发工具&#xff0c;简单实用又高效&#xff0c;甚至只需点点鼠标&#xff01; 本期&#xff0c;我们来学习合宙Air2…

Ubuntu 20.04 Linux无法访问GitHub问题

Ubuntu 20.04 Linux无法访问GitHub问题 使用ip查找在线工具&#xff1a;工具查询 http://github.com和http://github.global.ssl.fastly.net的ip地址 终端输入&#xff1a; sudo gedit /etc/hosts 打开hosts文件&#xff1b;将刚刚两个ip地址输入到hosts文件中。 wq关掉并保存…