集合卡尔曼滤波(EnKF)原理及样例应用

这篇具有很好参考价值的文章主要介绍了集合卡尔曼滤波(EnKF)原理及样例应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

EnKF 是一种基于蒙特卡罗方法预测误差统计信息的卡尔曼滤波。它与 PF 的相同点是都采用了采样粒子的集合来表示状态概率空间,但 EnKF 在更新步使用卡尔曼更新,该方法以集合的形式进行模拟预报和 分析更新这两个过程,通过模式状态的集合来表征 误差协方差的信息,以最小化观测值和模拟值的误 差协方差为约束条件,对目标进行最优估计。

了解其基本思路,为便于理解,我们对该过程拆分简化为以下几个流程:

  1. 初始化:初始化系统状态变量 集合卡尔曼滤波(EnKF)原理及样例应用 ,初始误差协方差矩阵 集合卡尔曼滤波(EnKF)原理及样例应用 和初始状态预测集合 {集合卡尔曼滤波(EnKF)原理及样例应用}

  1. 数据同化:时刻集合卡尔曼滤波(EnKF)原理及样例应用,我们分别进行观测步、分析步、预测步,具体流程如下:

a.观测步:

  1. 计算观测集合:

集合卡尔曼滤波(EnKF)原理及样例应用
  1. 计算观测误差协方差矩阵:

集合卡尔曼滤波(EnKF)原理及样例应用

b.分析步:

  1. 计算卡尔曼增益矩阵:

集合卡尔曼滤波(EnKF)原理及样例应用
  1. 计算分析集合:

集合卡尔曼滤波(EnKF)原理及样例应用
  1. 计算分析集合均值:

集合卡尔曼滤波(EnKF)原理及样例应用
  1. 计算分析误差协方差矩阵:

集合卡尔曼滤波(EnKF)原理及样例应用

c.预测步:

  1. 计算预测集合:

集合卡尔曼滤波(EnKF)原理及样例应用
  1. 计算预测集合均值:

集合卡尔曼滤波(EnKF)原理及样例应用
  1. 计算预测误差协方差矩阵:

集合卡尔曼滤波(EnKF)原理及样例应用
对EnKF算法原理了解之后,我们进入一个简单问题的实战(基于python):
考虑离散模型: 集合卡尔曼滤波(EnKF)原理及样例应用

显然,这是如下的一维谐振子的数值实现:

集合卡尔曼滤波(EnKF)原理及样例应用

这是一个离散的二阶方程,上式中x的系数与集合卡尔曼滤波(EnKF)原理及样例应用成比例。因此,状态向量有两个输入。

集合卡尔曼滤波(EnKF)原理及样例应用

预解矩阵是:

集合卡尔曼滤波(EnKF)原理及样例应用

对任意集合卡尔曼滤波(EnKF)原理及样例应用集合卡尔曼滤波(EnKF)原理及样例应用,观测算子为集合卡尔曼滤波(EnKF)原理及样例应用,观测方程为:

集合卡尔曼滤波(EnKF)原理及样例应用

在高斯白噪声方差为 g 的情况下。这个方差的值应该是已知的。观测结果可能不是在每个时间步骤上都能得到的。

接下来进入代码运行环节:

相关函数定义

# 导入相关库
import numpy as np
import pandas as pd
import seaborn as sn
import warnings
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi']     
plt.rcParams['axes.unicode_minus'] = False
from scipy.linalg import fractional_matrix_power
np.random.seed(None)
warnings.filterwarnings("ignore")
def EnKF(u0_f, P0_f, T, delta, H, X, lam, m): # EnKF函数定义
    X_f = [float(u0_f[1][0]), float(u0_f[0][0])]
    X_a = [float(u0_f[1][0])]
    Y = []
    u_f = np.matrix([[X_f[1]], [X_f[0]]])
    r = 100  # 生成集合的方差
    u1 = mean(float(u0_f[0][0]), r, m)
    u2 = mean(float(u0_f[1][0]), r, m)
    U_f = []
    for i in range(m):
        U_f.append(np.matrix([[u1[i]], [u2[i]]]))
    for i in range(1, T + 1):  # 迭代运算
        if i % delta == 0:  # 带有观测值时的情况
            # 计算增益
            r = mean(0, 1, m)
            y = X[i] + r
            r = np.matrix(r)
            u = np.matrix([[X[i]], [X[i - 1]]])
            R = float(r * r.T)  # 观测误差方差
            K = P0_f * H.T * (H * P0_f * H.T + R).I
            Y.append(X[i])
            U_a = []  # 初始化ua_i
            for j in range(m):
                U_a.append(U_f[j] + K * (y[j] - H * U_f[j]))
            u_a = sum(U_a) / m
            X_a.append(float(u_a[0][0]))
            # 预测步骤
            ind = i // delta
            M = matrix(w, lam, X_a[ind])
            for j in range(m):
                U_f[j] = M * U_a[j]
            u_f = sum(U_f) / m
            P0_f = 0
            for j in range(m):
                P0_f += (U_f[j] - u_f) * (U_f[j] - u_f).T
            P0_f = P0_f / (m - 1)

        else:  # 不带有观测值的情况,此时只预测
            M = matrix(w, lam, X_f[i])
            for j in range(m):
                U_f[j] = M * U_f[j]
            u_f = sum(U_f) / m
            P0_f = 0
            for j in range(m):
                P0_f += (U_f[j] - u_f) * (U_f[j] - u_f).T
            P0_f = P0_f / (m - 1)
        X_f.append(float(u_f[0][0]))
    return X_f, Y
def mean(j,r,m):  #定义固定均值的正态分布
    u = np.random.normal(j,r,m)
    s = sum(u)/m
    return u+(j-1*s)
def matrix(w,lam,x): #定义预解矩阵
    return np.matrix([[2+(w**2)-(lam**2) * (x**2),-1],[1,0]])

问题分析

# 初始化系统状态与误差协方差矩阵
u0_f = np.matrix([[1],[0]])
P0_f = np.array([[0.3, 0], [0, 0.3]])

# 预解矩阵
w = 0.035
lam = 0.0003
H = np.matrix([1,0]) # 观测算子
X = [0,1]

# 时间与时间间隔(步长)
T = 1000
delta = 25

for i in range(2,T+2):
    X.append((2+w**2)*X[i-1]-(lam**2)*X[i-1]**3-X[i-2])
    
m =50 # 定义集合的大小

X_f,Y = EnKF(u0_f,P0_f,T,delta,H,X,lam,m)

可视化展示

plt.plot(range(T+2), X, c='Lime', label="实际曲线")
plt.plot(range(T+2), X_f, c="g", linestyle='dashed',label="拟合曲线")
plt.scatter(list(range(delta,T+1,delta)), np.array(Y), c='r', label="观测值")
plt.legend()
plt.title("EnKF")
plt.show()
plt.savefig('EnKF.png')
集合卡尔曼滤波(EnKF)原理及样例应用

以上即为EnKF算法的原理分析及简单实战,学海无涯,让我们继续一同探索吧!文章来源地址https://www.toymoban.com/news/detail-454444.html

到了这里,关于集合卡尔曼滤波(EnKF)原理及样例应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 卡尔曼滤波(Kalman Filter)原理及Python实现

    项目地址 https://github.com/zhengjie9510/kalman-filter-example 详细理论可参考DR_CAN关于卡尔曼滤波器的视频讲解。https://www.bilibili.com/video/BV1dV411B7ME 卡尔曼滤波公式分为 预测 和 更新 两部分。 假定有一个匀速运动的人,状态变量x1和x2,Xx1表示人的位置,x2表示人的速度,观测变量z1和

    2024年02月08日
    浏览(38)
  • 卡尔曼滤波简介 —— 一维卡尔曼滤波

            在本章中,我们将在一个维度上推导出卡尔曼滤波。本章的主要目标是简单直观地解释卡尔曼滤波的概念,而不使用可能看起来复杂和令人困惑的数学工具。         我们将逐步推进卡尔曼滤波方程。         在本章中,我们推导出没有过程噪声的卡尔曼

    2024年02月09日
    浏览(32)
  • 【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文包括

    2024年02月08日
    浏览(31)
  • 卡尔曼滤波(KF)和扩展卡尔曼滤波(EKF)相应推导

    从上个世纪卡尔曼滤波理论被提出,卡尔曼滤波在控制论与信息论的连接上做出了卓越的贡献。为了得出准确的下一时刻状态真值,我们常常使用卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波、粒子滤波等等方法,这些方法在姿态解算、轨迹规划等方面有着很多用途。卡尔

    2024年02月03日
    浏览(50)
  • 基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪

    完整代码和数据下载链接:基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88738577 卡尔曼滤波原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,基于rbf的空调功率预测 代码 结果分析

    2024年02月02日
    浏览(35)
  • 卡尔曼滤波理论小释之卡尔曼增益

    卡尔曼增益是卡尔曼滤波理论中的一个核心概念。一般教材里面是这么给出它的公式的: 图1  卡尔曼增益 直觉上容易理解,所谓的增益是指每次融合数据后不确定性的变化程度。如果融合了新的数据后不确定性降低了,那么这个增益就是正面的,有助于提高预测的准确度。

    2024年02月05日
    浏览(71)
  • 卡尔曼滤波器-概述及用递归思想解读卡尔曼滤波器 | 卡尔曼滤波器应用举例(附Matlab程序)| 数学基础-数据融合、协方差矩阵、状态空间方程

      卡尔曼滤波器是最优化的(Optimal)、递归的(Recursive)、数字处理的(Data Processing)算法(Algorithm)。卡尔曼滤波器更像是观测器,而不是一般意义上的滤波器,应用广泛,尤其是在导航中,它的广泛应用是因为生活中存在大量的不确定性。   当描述一个系统的不确

    2024年02月06日
    浏览(31)
  • 卡尔曼滤波系列_实例(二)均加速运动的卡尔曼滤波

    此系列(一)对卡尔曼滤波的原理进行了简单的阐述,总结了卡尔曼滤波的两大过程:预测和更新。接下来举例对卡尔曼滤波的使用进行介绍,加深对卡尔曼滤波的理解。 1.场景介绍 如上图所示,可知小车的初始速度为0,初始位置也为0,小车向前的加速度为1,小车感知自身

    2024年02月15日
    浏览(24)
  • 卡尔曼滤波学习笔记

    从直观上来看,卡尔曼滤波是把两个存在误差的结果 融合 在一起,得到一个从数学上可以得到证明的 最优估计值 。 而这两个存在误差的结果,一个是从理论上推导出来的,称之为 先验估计值 ;一个是用传感器测量出来的,称之为 测量值 。它们之所以存在误差,是因为前

    2024年02月11日
    浏览(30)
  • 卡尔曼滤波介绍

        卡尔曼滤波无论是在单目标还是多目标领域都是很常用的一种算法,将卡尔曼滤波看作一种运动模型,用来对目标的位置进行预测,并且利用预测结果对跟踪的目标进行修正,属于自动控制理论中的一种方法。     在对视频中的目标进行跟踪时,当 目标运动速度较慢 时

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包