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

1 内容介绍

对电动汽车电池管理系统进行电池状态估计非常重要准确充电,实现电池模型参数的在线更新。在本文中,开路电压的估计转换为开路电压拟合的估计参数,快速时变参数开路电压被转换成几个慢时变参数。提出了一种基于双卡尔曼滤波器的多尺度参数自适应方法。电池荷电状态和包括开路在内的所有参数的多尺度估计电压可以达到。以及对偶扩展卡尔曼滤波器的参数调整方法给出了估计多个参数。实验结果表明,通过增加开路电压的估计,算法的准确性得到了提高。所提出的方法可以减少初始状态误差对算法的影响,提高算法的鲁棒性。

2 部分代码

%% 本程序使用DEKF估计锂电池SOC和SOH

clear;clc;

close all

%% 模型参数

R1=0.0019;

R2=0.0035;

C1=23340;

C2=501270;

load('discharge.mat');%放电数据

load('OCV_SOC.mat');%OCV-SOC关系

Ts=0.1;%采样间隔

%% 矩阵

A=[1-1*Ts/R1/C1 0 0;0 1-1*Ts/R2/C2 0;0 0 1];%系统矩阵

C=[-1 -1 0];

D=0;

%% 初始值

Q=0.00000001*eye(3);%系统误差协方差

R=1;%测量误差协方差

Xekf=[0;0;0.8];%[U1,U2,SOC]初始值

Pa_ekf=[0.0037;30.23*3600]; %初始值 [R0 最大可用容量]

P0=0.01*[0.1 0 0;0 0.1 0;0 0 1];%状态误差协方差初始值

%% 赋值

tm=discharge(1,:)';%时间

Cur=-discharge(2,:)';%电流

Vot=discharge(3,:)';%测量得到的端电压

RSOC=discharge(4,:)';%SOC真实值-安时法计算得到

T=length(tm)-1;%时间

%% emf-soc关系

x=OCV_SOC(2,:);%SOC

y=OCV_SOC(1,:);%OCV

p=polyfit(x,y,8);%多项式参数值

%% 初始化

L_discharge=length(discharge);

Uoc=zeros(1,L_discharge);%OCV

H=zeros(L_discharge,3);  %dUt/dx

Vekf=zeros(1,L_discharge);%估计得到的端电压值

K=zeros(3,L_discharge);%卡尔曼增益

C_1=zeros(L_discharge,2);

C_2=zeros(L_discharge,2);

d_g_PA=zeros(L_discharge,2); %dUt/d参数(内阻,容量)

K_pa=zeros(2,8137); %卡尔曼增益,参数估计中

Pa=zeros(1,L_discharge); %容量估计值

Pa(1)=Pa_ekf(2);

SOH=zeros(1,L_discharge); %SOH

SOH(1)=1; %SOH初始值

Uoc(1)=p(1)*Xekf(3)^8+p(2)*Xekf(3)^7+p(3)*Xekf(3)^6+p(4)*Xekf(3)^5+p(5)*Xekf(3)^4+p(6)*Xekf(3)^3+p(7)*Xekf(3)^2+p(8)*Xekf(3)+p(9);%OCV

Vekf(1)=Uoc(1)+C*Xekf-Cur(1)*Pa_ekf(1);%估计得到的端电压值

counter=0;  %计数

j=1;

legend('真实值','估计值-DEKF');

ylabel('SOC','Fontsize', 16)

xlabel('时间(s)', 'Fontsize', 16)

    V_error=Vot-Vekf';

    SOC_error=RSOC-Xekf(3,:)';

    SOC_error_mean=mean(abs(SOC_error));

figure(3);

set(gcf,'Units','centimeters','Position',[10 5 19.6 8]);

plot(t,V_error,'-k','lineWidth',2); grid on

legend('端电压误差');

ylabel('端电压误差','Fontsize', 16)

xlabel('时间(s)', 'Fontsize', 16)

figure(4);

set(gcf,'Units','centimeters','Position',[10 5 19.6 8]);

plot(t,SOC_error,'-k','lineWidth',2); grid on

legend('SOC误差');

ylabel('SOC误差','Fontsize', 16)

xlabel('时间(s)', 'Fontsize', 16)

figure(5);

set(gcf,'Units','centimeters','Position',[10 5 19.6 8]);

plot(t,Pa,'-k','lineWidth',2); grid on

legend('容量估计值');

ylabel('As','Fontsize', 16)

xlabel('时间(s)', 'Fontsize', 16)

figure(6);

set(gcf,'Units','centimeters','Position',[10 5 19.6 8]);

plot(t,Pa_Qn_estimation,'-k','lineWidth',2); grid on

legend('容量滤波值');

ylabel('As','Fontsize', 16)

xlabel('时间(s)', 'Fontsize', 16)

3 运行结果

4 参考文献

[1]Pu Ren, Shunli Wang, Mingfang He,等. 一种基于双自适应卡尔曼滤波算法的混合动力汽车锂电池SOC与SOH联合估算方法.  2021.

博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 0
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
自适应卡尔滤波(Adaptive Kalman Filter, AKF)是一种利用卡尔滤波算法对状态变量进行估计的方法,能够适应系统模型和测量误差的变化。以下是一段MATLAB代码实现AKF估计SOC的示例: ```matlab % 输入测量数据和系统模型参数 % 假设SOC是连续变化的信号,battery_soc为测量得到的SOC值 battery_soc = [0.2 0.4 0.6 0.8 1]; % 系统模型参数,包括状态转移矩阵A、观测矩阵C和噪声协方差矩阵Q、R A = 0.95; C = 0.5; Q = 0.01; R = 0.1; % 初始化卡尔滤波器参数 x = battery_soc(1); % 初始状态 P = 0.1; % 初始协方差矩阵 % 开始进行自适应卡尔滤波估计 estimated_soc = zeros(1,length(battery_soc)); for i = 2:length(battery_soc) % 预测步骤 x_pred = A * x; % 状态预测 P_pred = A * P * A + Q; % 协方差矩阵预测 % 更新步骤 K = P_pred * C' / (C * P_pred * C' + R); % 卡尔增益 x = x_pred + K * (battery_soc(i) - C * x_pred); % 更新状态估计 P = (eye(size(A)) - K * C) * P_pred; % 更新协方差矩阵 % 保存估计SOC值 estimated_soc(i) = x; end % 绘制估计结果与真实SOC值的比较 plot(1:length(battery_soc), battery_soc, 'b-', 'LineWidth', 2); hold on; plot(1:length(estimated_soc), estimated_soc, 'r--', 'LineWidth', 2); legend('真实SOC', '估计SOC'); xlabel('时间'); ylabel('SOC'); title('自适应卡尔滤波估计SOC'); ``` 以上代码首先定义了输入的测量数据battery_soc和系统模型参数A、C、Q、R。然后根据AKF的步骤,设置初始状态和协方差矩阵,然后进行预测与更新步骤,并保存估计SOC值。最后,绘制估计结果与真实SOC值的比较图。请根据自己具体的SOC估计问题进行参数的调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值