• 【滤波估计】基于双卡尔曼滤波实现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代码问题可私信交流。

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

  • 相关阅读:
    接收表单数据
    驱动开发:内核监控进程与线程回调
    2022年湖北劳务资质如何办理?劳务资质不分等级
    03. Springboot集成Mybatis-flex(一)
    解决mac系统终端无法使用vpn
    ArrayList源码解析
    MySQL 如何使用离线模式维护服务器
    openpnp - src - 配置文件载入过程的初步分析
    Elasticsearch通过RestHighLevelClient实现聚合分组及聚合计算查询
    何为OOM(Out of Memory)?
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126831063