集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

news2025/2/22 4:31:06

在这里插入图片描述

集合卡尔曼滤波(Ensemble Kalman Filter)

文章目录

  • 引言
  • 理论基础
    • 卡尔曼滤波
    • 集合卡尔曼滤波
      • 初始化
      • 预测步骤
      • 更新步骤
      • 卡尔曼增益
      • 更新集合
  • MATLAB 实现
  • 运行结果
  • 3. 应用领域
  • 结论

引言

集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)是一种基于状态估计的非线性滤波方法,广泛应用于动态系统中的状态估计和数据同化问题。它通过使用一组样本(即“集合”)来近似状态的概率分布,有效地处理高维和非线性系统。

理论基础

卡尔曼滤波

卡尔曼滤波是一种递归算法,用于估计线性动态系统的状态。其基本模型可以描述为:

  • 状态方程:
    x k = A x k − 1 + B u k + w k x_k = Ax_{k-1} + Bu_k + w_k xk=Axk1+Buk+wk
    其中, x k x_k xk 是当前状态, A A A 是状态转移矩阵, B B B 是控制输入矩阵, u k u_k uk 是控制输入, w k w_k wk 是过程噪声,通常假设为高斯分布。

  • 测量方程:
    z k = H x k + v k z_k = Hx_k + v_k zk=Hxk+vk
    其中, z k z_k zk 是测量值, H H H 是测量矩阵, v k v_k vk 是测量噪声,通常也假设为高斯分布。

集合卡尔曼滤波

当系统是非线性时,传统卡尔曼滤波的假设可能不再成立,因此需要引入集合卡尔曼滤波。EnKF的基本思想是使用一组状态样本来表示状态分布。具体步骤如下:

初始化

生成初始状态的集合:
X 0 = { x 0 1 , x 0 2 , … , x 0 N } X_0 = \{x_0^1, x_0^2, \ldots, x_0^{N}\} X0={x01,x02,,x0N}
其中, N N N 是集合的大小。通常,样本是从初始状态的概率分布中采样。

预测步骤

根据状态方程更新每个样本:
x k i = A x k − 1 i + B u k + w k i ( i = 1 , 2 , … , N ) x_k^i = A x_{k-1}^i + B u_k + w_k^i \quad (i = 1, 2, \ldots, N) xki=Axk1i+Buk+wki(i=1,2,,N)
其中, w k i w_k^i wki 是从过程噪声分布中采样的噪声。

更新步骤

计算样本的均值和协方差:

  • 均值:
    x ˉ k = 1 N ∑ i = 1 N x k i \bar{x}_k = \frac{1}{N} \sum_{i=1}^{N} x_k^i xˉk=N1i=1Nxki

  • 协方差:
    P k = 1 N − 1 ∑ i = 1 N ( x k i − x ˉ k ) ( x k i − x ˉ k ) T P_k = \frac{1}{N-1} \sum_{i=1}^{N} (x_k^i - \bar{x}_k)(x_k^i - \bar{x}_k)^T Pk=N11i=1N(xkixˉk)(xkixˉk)T

根据测量方程计算创新和创新协方差:

  • 创新:
    y k = z k − H x ˉ k y_k = z_k - H \bar{x}_k yk=zkHxˉk

  • 创新协方差:
    S k = H P k H T + R S_k = H P_k H^T + R Sk=HPkHT+R
    其中, R R R 是测量噪声的协方差。

卡尔曼增益

计算卡尔曼增益:
K k = P k H T S k − 1 K_k = P_k H^T S_k^{-1} Kk=PkHTSk1

更新集合

最后,更新每个样本:
x k i = x k i + K k y k ( i = 1 , 2 , … , N ) x_k^i = x_k^i + K_k y_k \quad (i = 1, 2, \ldots, N) xki=xki+Kkyk(i=1,2,,N)

MATLAB 实现

以下是基于上述理论的 MATLAB 代码示例,用于实现集合卡尔曼滤波:

% 集合卡尔曼滤波示例
% 2024-11-12/Ver1
clear; clc; close all; % 清除工作空间,清空命令窗口,关闭所有图形窗口
rng(0); % 设置随机数生成器的种子,以确保结果可重复

% 参数设置
n = 4; % 状态维度(4个状态变量)
m = 2; % 测量维度(2个测量变量)
N = 100; % 时间步数(总共进行100个时间步的模拟)
num_ensemble = 10; % 集合成员数量(使用10个样本进行估计)
process_noise_cov = 1e-5 * eye(n); % 过程噪声协方差矩阵(小值,表示低噪声)
measurement_noise_cov = 1 * eye(m); % 测量噪声协方差矩阵(较大值,表示较高噪声)

% 初始化真实状态
true_state = zeros(n, N); % 创建一个n行N列的零矩阵,用于存储真实状态
true_state(:, 1) = [1; 0; 2; 1]; % 设置初始真实状态(X位移、X速度、Y位移、Y速度)

T = 1; %时间间隔
% 状态转移矩阵
A = [1 T 0 0;  % 状态转移矩阵,定义如何从一个状态转移到下一个状态
     0 1 0 0; 
     0 0 1 T; 
     0 0 0 1];

% 测量矩阵
H = [1 0 0 0; % 测量矩阵,定义如何从状态生成测量值
     0 0 1 0];

完整代码下载链接:https://download.csdn.net/download/callmeup/89986951

运行结果

轨迹图:
在这里插入图片描述
状态曲线:
在这里插入图片描述
误差曲线:
在这里插入图片描述

误差统计特性输出:
在这里插入图片描述

3. 应用领域

集合卡尔曼滤波在多个领域中得到了广泛应用,包括:

  • 气象学:在天气预报和气候模型中进行数据同化。
  • 环境科学:用于水文模型、污染扩散模型等。
  • 机器人:在定位和导航中进行状态估计。
  • 金融:用于时间序列数据的预测与分析。

结论

集合卡尔曼滤波是一种强大的工具,能够在复杂的非线性和高维状态空间中实现有效的状态估计。通过使用集合样本来近似状态分布,EnKF克服了传统卡尔曼滤波在处理非线性问题时的局限性,具有良好的计算效率和灵活性。随着数据同化和状态估计需求的增加,EnKF的应用前景将更加广泛。

如有需要,可私信或通过下方的卡片联系我

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

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

相关文章

写给Vue2使用者的Vue3学习笔记

&#x1f64b;‍请注意&#xff0c;由于本人项目中引入了unplugin-auto-import的依赖&#xff0c;所以所有的代码示例中均未手动引入各种依赖库&#xff08;ref、reactive、useRouter等等&#xff09; 初始环境搭建 npm init vuelatest模板语法 插值 同 Vue2 <span>…

golang调用webview,webview2,go-webview2

go version go1.20 windows/amd64 先要了解一些第三方库 1、webview/webview 它是一个跨平台的轻量级的webview库&#xff0c;面向的是C/C&#xff0c;使用它可以构建跨平台的GUI。webview就是浏览器内核&#xff0c;在不同操作系统上是不同的库&#xff0c;比如在windows上…

【初阶数据结构篇】双向链表的实现(赋源码)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据

#引用BeautifulSoup更方便提取html信息&#xff1b;requests模块&#xff0c;发生http请求&#xff1b;os模块&#xff0c;文件写入import requests from bs4 import BeautifulSoup import os#当使用requests库发送请求时&#xff0c;如果不设置User - Agent&#xff0c;默认的…

开源许可协议

何同学推动了开源协议的认识&#xff0c;功不可没&#xff0c;第一次对开源有了清晰的认识&#xff0c;最宽松的MIT开源协议 源自OSC开源社区&#xff1a;何同学使用开源软件“翻车”&#xff0c;都别吵了&#xff01;扯什么违反MIT

【达梦数据库】主备集群改造成读写分离

目录 背景步骤1、确认授权2、参数修改3、确认驱动版本和数据库版本匹配 背景 客户在双机主备集群手动切换的环境下&#xff0c;发现主库压力较大&#xff0c;需要改成读写分离的模式&#xff0c;将主库的压力分担到备库。 步骤 1、确认授权 select * from v$license;授权使…

docker安装zabbix +grafana

安装zabbix grafana 1、部署 mkdir -p /opt/zabbix/{data,backups}mkdir -p /opt/grafanasudo chown -R 472:472 /opt/grafanasudo chmod -R 755 /opt/grafanacat > docker-compose.yml <<-EOF version: 3.3services:mysql-server:image: mysql:8.1container_name: m…

RocketMQ学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客https://blog.csdn.net/weixin_4…

网络安全之接入控制

身份鉴别 ​ 定义:验证主题真实身份与其所声称的身份是否符合的过程&#xff0c;主体可以是用户、进程、主机。同时也可实现防重放&#xff0c;防假冒。 ​ 分类:单向鉴别、双向鉴别、三向鉴别。 ​ 主题身份标识信息:密钥、用户名和口令、证书和私钥 Internet接入控制过程 …

Spring 框架七大模块(Java EE 学习笔记03)

​ ​核心容器模块&#xff08;Core Container&#xff09; 核心容器模块在Spring的功能体系中起着支撑性作用&#xff0c;是其他模块的基石。核心容器层主要由Beans模块、Core模块、Contex模块和SpEL模块组成。 &#xff08;1&#xff09;Beans模块。它提供了BeanFactory类&…

IPv6基础知识

IPv6是由IEIF提出的互聯網協議第六版&#xff0c;用來替代IPv4的下一代協議&#xff0c;它的提出不僅解決了網絡地址資源匱乏問題&#xff0c;也解決了多種接入設備接入互聯網的障礙。IPv6的地址長度為128位&#xff0c;可支持340多萬億個地址。如下圖&#xff0c;3ffe:1900:fe…

旷世yolox自定义数据训练和验证和onnx导出推理

目录 1.前言 2.代码 3.环境 4.自定义数据形态 5.配置文件 6.训练 7.验证 8.评估混淆矩阵 9.导出onnx 10.onnx推理 -- 补充&#xff1a;docker环境 1.前言 旷世科技的yolox比较清爽&#xff0c;效果也不错&#xff0c;简单总结主要有三点创新比较高&#xff1a;deco…

Electron开发构建工具electron-vite(alex8088)添加VueDevTools(VitePlugin)

零、介绍 本文章的electron-vite指的是这个项目&#x1f449;electron-vite仓库&#xff0c;electron-vite网站 本文章的VueDevTools指的是VueDevTools的Vite插件版&#x1f449;https://devtools.vuejs.org/guide/vite-plugin 一、有一个用electron-vite创建的项目 略 二、…

软件测试—— Selenium 常用函数(一)

前一篇文章&#xff1a;软件测试 —— 自动化基础-CSDN博客 目录 前言 一、窗口 1.屏幕截图 2.切换窗口 3.窗口设置大小 4.关闭窗口 二、等待 1.等待意义 2.强制等待 3.隐式等待 4.显式等待 总结 前言 在前一篇文章中&#xff0c;我们介绍了自动化的一些基础知识&a…

UE5 腿部IK 解决方案 footplacement

UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么&#xff1f;二、具体实现 前言 在Unreal Engine 5 (UE5) 中&#xff0c;腿部IK&#xff08;Inverse Kinematics&#xff0c;逆向运动学&#xff09;是一个重要的动画技术&#xff0c;用于实现角色脚部准…

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?

在当今数字化、网络化的时代背景下&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为保障安全、提升效率的重要工具。然而&#xff0c;面对复杂多变的监控需求和跨区域、网络化的管理挑战&#xff0c;传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…

山东春季高考-C语言-综合应用题

&#xff08;2018年&#xff09;3.按要求编写以下C语言程序&#xff1a; &#xff08;1&#xff09;从键盘上输入三个整数a、b、c&#xff0c;判断能否以这三个数为边构成三角形&#xff0c;若可以则计算机三角形的面积且保留两位小数&#xff1b;若不可以则输出“不能构成三角…

Linux移植IMX6ULL记录 一:编译源码并支持能顺利进入linux

目录 前言 一、不修改文件进行编译 二、修改设备树文件进行编译 前言 我用的开发板是100_ask_imx6ull_pro&#xff0c;其自带的linux内核版本linux-4.9.88&#xff0c;然后从linux官网下载过来的linux-4.9.88版本的arch/arm/configs/defconfig和dts设备树文件并没有对imx6ull…

从Stream的 toList() 和 collect(Collectors.toList()) 方法看Java的不可变流

环境 JDK 21Windows 11 专业版IntelliJ IDEA 2024.1.6 背景 在使用Java的Stream的时候&#xff0c;常常会把流收集为List。 假设有List list1 如下&#xff1a; var list1 List.of("aaa", "bbbbbb", "cccc", "d", "eeeee&qu…

大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结

文章目录 1. 介绍2. LoRA的优势3. LoRA训练步骤&#xff1a;4.总结 1. 介绍 LoRA&#xff08;Low-Rank Adaptation&#xff09;是一种用于高效微调大模型的技术&#xff0c;它通过在已有模型的基础上引入低秩矩阵来减少训练模型时所需的参数量和计算量。具体来说&#xff0c;L…