遗忘因子递推最小二乘参数估计(FFRLS)

基于遗忘因子的最小二乘法电池参数辨识

最小二乘法是系统辨识中最常用的一种估算方法。为了克服最小二乘法存在”数据饱和”的问题,我们通常采用含有遗忘因子的递推最小二乘法(Forgetting Factor Recursive Least Square,FFRLS)算法进行电池模型的参数辨识。

1、二阶RC数学模型的建立

一般来说,建立精准的电池模型我们需要考虑以下几点:该模型能够准确的描述电池的动态及静态特性;该模型复杂度较低,易于计算;该模型工程实现较为简单可行。综合考虑,我们选择二阶RC等效电路模型。为了对电池等效电路模型进行参数辨识,我们需要把电池模型转化为可应用最小二乘法辨识的数学形式。具体的递推公式可以参考电池SOC相关文献。

2、遗忘因子递推最小二乘法辨识

系统参数

Qn = 2.59*3600;
ff = 1;
N = length(Ut);     % 数据长度
dt=1;               % 【数据采样间隔】

计算SOC实验数据

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

FFRLS参数在线辨识算法

function [R0,R1,R2,C1,C2] = FFRLS(Ut,I,Qn,P,ff,cs0)

N = length(Ut);      %数据长度

%SOC计算与OCV计算
soc = nan(1,N);
ocv = nan(1,N);
soc(1)=1;
ocv(1)=Ut(1);
for i=2:N
    soc(i)=soc(i-1)-I(i)/(Qn);
    ocv(i)=polyval(P,soc(i)); 
end

ev = zeros(1,N); 
for i=1:N
    ev(i)=ocv(i)-Ut(i);
end

%%%2.RLS递推最小二乘辨识
% cs0=[   1.2761;
%        -0.2899;
%         0.0365;
%        -0.0449;
%         0.0095];

% cs0=[ 1.1414;
%    -0.1640;
%     0.0709;
%    -0.0796;
%     0.0109];


p0=10^(-1)*eye(5,5);
cs=[cs0,cs0,zeros(5,N-1)];        %被辨识参数矩阵的初始值及大小
e=zeros(5,N);               %相对误差的初始值及大小
error1 = zeros(1,N);
%%%%2.2计算增益矩阵以及求辨识参数
for k=3:N                  %开始求K 
    h1=[ev(k-1),ev(k-2),I(k),I(k-1),I(k-2)]';
    q=h1'*p0*h1+ff;           %遗忘因子
    k1=p0*h1/q;              %求出K(k)的值
    error1(k)=ev(k)-h1'*cs0;  %求电压实验值和理论值误差
    cs1=cs0+k1*error1(k);
    e1=cs1-cs0;               %求参数当前值与上一次的值的差值
    e2=e1./cs0 ;              %求参数的相对变化
    e(:,k)=e2;                %把当前相对变化的列向量加入误差矩阵的最后一列       
    cs0=cs1;                  %新获得的参数作为下一次递推的旧参数
    cs(:,k)=cs1;              %把辨识参数c 列向量加入辨识参数矩阵的最后一列 
    p1=(p0-k1*h1'*p0)/ff;     %求出 p(k)的值
    p0=p1;                    %递推
end                           %大循环结束


%%%3.分离参数
a1=cs(1,1:N); a2=cs(2,1:N); a3=cs(3,1:N); a4=cs(4,1:N); a5=cs(5,1:N);
%==========================输出结果============================= 
a0=1./(1-a1-a2);
R0=-a5./a2;
b1=-a2.*a0;
b2=a0.*(a1+2.*a2);
b3=a0.*(a3+a4+a5);
b4=-a0.*(a4+2.*a5);
dd=b2.*b2-4.*b1;
tt=[(b2+sqrt(dd))/2;(b2-sqrt(dd))/2];
t2=abs(tt(1,:));
t1=abs(tt(2,:));
R2=(t2.*b3+t1.*R0-b4)./(t2-t1);
R1=abs(b3-R0-R2);
C1=t1./R1;
C2=t2./R2;


3、辨识结果

遗忘因子递推最小二乘参数估计(FFRLS)_第1张图片

端电压误差
遗忘因子递推最小二乘参数估计(FFRLS)_第2张图片

SOC 估计 && SOC 误差
遗忘因子递推最小二乘参数估计(FFRLS)_第3张图片

你可能感兴趣的:(算法,matlab,能源,开发语言,bms,汽车)