资源简介
基于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
- 下一篇:小功率调幅发射机
相关资源
- hausdorff_distance
- 获取一张图片上的坐标点
- GPUCoder_MATLAB转CUDA
-
matlab simuli
nk 12脉波整流器 - SAR雷达成像点目标仿真——RD算法和
- MODIS、Landsat等遥感影像批量空间插值
- matlab实现六种判决准则
- 高斯混合概论假设密度滤波MATLAB代码
- 基于Matlab神经网络的图像识别
- MATLAB读取excel,循环读取每一行
- matlab遗传算法工具箱gatbx
- matlab2016a使用vs2017所需附件
- GPS网平差matlab程序
- MATLAB移动曲面拟合法
- 追赶法的简单MATLAB代码
-
三相SVPWM直接功率控制的simuli
nk仿真 - 基于matlab分别对彩色图像的RGB通道进
- 贝叶斯matlab
- 预测控制matlab工具箱
- matlab简单的串口通信程序
- MATLAB——E级随机路面谱文件
- 模式识别第四版matlab代码
- 802.11a链路仿真
- MATLAB fsolve求解非线性方程组源程序代
- penman计算潜在蒸散 matlab
- 基于matlab仿真的电池模型
- 用matlab实现的meanshift跟踪算法
- 机器学习_BP反向传播算法_MATLAB
- 16QAM数字通信系统——MATLAB代码
- 天线的波瓣图MATLAB仿真
评论
共有 条评论