当前位置: 首页 > news >正文

【卡尔曼滤波第六期】集合变换卡尔曼滤波 ETKF

目录

  • 集合变换卡尔曼滤波概述
    • 一、原理概述
  • 二、数学原理
    • 三、ETKF 实现步骤总结
  • MATLAB实现案例
  • 参考

集合变换卡尔曼滤波(Ensemble Transform Kalman Filter, ETKF)是一种基于集合的贝叶斯滤波方法,是集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)的一个变种。它主要用于处理高维、非线性系统中的状态估计问题,在大气科学、海洋模拟、机器人导航等领域有广泛应用。

集合变换卡尔曼滤波概述

一、原理概述

ETKF 与传统 EnKF 的主要不同在于 更新集合成员的方式

  • EnKF:通过对观测值引入扰动,采用蒙特卡洛方法近似后验协方差矩阵。
  • ETKF:通过一个 确定性线性变换来更新集合 ,不需要扰动观测值,从而避免了观测噪声引起的额外误差。

ETKF 采用 集合变换(Ensemble Transform) 的方式,将预测集合通过一个线性变换矩阵映射为分析集合。

二、数学原理

假设系统状态为 x∈R^n ,有如下步骤:

1. 初始集合
在这里插入图片描述
2. 计算观测空间中的扰动
在这里插入图片描述
3. 计算分析扰动的变换矩阵
在这里插入图片描述
4. 分析均值更新
在这里插入图片描述

5. 构造分析集合

最终分析集合为:
在这里插入图片描述

三、ETKF 实现步骤总结

1、初始化:生成状态初始集合。

2、预测步:

  • 对每个集合成员进行状态传播。
  • 计算预测均值和扰动。

3、观测空间变换:

  • 计算预测观测集合。
  • 计算观测扰动矩阵。

4、分析步:

  • 构造变换矩阵 𝑇。
  • 更新扰动和均值。
  • 构造分析集合。

5、迭代:用分析集合作为下一时刻的预测集合。

MATLAB实现案例

状态演变图形如下:
在这里插入图片描述
完整MATLAB代码如下:

% ETKF Demo in MATLAB
close all;
clear; 
clc;pathFigure = ".\Figures\";%% Setting
% ---------------------------------------------% Parameters
N = 50;                 % Ensemble size
n_steps = 1000;    % Time steps
Q = 0.1;                   % Process noise
R = 0.2;                    % Observation noise% True state
x_true = zeros(1, n_steps);
x_true(1) = 10;% Observations
y = zeros(1, n_steps);% Initial ensemble
Xf = 10 + sqrt(Q) * randn(1, N);% Storage
xa_mean = zeros(1, n_steps);for k = 1:n_steps% True state propagationif k > 1x_true(k) = x_true(k-1) + sqrt(Q) * randn;end% Observationy(k) = x_true(k) + sqrt(R) * randn;% Forecast step: propagate ensembleXf = Xf + sqrt(Q) * randn(1, N);% Forecast mean and perturbationsxf_mean = mean(Xf);Xf_pert = Xf - xf_mean;% Observation of ensembleYf = Xf;  % Identity observation operator H=1yf_mean = mean(Yf);Yf_pert = Yf - yf_mean;% Compute transformation matrix TS = (Yf_pert' / sqrt(R)) * (Yf_pert / sqrt(R)) / (N - 1);[U, S, V] = svd(Yf_pert / sqrt(R), 'econ');Lambda = diag(S).^2;T = U * diag(1 ./ sqrt(1 + Lambda)) * U';% Analysis perturbationsXa_pert = Xf_pert * T;% Analysis mean (corrected)dy = y(k) - yf_mean;w = T * T' * (Yf_pert' / R) * dy';xa_mean(k) = xf_mean + Xf_pert * w;% Analysis ensembleXf = xa_mean(k) + Xa_pert;
end% Plot
figure;
grid on;
plot(1:n_steps, x_true, 'k-', 'LineWidth', 2); hold on;
plot(1:n_steps, xa_mean, 'b--', 'LineWidth', 2);
set(gca, 'FontSize', 12, 'FontName', 'Times New Roman');hl = legend('True State', 'ETKF Estimate');
set(hl, 'NumColumns', 2, 'box', 'off', 'FontName', 'Times New Roman', 'FontSize', 15,'Location','north');
xlabel('Time step','FontSize',14,'FontName','Times New Roman');
ylabel('State','FontSize',14,'FontName','Times New Roman');
title('ETKF State Estimation','FontSize',16,'FontName','Times New Roman');
set(gca,'Layer','top');

需要说明的是,版案例是一维系统。

🔥 核心问题:ETKF 在一维系统中退化严重!

ETKF 是为了高维系统设计的滤波器方法,核心思想是在线性子空间中构造正交变换来更新协方差结构,而在 一维系统中,所有扰动结构都是退化的,如下问题就会发生:

  • 扰动矩阵 Yf_pert 为 1×N 向量,乘出来的矩阵 S 是 N×N,但其秩最多为 1。
  • eye(N) + S 的特征值几乎全为 1,只有一个特征值偏离 1,导致特征分解不稳定。
  • T 构造失稳,进一步造成 w = T*T’ * … 爆炸。
    所以
  • 估计量在第一步就爆炸。

参考


文章转载自:
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://www.dtcms.com/a/281750.html

相关文章:

  • 【Linux庖丁解牛】— 保存信号!
  • HTML网页结构(基础)
  • 【linux V0.11】init/main.c
  • 函数指针与指针函数练习讲解
  • 9、线程理论1
  • HostVDS 云服务器测评:平价入门、流媒体解锁全美、表现稳定
  • 暑假Python基础整理 --异常处理及程序调试
  • Redis 中的持久化机制:RDB 与 AOF
  • Java之Stream其二
  • 第二章 OB 存储引擎高级技术
  • 数学金融与金融工程:学科差异与选择指南
  • 【AI News | 20250714】每日AI进展
  • 为 Git branch 命令添加描述功能
  • 将 Vue 3 + Vite + TS 项目打包为 .exe 文件
  • 711SJBH构建制造业信息化人才培训体系的对策-开题报告
  • 21-C#的委托简单使用-1
  • Datawhale 25年7月组队学习coze-ai-assistant Task1学习笔记:动手实践第一个AI Agent—英伦生活口语陪练精灵
  • yolov5、yolov8、yolov11、yolov12如何训练及轻量化部署-netron-onnx
  • echarts折线图的 线条的样式怎么控制
  • Python os模块完全指南:从入门到实战
  • python编程实现GUI界面的排序与查找算法动态模拟演示程序
  • Sa-Token使用要点
  • mongoDB安装初始化及简单介绍
  • 2025/7/15——java学习总结
  • Pandas 和 NumPy 使用文档整理
  • 大宗现货电子盘交易系统核心功能代码解析
  • QT6 源,六章事件系统(8)QEvent 的孙子类:QEnterEvent 光标进入
  • 无穿戴动捕如何凭借摄像头视觉识别算法,赋能高校专业教学革新?
  • python进阶
  • 145-变分模态分解VMD与平稳小波变换SWT信号降噪算法实现!