首页 > 其他分享 >一维非线性系统的自适应扩展卡尔曼滤波|自适应扩展卡尔曼滤波(AEKF)与经典扩展卡尔曼滤波(EKF)对比|MATLAB源代码

一维非线性系统的自适应扩展卡尔曼滤波|自适应扩展卡尔曼滤波(AEKF)与经典扩展卡尔曼滤波(EKF)对比|MATLAB源代码

时间:2024-12-09 10:31:01浏览次数:9  
标签:状态 滤波 卡尔曼滤波 扩展 噪声 EKF 源代码 代码

在这里插入图片描述

本文给出了一个MATLAB代码,实现一维自适应扩展卡尔曼滤波(AEKF)和常规扩展卡尔曼滤波(EKF)的对比,用于处理带有噪声的动态系统状态估计。给出源代码下载方式

文章目录

运行结果

状态估计值绘制的曲线如下:
在这里插入图片描述

误差曲线如下:

在这里插入图片描述

误差的统计特性输出如下(命令行截图):
在这里插入图片描述

运行界面的截图如下,标注的部分为动态误差的设计方案:
在这里插入图片描述

代码详解

以下是对代码代码的详细介绍:

代码功能概述

  1. 初始化

    • 清空工作区、命令行和图形窗口,设置随机数种子以确保结果可重复。
    • 定义采样率和时间序列,生成系统噪声和观测噪声,并对噪声进行变动处理。
  2. 生成真实状态和观测数据

    • 在循环中,通过迭代生成真实状态值和未滤波的状态值,同时生成观测值,观测值受观测噪声影响。
  3. 常规EKF

    • 通过预测和更新步骤实现常规EKF。预测下一时刻的状态和观测,计算状态转移矩阵和观测矩阵,更新状态协方差和状态估计。
  4. 自适应EKF (AEKF)

    • 在AEKF中,采用一种自适应机制,根据残差动态调整过程噪声和观测噪声的协方差,以提高滤波性能。
  5. 结果展示

    • 绘制理论值、EKF滤波结果和AEKF滤波结果的对比图。
    • 计算并绘制滤波前后的状态估计误差,包括最大误差、平均误差和标准差。
    • 绘制累计概率密度函数(CDF)图,直观展示不同滤波方法的误差分布。

代码的应用

这段代码主要用于状态估计问题,适合于需要动态系统状态跟踪的应用,如无人驾驶、机器人导航和信号处理等领域。通过比较EKF与AEKF的效果,可以评估自适应滤波在处理动态噪声变化时的优势。

源代码

部分源代码如下:

% 自适应滤波,一维EKF
% 2024-12-08/Ver1

clc;clear;close all;
rng(0);
clear; %清空工作区变量
clc; %清空命令行内容
close all; %关闭所有窗口(主窗口除外)
rng(0); % 设置固定的随机数种子
%% initial
T = 1; %设置采样率
t = T:T:100; %构建时间序列,最后的10是序列总长度
Q0 = 1;w=sqrt(Q0)*randn(size(Q0,1),length(t)); %系统噪声
R0 = 1;v=sqrt(R0)*randn(size(R0,1),length(t)); %观测噪声
% 构造变化的噪声
v(20:50) = 5*v(20:50);
w(40:80) = 0.5*w(40:80);

P0 = 1; %状态协方差
P_num = zeros(length(t),size(P0,1),size(P0,2)); %存放每次迭代的P
P_num(1,:,:) = P0; %记录协方差
X=zeros(1,length(t)); %给状态真实值X分配空间
X_ekf=zeros(1,length(t)); %准备储存滤波后的值
X_aekf=zeros(1,length(t)); %准备储存滤波后的值
X(1) = 3; %给状态值初值赋值
X_(1) = X(1) + w(1); %X_是未滤波的状态,由真实值加上误差生成,这里生成其初值

完整代码下载链接见:
https://gf.bilibili.com/item/detail/1106790012

总结

该代码提供了一种有效的方式来实现和比较扩展卡尔曼滤波和自适应扩展卡尔曼滤波的性能,帮助理解不同滤波方法在动态系统中的应用及其效果。通过可视化和统计分析,用户可以直观地看到不同方法对状态估计精度的影响。

标签:状态,滤波,卡尔曼滤波,扩展,噪声,EKF,源代码,代码
From: https://blog.csdn.net/2401_86544394/article/details/144321341

相关文章

  • C# 扩展方法
    文章目录一、引言二、扩展方法的基本概念1.定义扩展方法的语法2.扩展方法的调用方式三、示例演示1.为内置类型添加扩展方法2.为自定义类型添加扩展方法四、扩展方法的注意事项1.扩展方法的优先级2.扩展方法的可见性3.避免过度使用五、总结一、引言  在......
  • .wstop扩展名勒索数据库恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:.wstop扩展名勒索数据库恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]操作系统文件被加密成.[[gmtaP2R5]].[[dataserver@airmail.cc]].wstop扩展名,类似运行的oracle数据库文......
  • Java源代码解析-续篇-语法(块,语句和模式)
    Java源代码解析-续篇-语法(块,语句和模式)目录Java源代码解析-续篇-语法(块,语句和模式)引言Blocks(块)Statements(语句)Patterns(模式)暂告一段落引言Blocks(代码块)、Statements(语句),Patterns(模式)构成了Java程序逻辑与结构的核心要素,无论是编写简单的打印语句,还是构建复杂的......
  • 欧几里得算法 & 扩展欧几里得算法
    一、欧几里得算法欧几里得算法,也叫辗转相除,简称gcd,用于计算两个整数的最大公约数引理:\(\gcd(a,b)=\gcd(b,a\%b)\)证明:设\(r=a%b\),\(c=gcd(a,b)\)则\(a=xc\),\(b=yc\),其中\(x,y\)互质\(r=a\%b=a-pb=xc-pyc=(x-py)c\)......
  • 深入剖析 BitBake 源代码:架构、模块与 Yocto 项目的协同关系
    引言BitBake是Yocto项目的核心任务调度引擎,它通过对元数据的解析和任务依赖图的生成,为嵌入式Linux系统的构建提供了高效的支持。作为Yocto项目的执行核心,BitBake的代码设计逻辑清晰、功能模块划分明确。本文将结合实际代码,从BitBake的架构入手,分析其模块的功能与......
  • 【前端知识】简单,可扩展的状态管理组件MobX
    文章目录概念MobX区分了应用程序中的以下三个概念:1.定义State并使其可观察2.使用Action更新State3.创建Derivations以便自动对State变化进行响应Derivations包括许多方式:Mobx区分了两种Derivation:3.1.通过computed对派生值进行建模3.2.使用reacti......
  • [深入探索FireStore Datastore模式:自动扩展与高性能的结合体]
    #引言在现代应用开发中,数据存储是不可或缺的一环。GoogleFirestore以其强大的扩展性与性能,为开发者提供了一种高效的数据存储解决方案。在这篇文章中,我们将深入探讨Firestore的Datastore模式,并学习如何使用它来保存、加载和删除Langchain文档。同时,我们还将探讨一些常见......
  • js源代码压缩都有哪些方法?它们的压缩原理分别是什么?
    JS源代码压缩主要有以下几种方法,以及它们的压缩原理:1.移除不必要的字符:原理:删除代码中对执行没有影响的字符,例如空格、换行符、注释、以及代码块间的多余空行。方法:正则表达式替换、语法分析树遍历。效果:减小文件大小,提高加载速度。示例:将vara=1;//声明......
  • Task05&扩展01
    Task05条件IF语句控制程序中决策的部分一个例子deff(x):print("A",end="")ifx==0:print("B",end="")print("C",end="")print("D")如果输入f(0)打印出ABCD,否则打印出ADTips:不建议直接在冒号后面写条......
  • 基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
    前言在软件开发过程中,尤其是在处理跨平台或来自不同来源的项目时,文件的编码格式往往会成为一个不可忽视的问题。不同的操作系统、编程语言和编辑器可能对文件编码有不同的支持和默认设置,这可能导致在打开一个文件时出现乱码、编译错误或运行时问题。今天大姚给大家分享一款基于C......