• 自适应迭代扩展卡尔曼滤波算法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估算不同算法绝对误差曲线图

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

  • 相关阅读:
    【算法基础】P问题、NP问题、NP-Hard问题、NP-Complete问题
    es的must_not的踩坑
    源码解读etcd heartbeat,election timeout之间的拉锯
    (免费分享)基于jsp的CRM客户管理-带论文
    SMC IRV系列手动真空调节器低压控制性能考核试验
    牛客刷题——前端面试【三】谈一谈Promise、封装ajax、json数据使用
    815 - Flooded! (UVA)
    基于tcp协议及数据库sqlite3的云词典项目
    猿创征文 |【算法面试入门必刷】动态规划-线性dp(三)
    嵌入式Linux入门-手把手教你初始化SDRAM(附代码)
  • 原文地址:https://blog.csdn.net/m0_37702416/article/details/132793949