• 自适应迭代扩展卡尔曼滤波算法AIEKF估计SOC VS 扩展卡尔曼估计SOC


    自适应迭代扩展卡尔曼滤波算法(AIEK)

    自适应迭代扩展卡尔曼滤波算法(AIEK)是一种滤波算法,其目的是通过迭代过程来逐渐适应不同的状态和环境,从而优化滤波效果。

    该算法的基本思路是在每一步迭代过程中,根据所观测的数据和状态方程,对滤波器的参数进行自适应调整,以便更好地拟合实际数据的分布。具体而言,该算法包括以下步骤:

    初始化:首先,为滤波器的初始参数设定一个初始值,这些参数包括状态转移矩阵、测量矩阵、过程噪声协方差和测量噪声协方差等。
    预测:根据当前的状态方程和滤波器参数,对下一个状态进行预测,并计算预测误差。
    校正:根据预测结果和实际观测数据,对预测进行修正,以便更好地拟合实际数据的分布。
    参数更新:根据校正结果,自适应地调整滤波器参数,以便在下一个迭代过程中更好地拟合数据。
    该算法具有自适应性和迭代性,能够逐渐适应不同的状态和环境,从而优化滤波效果。在实际应用中,可以根据具体问题选择不同的滤波器参数调整方法和迭代策略,以获得更好的滤波效果。

    加载待辨识工况数据

    load FUDS.mat;       %导入数据
    Ut = FUDS.Voltage;   %测量电压
    I = FUDS.Current;    %测量电流
    cs0=[   1.2761;
           -0.2899;
            0.0365;
           -0.0449;
            0.0095];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    计算SOC实验数据

    soc_act = nan(1,N);
    ocv = nan(1,N);
    soc_act(1)=1;
    ocv(1)=Ut(1);
    for i=2:N
        soc_act(i)=soc_act(i-1)-I(i)/(Qn);
        nihe=[1.936,-7.108,9.204,-4.603,1.33,3.416];
        ocv(i)=polyval(nihe,soc_act(i)); 
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    FFRLS参数在线辨识算法

    [R0,R1,R2,C1,C2] = FFRLS(Ut,I,Qn,nihe,ff,cs0);
    
    
    % 辨识参数图
    t=1:N;
    
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,R0,'r.-','LineWidth',1);
    legend('R0(Ω)');
    
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,R1,'g-.','LineWidth',1);
    legend('R1(Ω)');
    
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,C1,'b-','LineWidth',1);
    legend('C1(F)');
    
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,R2,'c--','LineWidth',1);
    legend('R2(Ω)');
    
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,C2,'m-','LineWidth',1);
    legend('C2(F)');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    EKF滤波算法

    SOCest_init=0.9;
    P0=1e-3;     %状态误差协方差初值
    Q=1e-8;      %过程噪声期望值
    R=1;      %观测噪声期望值
    
    [SOC_ekf,volt]=EKF(I,Ut,dt,Qn,SOCest_init,N,Q,R,nihe,P0,R0,R1,R2,C1,C2);
    error_V_EKF= Ut'-volt;
    error_SOC_EKF= soc_act-SOC_ekf;      %滤波处理后的误差
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    AIEKF滤波算法

    X_aiekf=zeros(3,N);  %定义状态向量x
    X_aiekf(:,1)=[0;0;SOCest_init];%状态向量x初值设定
    Q=1e-8;
    R=1;
    P0=0.01*eye(3);%定义协方差
    f=0.1;
    M=30;           %误差积累值窗口系数
    [SOC_aiekf,Um]=AIEKF(I',Ut',X_aiekf,f,M,Q,R,N,P0,R0,R1,R2,C1,C2,Qn,nihe);
    
    error_V_AIEKF= Ut'-Um;
    error_SOC_AIEKF= soc_act-SOC_aiekf;      %滤波处理后的误差
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    绘图

    t=1:N;
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,Ut,'r',t,volt,'b',t,Um,'g');
    legend('端电压真实值','端电压EKF估计值','端电压AIEKF估计值'); 
    
    figure;
    set(gcf,'Units','centimeters','Position',[2 2 19.6 8]); 
    plot(t,error_V_EKF,'b',t,error_V_AIEKF,'g');
    legend('EKF端电压误差','AIEKF端电压误差'); 
    
    % SOC估计结果图
    figure
    hold on;box on;
    plot(SOC_aiekf,'b');%AIEKF
    plot(SOC_ekf,'k');  %EKF
    plot(soc_act,'r');
    legend('AIEKF','EKF','参考值')
    xlabel('时间(s)')
    ylabel('SOC')
    axis([0 12000 0 1])
    
    figure
    hold on;box on;
    plot(100*error_SOC_EKF,'k');
    plot(100*error_SOC_AIEKF,'b');
    legend('EKF','AIEKF')
    xlabel('时间(s)')
    ylabel('SOC误差百分数(%)')
    axis([0 12000 -10 15])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    仿真结果

    FUDS工况下参考SOC曲线
    在这里插入图片描述

    DST工况下参考SOC曲线
    在这里插入图片描述

    FUDS工况下SOC估计对比图(EKF与参考值)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    FUDS工况下SOC估算绝对误差曲线图
    在这里插入图片描述

    在这里插入图片描述

    DST工况下SOC估计对比图(EKF与参考值)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    DST工况下SOC估算绝对误差曲线图
    在这里插入图片描述
    在这里插入图片描述

    FUDS工况下SOC估算曲线图(参考值 EKF AIEKF)

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    SOC估算不同算法绝对误差曲线图

    在这里插入图片描述
    在这里插入图片描述

    DST工况下SOC估算曲线图(参考值 EKF AIEKF)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    SOC估算不同算法绝对误差曲线图

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    NestJS学习:控制器
    SpringMvc--综合案例
    当zmq 和 docker 都要绑定一个端口时,怎么不修改端口号就能解决冲突?
    JavaScript中内置对象的方法总结
    html网页制作期末大作业成品:基于HTML+CSS+JavaScript简洁汽车网站(7页)
    什么是Verilog
    java Web的基本介绍
    典型行业大数据应用和安全风险和解决方案
    OSI七层网络模型、TCP三次握手四次分手及连接拒绝
    版本控制gitlab
  • 原文地址:https://blog.csdn.net/m0_37702416/article/details/132793949