1.卡尔曼滤波原理

原理可以参考我之前学习的笔记,使用goodnote完成的。

我认为,对于公式的推导不需要做太多深入的了解,我之前也对公式进行推导的理解,但是没过几天就忘了,只需要掌握住那重要的5个步骤即可,能够熟练运用才是王道。

2.扩展卡尔曼滤波的MATLAB代码实现

下面介绍一下如何通过MATLAB,使用扩展卡尔曼滤波完成SOC的估计,我会将代码里面需要修改的地方进行讲解,当你辨识完参数要进行SOC估计时,只需要修改我所说的就能够实现。

2.1 电池参数的修改

Cn=18*3600;%电池容量,单位As
delta_t=1;%采样时间
R1=-9.015*socc.^6+20.64*socc.^5-15*socc.^4+2.196*socc.^3+1.747*socc.^2-0.7141*socc+0.09635;
R2=38.17*socc.^6-106.5*socc.^5+115.7*socc.^4-61.8*socc.^3+16.93*socc.^2-2.263*socc+0.1285;
C1=-6.037e+06*socc.^6+1.697e+07*socc.^5-1.81e+07*socc.^4+9.097e+06*socc.^3-2.189e+06*socc.^2+2.367e+05*socc-7963;
C2=1.82e+08*socc.^6-4.243e+08*socc.^5+3.83e+08*socc.^4-1.75e+08*socc.^3+4.456e+07*socc.^2-5.862e+06*socc+3.205e+05;
ro=0.05;%电池内阻

Cn就是电池容量,你自己的电池容量是多少就写多少,18代表时间Ah,注意单位是Ah。

采样时间可以不用改,;

R1:就写拟合得到的R1与SOC的多项式,也可以是常数;

R2:就写拟合得到的R2与SOC的多项式,也可以是常数;

C1:就写拟合得到的C1与SOC的多项式,也可以是常数;

C2:就写拟合得到的C2与SOC的多项式,也可以是常数;

R0:就写拟合得到的R0与SOC的多项式,也可以是常数;

2.2 电流数据以及SOC-OCV曲线

i=I1;
i(1)=0;%放电电流矩阵
fn=@(x) -189.5*x^6+696.7*x^5-1007*x^4+727.8*x^3-275.4*x^2+51.63*x+9.562;%拟合soc-ocv表达式
syms t1;
g=fn(t1);
g=matlabFunction(diff(g));%fn对soc的偏导A=[1 0 0;0 rp1*cp1/(delta_t+rp1*cp1) 0;0 0 rp2*cp2/(delta_t+rp2*cp2)];
B=[-delta_t/Cn;delta_t*rp1/(delta_t+rp1*cp1);delta_t*rp2/(delta_t+rp2*cp2)];%A,B矩阵
t=0:delta_t:14000;%仿真序列时间

电流要导入自己的电流数据;

要注意仿真序列时间不要超过电流数据的长度;

3.扩展卡尔曼算法迭代

Xekf=zeros(size);%EKF下的状态变量
P0=eye(3);%协方差矩阵初值
Xekf(:,1)=[1;0;0];%EKF状态变量初值,可更改for k=2:NXn=A*Xekf(:,k-1)+B*i(k);%计算先验估计P1=A*P0*A'+Q;%更新协方差矩阵dd=Xn(1)-Soc(k);%计算先验估计值与真值的差Zm=g(Soc(k))*dd+fn(Soc(k))-Xn(2)-Xn(3)-i(k)*ro;%计算观测值H=[g(Xn(1)) 0 0];%雅克比矩阵计算K=P1*H'*inv(H*P1*H'+R);%计算卡尔曼增益Xekf(:,k)=Xn+K*(Uoc(k)-Zm);%更新状态P0=(eye(3)-K*H)*P1;%更新协方差方程
endSocekf=zeros(1,N);%Ekf下的soc
Uocekf=zeros(1,N);%Ekf下的端电压
Eekf=zeros(1,N);%EKF下的电池电压for k=1:NSocekf(k)=Xekf(1,k);Eekf(k)=fn(Socekf(k));Uocekf(k)=fn(Socekf(k))-i(k)*ro-Xekf(2,k)-Xekf(3,k);
end%计算三个值

完整代码点赞评论关注后吗,私信我获取。

3.结果验证

3.1 端电压对比

真实端电压与估计出的端电压的对比图如下:红色的线是扩展卡尔曼滤波估算的端电压误差。

3.2 SOC对比

真实SOC与估计出的SOC的对比图以及误差图如下:红色的线是扩展卡尔曼滤波估算的SOC。最大误差小于0.7%,具有较高精度。

这期就写到这里,下一期讲一下如何使用无迹卡尔曼滤波估计SOC以及如何在simulink中实现。拜拜。

还没完,刚入门电池管理SOC估计这块的福利来啦,下面是我硕博期间编写以及搜集到的有关SOC估计的程序、模型、电池测试数据共110多个文件,需要学习的小伙伴们找我拿呀!!!!

基于扩展卡尔曼滤波的SOC估计(附MATLAB代码)相关推荐

  1. 【滤波估计】基于双卡尔曼滤波实现soc和soh联合估计附matlab代码

    1 内容介绍 对电动汽车电池管理系统进行电池状态估计非常重要准确充电,实现电池模型参数的在线更新.在本文中,开路电压的估计转换为开路电压拟合的估计参数,快速时变参数开路电压被转换成几个慢时变参数.提出 ...

  2. RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)

    目录 RBFNN训练结果 UKF估计SOC 文章的结尾红色部分有彩蛋 RBFNN训练结果 这篇文章主要介绍如何使用RBF神经网络训练出的参数并结合UKF算法完成锂离子电池SOC的估计,有关RBF参数训 ...

  3. 【数学建模】基于SIR模型实现新冠病毒COVID-19估计附matlab代码

    1 内容介绍 COVID-19是由严重急性呼吸综合症冠状病毒2型引发的传染病,它最初病毒携带者是一些动物,传染源主要是COVID-19患者,无症状患者.传播方式主要是呼吸道飞沫近距离传播,接触传播,还 ...

  4. 【数字识别】基于Hopfield神经网络识别0-9数字附Matlab代码

    1 内容介绍 自1943年 McCulloch和 Pitts首次提出了人工神经元模型以来,新的神经元模型及其组成的神经网络不断被提出,已成为目前非线性科学和计算智能研究的一个主要研究方向.其中,神经网 ...

  5. 【图像增强】基于Frangi滤波器实现血管图像增强附matlab代码

    1 简介 分析视网膜血管结构的变化是诊断和检测糖尿病,高血压等血管类相关疾病的最重要步骤.针对眼底视网膜图像对比度低,受病变区域边界干扰,很难正确提取血管细节的问题提出了一种基于Frangi滤波器的视 ...

  6. 【图像识别】基于卷积神经网络实现手写汉字识别附matlab代码

    1 内容介绍 1.1. 数据集的获取 数据集的获取来自模式识别国家重点实验室共享,这个不解释直接上网址http://www.nlpr.ia.ac.cn/databases/download/featu ...

  7. 【图像加密】基于混沌系统进行灰度图像加密附Matlab代码

    1 简介 ​ 1 基于混沌系统的图像加密解密 Logistic混沌置乱,先不说有多复杂,其实很简单. Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下: **X(k+1) = u ...

  8. 【车位检测】基于计算机视觉实现停车场空位识别附matlab代码

    1 简介 为便于汽车驾驶员在室外停车场中寻找可用空车位,基于以数据采集,图像处理和目标检测等过程的计算机视觉,开发了室外停车场车位检测实验.​ 2 部分代码 clc; close all; clear ...

  9. 【元胞自动机】基于元胞自动机模拟晶体生长附matlab代码

    1 内容介绍 基于溶质扩散和界面能的作用,考虑成分过冷,曲率过冷,界面能各 向异性和界面扰动等因素,建立了单个等轴枝晶的生长模型.采用元胞自动机(cellular automata)方法模拟了枝晶生长 ...

最新文章

  1. sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵
  2. C语言中结构体参数变量的传递
  3. 如何高效获取无线充电电能-无线节能组
  4. 计算机基础知识与基本操作txt,计算机基础知识复习-20210707023705.pdf-原创力文档...
  5. Linux 分析工具--性能
  6. kylinH5框架之项目组件理解
  7. java bitset_Java BitSet toString()方法与示例
  8. oracle sql group_con,SQL:Group Functions,GROUP BY,HAVING
  9. 美食网页设计作品html,美食网页设计与制作.doc
  10. 『水晶报表』实现打印
  11. 施耐德变频器与昆仑通态触摸屏Modbus通讯程序实现正转反转,启停复位,频率设定等功能
  12. 新手怎么通过网络推广引流
  13. 立创eda学习笔记二十九:原理图转PCB
  14. vue.jsv-if 的key值问题
  15. 【Python】类型转换:float()函数
  16. IoT黑板报0112:谷歌关闭Titan无人机上网项目
  17. [javascript]替换所有带/的字符串
  18. 赛宝-亿能软件测试技术沙龙第1期 – 性能测试工程师职业规划与成长之路
  19. 视频怎么压缩小于100兆?压缩视频这么做就可以了
  20. DEBUG系列一:Dumpdebug_SAP刘梦_新浪博客

热门文章

  1. PyTorch实现简单的残差网络
  2. 免费的SVG在线编辑器大推荐
  3. python命令行运行脚本出现 No Module Named 错误
  4. m基于强化学习的PID控制器simulink仿真,对比PI控制器和变结构PI控制器
  5. 验证性实验:计算机网络常用命令
  6. Juce源码分析(一)Juce的优势
  7. 华为云开发者日震撼来袭!11月20日,上海见
  8. Nginx 502错误原因和解决方法总结
  9. 基于树莓派CM4的三千兆+USB3.0扩展板硬件介绍
  10. 【视频教程】帝国CMS制作网站系列教程13—全站全文搜索及模板