扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)

扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab),第1张

姓名:王柯祎

学号:20021110373T

转自 :https://blog.csdn.net/gangdanerya/article/details/105105611

【嵌牛导读】介绍扩展卡尔曼滤波(EKF)算法的详细推导,局限性和MATLAB仿真。

【嵌牛鼻子】扩展卡尔曼滤波(EKF)

【嵌牛正文】

扩展卡尔曼滤波算法 是解决非线性状态估计问题最为直接的一种处理方法,尽管EKF不是最精确的”最优“滤波器,但在过去的几十年成功地应用到许多非线性系统中。所以在学习非线性滤波问题时应该先从EKF开始。

EKF算法是将非线性函数进行泰勒展开,然后省略高阶项,保留展开项的一阶项,以此来实现非线性函数线性化,最后通过卡尔曼滤波算法近似计算系统的状态估计值和方差估计值。

一、EKF算法详细推导

【注】EKF推导参考的是黄蔚的博士论文“CKF及鲁棒滤波在飞行器姿态估计中的应用研究”,论文中EKF,UKF和CKF等算法讲解的都很详细,值得一看。

我们把KF与EKF算法拿出来对比可以发现:

二、EKF算法局限性:

该算法线性化会引入阶段误差从而导致滤波精度下降,同时当初始状态误差较大或系统模型非线性程度较高时,滤波精度会受到严重影响甚至发散。

需要计算雅克比矩阵,复杂,计算量大,影响系统的实时性,还会导致EKF算法的数值稳定性差。

当系统存在模型失配,量测干扰,量测丢失,量测延迟或状态突变等复杂情况时,EKF算法鲁棒性差。

三、Matlab仿真:

clear allclc  close all

tf = 50 

Q = 10w=sqrt(Q)*randn(1,tf) 

R = 1v=sqrt(R)*randn(1,tf)

P =eye(1)

x=zeros(1,tf)

Xnew=zeros(1,tf)

x(1,1)=0.1 

Xnew(1,1)=x(1,1)

z=zeros(1,tf)

z(1)=x(1,1)^2/20+v(1)

zjian=zeros(1,tf)

zjian(1,1)=z(1)

for k = 2 : tf

%%%%%%%%%%%%%%%模拟系统%%%%%%%%%%%%%%%

    x(:,k) = 0.5 * x(:,k-1) + (2.5 * x(:,k-1) / (1 + x(:,k-1).^2)) + 8 * cos(1.2*(k-1)) + w(k-1) 

    z(k) = x(:,k).^2 / 20 + v(k)

%%%%%%%%%%%%%%%EKF开始%%%%%%%%%%%%%%%

    Xpre = 0.5*Xnew(:,k-1)+ 2.5*Xnew(:,k-1)/(1+Xnew(:,k-1).^2) + 8 * cos(1.2*(k-1))  

    zjian =Xpre.^2/20

    F = 0.5 + 2.5 * (1-Xnew.^2)/((1+Xnew.^2).^2)

    H = Xpre/10    

    PP=F*P*F'+Q 

    Kk=PP*H'*inv(H*PP*H'+R)

    Xnew(k)=Xpre+Kk*(z(k)-zjian)

    P=PP-Kk*H*PP

end

  t = 2 : tf  

 figure   plot(t,x(1,t),'b',t,Xnew(1,t),'r*')  legend('真实值','EKF估计值')

仿真结果:

1、概述

  如果进行电池SOC的建模,常常会用到Simulink中的Battery模块,本期基于Matlab中的help文件,会大家概述Battery模块的用法。Simulink中的Battery模块如下图所示:

在这里插入图片描述

  双击Battery模块会出现参数设置的界面:

在这里插入图片描述

  如果为Battery charge capacity参数选择Infinite,则模块将电池建模为串联电阻器和恒压源。如果您为Battery charge capacity参数选择Finite,则模块将电池建模为串联电阻器和与充电相关的电压源。在有限情况下,电压是电荷的函数,具有以下关系:

在这里插入图片描述

  式中,SOC(荷电状态)是当前充电与额定电池容量的比率。V0是电池在空载时充满电时的电压,由额定电压Vnom参数定义。β是一个常数。

2、电池衰退模型

  对于具有有限电池充电容量的电池型号,可以根据放电循环的次数对电池性能退化进行建模。这种劣化称为电池衰退。

在这里插入图片描述

  式中,λAH是电池标称容量的乘数。λR0是电池串联电阻的乘数。λV1是电压V1的乘数。N是完成的放电循环次数。N0是模拟开始前完成的完整放电循环次数。AH是以安培小时为单位的额定电池容量。i(t)是瞬时电池输出电流。H(i(t))是瞬时电池输出电流的Heaviside函数。 如果参数为负,则此函数返回0,如果参数为正,则返回1。

3、热效应建模

在这里插入图片描述

  式中,T是电池温度。T1是标称测量温度。λV是V0的参数温度相关系数。β的计算方法与 Battery Model 相同,

  内部串联电阻、自放电电阻和任何电荷动态电阻也是温度的函数:

在这里插入图片描述

  式中,λR是参数温度相关系数。

4、电池动力学模型

  可以使用Charge dynamics参数对电池充电动态进行建模:

在这里插入图片描述

  No dynamics——等效电路不包含并联RC部分。电池的端电压和内部充电电压之间没有延迟。

  One time-constant dynamics——等效电路包含一个并联RC部分。使用第一个时间常数参数指定时间常数。

  Two time-constant dynamics——等效电路包含两个并联的RC部分。使用第一个时间常数和第二个时间常数参数指定时间常数。

  Three time-constant dynamics——等效电路包含三个并联的RC部分。使用第一个时间常数、第二个时间常数和第三个时间常数参数指定时间常数。

  Four time-constant dynamics——等效电路包含四个并联的RC部分。使用第一个时间常数、第二个时间常数、第三个时间常数和第四个时间常数参数指定时间常数。

  Five time-constant dynamics——等效电路包含五个并联的RC部分。使用第一个时间常数、第二个时间常数、第三个时间常数、第四个时间常数和第五个时间常数参数指定时间常数。

  下图为Two time-constant dynamics模型图:

在这里插入图片描述

  RRC1和RRC2是并联的RC电阻。分别使用第一极化电阻(First polarization resistance)和第二极化电阻(Second polarization resistance)参数指定这些值。

  CRC1和CRC2是并联的RC电容。时间常数τ使用关系式C=τ/R将R和C值关联起来。分别使用第一个时间常数(First time constant)和第二个时间常数(Second time constant)参数为每个部分指定τ。

  R0是串联电阻。使用内阻(Internal resistance)参数指定该值。

5、绘制电压-电荷特性

  快速绘图功能可让您可视化电池模型参数值的电压-充电特性。要绘制特性图,请右键单击模型中的Battery模块,然后从上下文菜单中选择Electrical >Basic 特性。软件根据模块参数值自动计算一组偏置条件,并打开一个图形窗口,其中包含模块的空载电压与荷电状态(SOC)的关系图。

在这里插入图片描述

6、参数设置

  Nominal voltage, Vnom

  电池充满电时的空载电压。

  Internal resistance

  电池内阻

  Battery charge capacity

  选择用于建模电池充电容量的选项之一:

  Infinite——电池电压与从电池汲取的电量无关。

  Finite——电池电压随着电量的减少而降低。

  Ampere-hour rating

  以安培小时为单位的最大(标称)电池电量。

  Voltage V1 when charge is AH1

  充电电平为AH1时的电池基波输出电压,由Charge AH1 when empty电压为V1参数指定。

  该参数必须小于标称电压Vnom。

  Charge AH1 when no-load voltage is V1

  充电为AH1参数时Voltage V1指定的空载输出电压对应的电池充电电平。

7、仿真

  以12V的铅酸电池模型为例,搭建的电池充放电模型如下图所示:

在这里插入图片描述

  其中,SOC Calculation表示安时积分法。仿真结果如下图所示:

在这里插入图片描述

  由此可知,Battery模型能很好的反应SOC的变化关系。

打开CSDN,阅读体验更佳

bms动力电池管理系统仿真 Battery Simulink电池平衡控制策略模型_「已...

动力电池管理系统仿真 BMS + Battery Simulink 控制策略模型, 动力电池物理模型,需求说明文档。 BMS算法模型包含状态切换模型、SOC估计模型(提供算法说明文档)、电池平衡模型、功率限制模型等,动力电池物理模型包含两种结构的电池模型。 通过上...

Battery模块驱动_yanlaifan的博客

Battery模块驱动 Battery模块驱动 供电模块作为系统不可缺少部分,供电方式大概包括:1、电池供电2、专用适配器供电3、USB线供电4、USB充电适配线供电。THEME项目采用电池供电,以下将针对电池供电进行讲解。

Simulink电池仿真模型

Simulink电池仿真模型. mathlab应用于动力电池 SOC 仿真模型

热门推荐 simulink 模型之 battery

battery的示意图: 等效电路图 3.电池类型 共有四种类型。 铅酸电池、锂离子电池、镍铬电池与镍氢电池。 锂离子电池的充放电数学模型为: 放电(i∗>0i^{*}>0) f1(it,i∗,i)=E0−K∗QQ−it∗i∗−K∗QQ−it∗it+A∗exp(−B∗it)f_{1}(it,i^{*},i)=E_{0}-K*\frac{Q}{Q-it}*i^{*}-K*\frac{Q}{Q

继续访问

SimScape热模块学习笔记_sonicss的博客

Simulink提供了Battery模型(Electrical/Source/Battery(Table-Based)),可以选择最多5阶的RC网络。在学习其电池模型资料时,对于模型中的SimScape热相关模块没搞明白怎么用,度娘上也没有很好的文章可供学习,仔细阅读了Simulink的帮助文件,有了...

EV1_SIMULINK_battery_Batterymodel_电池_电动车_simulink中...

通过搭建simulink的模型,从而实现列车的曲线过弯的目的。 ssc_lead_acid_battery_simulink电池_sae_simulinkbattery_铅酸蓄电池_铅酸电池模 这个例子展示了一种高压电池,类似于混合动力汽车中使用的电池。该模型采用真实的直流链路电流分布,该...

基于Simulink锂电池仿真模型SOC估算

花了一星期研究SOC,用光了一支圆珠笔芯,几十页草稿纸,已完结。EKF?UKF?滑模?无所谓了,到电池模型搭建这一步。虽然不能共享全部结果,部分还是可以有的。 搭建电池仿真模型,其实就是严格按照公式搭框架,这很简单,难的是电池的Voc与Soc关系式拟合,及R0R1R2C1C2的参数辨识。 所以模型里面包含静置电压放电仿真图,SOC在100%——20%静置不同的放电曲线图,值得学习 如果你仔细看论文其实也是蛮简单的,毕竟10年前就开始的研究热点,这么多年的论文够你看,我也不想再手把手教你学simulink。

用于研究电池充放电特性的simulink模型

用于研究电池充放电特性的simulink模型,边上有解释说明

battery.zip_MATLAB 电池模型_battery_matlab 电池_电池 MATLAB_电池模型

电池模型的使用和测试并且利用测试得到电池的曲线

battery.rar_matlab 电池放电_充放电_放电_电池_电池放电

这是一个关于matlab的电池充放电的仿真的程序。希望对大家有帮助

【Simulink】设定模块参数值的各种方法

Simulink设定模块参数的各种方法

继续访问

基于MATLAB/Simulink的具有多级恒流控制的电池充放电仿真模型。

基于MATLAB/Simulink的具有多级恒流控制的电池充放电仿真模型,效果优于传统的恒压恒流控制方法。利用两个PI控制环路分别实现电池的充放电控制,多级恒流控制利用状态机(Statflow)实现,仿真模型附送一份说明文档便于理解和学习。

simulink 铅酸电池仿真

simulink 铅酸电池仿真 这个例子展示了如何建模铅酸电池使用Simscape™语言来实现等效电路元件的非线性方程组。 通过这种方式,而不是完全用仿真软件建模®,模型组件和定义物理方程之间的联系更加容易理解。

simulink建模之电池模型

https://blog.csdn.net/qq_33125039/article/details/89299584

继续访问

电池SOC仿真系列-基于Simscape搭建的锂电池模型

基于Simscape搭建的的锂电池模型 1 引言   为了保证电池储能系统安全、可靠运行,电池管理系统需对储能系统中锂电池的多种状态做出估计和预测,如荷电状态(State of Charge,SOC)、健康状态、内阻等,而实现这些功能的前提是建立精确、可靠的锂电池模型,同时,也是电池管理系统亟待解决的技术关键。动力锂电池的非线性特性使得许多方法难以得到准确的估计结果。因此,必须建立一个合适的数学模型来表征电池的特性。本期就给大家讲解一下如何通过Simscape建立精准的电池模型。   锂电池建模的方法有很多

继续访问

matlab最简单的代码-Battery_Test_Rig:电池测试台的设计文件和辅助脚本

matlab最简单的代码Battery_Test_Rig 电池测试台架的设计文件和辅助脚本。 analysis.py可用于从测试数据中得出一些电池模型组件,但目前尚无使用指南,否则将不完整。 但是,检查如何使用数学方法来导出某些模型组件以及如何在代码中实现其中的某些数学方法可能会很有用。 MATLAB Corpses是我作为该python版本的前身编写的旧版MATLAB代码的文件夹。 它的文献记载更加糟糕,未经修改就无法使用,但是显示了一些如果您选择对它进行解密就可以将MATLAB用于这些目的的一些信息。 可以建模为此处演示的电池参数 OCV:SOC和温度的函数 库仑效率:作为温度的函数 磁滞:瞬时和动态 静态串联电阻:R0项 动态串联电阻:R1,R2,C1,C2 ...项 生成模型的测试的一般性描述 OCV测试 将电池在指定温度和充满电的电压下浸泡2小时 以C / 30放电,直到在指定温度下达到Vmin 在温度下浸泡1小时,然后检查电池是否处于Vmin 如果未达到Vmin,则以C / 30充电或放电,直到达到Vmin 重复第2-4步,除了在C / 30充电时,直到达到Vmax 库仑效

最新发布 无迹卡尔曼滤波估计SOC的simulink模型详解

基于电池模型的参数辨识结果,使用无迹卡尔曼滤波(UKF)完成SOC的估计,使用MATLAB的simulink建立仿真模型,在SOC初始值不精确的情况下该算法依然能够快速收敛,相比于扩展卡尔曼滤波精度更高。

继续访问

电池模型simulink仿真

1在matlab2019b中,建立simulink模型 2设置 3仿真时长3600,结果 参考 http://bilibili.com/video/BV1tF411i7kE?spm_id_from=333.1007.top_right_bar_window_history.content.clickhttp://bilibili.com/video/BV1tF411i7kE?spm_id_from=333.1007.top_right_bar_window_his...

继续访问

BatterySoC_matlab_

使用EKF在线估算SOH(内部电阻)。内部电阻随时间增长,非线性卡尔曼滤波器估计其演化。

Battery_MSCCC:基于MATLAB/Simulink的具有多级(5级)恒流控制的电池充放电仿真模型

Battery_MSCCC:基于MATLAB/Simulink的具有多级(5级)恒流控制的电池充放电仿真模型,效果优于传统的恒压恒流控制方法,利用两个PI控制环路分别控制电池的充电和放电,多级恒流控制利用Statflow(状态机)实现 仿真模型附带一份说明文档,便于理解。 仿真条件:MATLAB/Simulink R2015b,购拿前如需转成低版本格式请提前告知,谢谢。 ID:6970661811135909 ...

继续访问

simulink建模电池模型

文章目录 simulink建模之电池模型 0.前言 1.原理解释 1.1模型的输入和输出的参数 1.2主要数学公式 2.主要步骤 2.1第一步:计算电池电量Q 2.2第二步:计算SOC值(注意公式) 2.3第三步:计算电池电压 2.4 第四步:外部参数的对应关系 3.总结 3.1 注意相关参数 3.1 自己封装的模块如下: 3.3某电池的相关参数如下 4.模型下载网址 ——————————————...

继续访问

simulink电池模块搭建

压缩包中是simulink里搭建的电池模块,适用于因课题要求而无法直接使用simulink自带模块的情况

simulink的battery模块

无人机搞飞控的一般主要有四个工种:硬件开发工程师(画板子的)、嵌入式开发工程师(搞架构的)、算法工程师(搞算法的)、软件工程师(填血肉敲代码的)。

我们来看看这四个工种要会啥,你就知道你要学啥了。

硬件开发工程师(工资1-4万)

1、熟悉PCB设计流程和规范,熟悉Altium Designer、Cadence Allegro等工具软件;

2、有扎实的数字、模拟电路基础,熟悉高速数字电路板设计;

3、熟悉ARM,DSP等嵌入式处理器,及其外围接口电路和驱动;熟悉底层PCI、USB、IIC、SPI等接口协议;熟练运用仿真工具、示波器等调测硬件;具有独立完成复杂电路设计和调试能力;

嵌入式开发工程师(工资1-4万)

1、本科及以上学历,通信、计算机、自动化、电子等相关专业;

2、熟悉uCOSII/III、FreeRTOS、Linux等至少一种嵌入式 *** 作系统下的软件开发;

3、熟悉ARM体系结构及其常用调试方法,有STM32/GD32系列开发经验;

4、精通C编程,熟悉通信协议及其代码实现,能够实现接口的驱动,如UART.I2C.SPI等;

算法工程师(工资1-4万)

1、硕士及以上学历,控制理论与控制工程专业,对飞行器、控制理论和算法有深刻理解和应用;

2、具备C或C++、Python等编程能力,能熟练使用Matlab控制工具包及Simulink等控制系统设计与仿真工具软件;

3、至少熟悉姿态融合、控制算法和导航算法中的一种;熟悉四元数,EKF,DCM等姿态算法,熟悉控制理论,有PID控制经验;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11320640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存