一、一阶等效电路模型
离散化过程
时域——>s域——>z域
二、递推最小二乘法
很多论文中会有关于递推最小二乘法的推导过程,如果想细致了解一下,可以跟着推一下,不理解也可以,可以拿来直接用也无妨。
三、程序编写
clear all
clc
Matrix=xlsread('E:\Matlabyuan\Practice\RLS\DST_25_A123.xlsx');
s=length(Matrix);
Ud=Matrix(:,4);%第四列的数据,电压量,列向量
I=Matrix(:,3);%第三列的数据,电流量,列向量
t=Matrix(:,2);
%初始化
Phi(:,1)=[0 0 0]';
theta(:,1)=[0 0 0]';
Lamda=1;%遗忘因子
P=10000*eye(3,3);%函数eye(3,3):生成3*3的单位矩阵
SOC(1)=1;
for i=2:s
SOC(i)=SOC(i-1)+I(i-1)*(t(i)-t(i-1))/(1.1*3600);
end
for i=1:s
Uoc(i)=(334.0856*SOC(i)^7-1299.6*SOC(i)^6+2048.6*SOC(i)^5-1679*SOC(i)^4+763.6108*SOC(i)^3-190.4243*SOC(i)^2+24.1076*SOC(i)+2.0087);
U(i)=Ud(i)-Uoc(i);
end
for k=2:s
Phi(:,k)=[U(k-1) I(k) I(k-1)]';
e(k)=U(k)-Phi(:,k)'*theta(:,(k-1));
K=P*Phi(:,k)/(Lamda+Phi(:,k)'*P*Phi(:,k));
P=(P-K*Phi(:,k)'*P)/Lamda;
theta(:,(k))=theta(:,(k-1))+K*e(k);%θ矩阵[C1 C2 C3]',是3行、s列的矩阵
c1=theta(1,:);
c2=theta(2,:);
c3=theta(3,:);
end
for i=1:s
R0(i)=(c2(i)-c3(i))/(1+c1(i));
R1(i)=(c2(i)+c3(i))/(1-c1(i))-R0(i);
C1(i)=((1+c1(i))/(2-2*c1(i)))/R1(i);
end
figure(1)
plot(SOC,R0,'r-', 'LineWidth', 2)
xlabel('SOC');
ylabel('R0');
title('R0结果');
figure(2)
plot(SOC,R1,'b-', 'LineWidth', 2)
xlabel('SOC');
ylabel('R1');
title('R1结果')
figure(3)
plot(SOC,C1,'g-', 'LineWidth', 2)
xlabel('SOC');
ylabel('C1');
title('C1结果')
四、仿真结果的验证
本文采用的数据集是公开数据集,辨识的过程使用的是DST工况,之后又在simulink中搭建等效电路,验证辨识参数的准确性,使用DST工况作为输入,当然也可以使用其他工况进行验证。结果如下
模拟的电压与实际电压基本吻合,可能会存在一些误差,总体趋势相同,证明辨识结果的合理性。
注:辨识得到的参数还可以继续优化,之后如果继续学习,还会做一下优化。