资源简介
基于EKF滤波的二阶RC电池模型的Soc估计仿真,附带实验数据(MATLAB仿真)

代码片段和文件信息
clear;clc;
Cn=2228*3.6;%电池容量,单位mAh
delta_t=1;%采样时间
ro=0.13/1.76;%电池内阻
rp1=0.0118;cp1=1.567;
rp2=0.0170;cp2=80.65;%RC环节的内阻和电容值,单位欧姆和法拟合数据1
% rp1=0.000206;cp1=89.958;
% rp2=0.0161;cp2=85.17;%RC环节的内阻和电容值,单位欧姆和法,拟合数据2
nita=2200/2228;%放电系数
i=zeros(13648);
for k=2:3648
i(k)=2.2;
end
i(1)=0;%放电电流矩阵
fn=@(x) 78.86*x^7-297*x^6+459.5*x^5-381.6*x^4+187.3*x^3-54.08*x^2+...
9.074*x+10.57;%拟合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=[-nita*delta_t/Cn;delta_t*rp1/(delta_t+rp1);delta_t*rp2/(delta_t+rp2)];%A,B矩阵
t=0:delta_t:3647;%仿真序列时间
N=length(t);
size=[3N];%数组大小
Q=4e-9*eye(3);%状态方程中的误差
R=1e-2; %观测方程中的误差
X=zeros(size);%状态变量
Soc=zeros(1N);%soc
Up1=zeros(1N);
Up2=zeros(1N);%RC回路的电压
E=zeros(1N);%电池电压
Uoc=zeros(1N);%电池端电压
X(:1)=[1;0;0];%状态变量初值
for k=2:N
X(:k)=A*X(:k-1)+B*i(k)+sqrtm(Q)*randn(31);
end
for k=1:N
Soc(k)=X(1k);
Up1(k)=X(2k);
Up2(k)=X(3k);
E(k)=fn(Soc(k));
Uoc(k)=E(k)-i(k)*ro-Up1(k)-Up2(k)+R*randn(1);
end%求取仿真所用的真值
Xekf=zeros(size);%EKF下的状态变量
P0=eye(3);%协方差矩阵初值
Xekf(:1)=[1;0;0];%EKF状态变量初值,可更改
for k=2:N
Xn=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;%更新协方差方程
end
Socekf=zeros(1N);%Ekf下的soc
Uocekf=zeros(1N);%Ekf下的端电压
Eekf=zeros(1N);%EKF下的电池电压
for k=1:N
Socekf(k)=Xekf(1k);
Eekf(k)=fn(Socekf(k));
Uocekf(k)=fn(Socekf(k))-i(k)*ro-Xekf(2k)-Xekf(3k);
end%计算三个值
%依次绘制先验数据,后验数据和实验数据做比较
%这里绘制的是soc-ocv曲线
figure;
plot(X(1:)Uoc‘b‘);
hold on;
plot(Xekf(1:)Uocekf‘g‘);
hold on;
load(‘2.2socv.mat‘)
plot(socsocv‘r‘);
grid on;
legend(‘先验数据‘‘后验数据‘‘实验数据‘);
xlabel(‘soc‘);ylabel(‘Uocv/V‘);
title(‘拓展卡尔曼滤波仿真soc-ocv曲线对比‘);
%依次绘制先验数据,后验数据和实验数据做比较
%这里绘制的是t-ocv曲线
figure;
plot(tUoc‘r‘);
hold on;
load(‘2.2vol.mat‘)
plot(timevol‘b‘);
hold on;
plot(tUocekf‘g‘);
grid on;
xlabel(‘t/s‘);ylabel(‘Uocv/V‘);
legend(‘先验数据‘‘实验数据‘‘后验数据‘);
title(‘拓展卡尔曼滤波仿真t-Uov曲线对比‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 16500 2018-12-27 11:28 2.2socv.mat
文件 5739 2018-12-26 23:13 2.2vol.mat
文件 2607 2018-12-27 15:20 EkfRcTwo.m
----------- --------- ---------- ----- ----
24846 3
- 上一篇:hausdorff_distance
- 下一篇:小功率调幅发射机
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论