电池参数辨识之最小二乘法

电池参数辨识之最⼩⼆乘法
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
2.最⼩⼆乘法算法框架
  下⾯便会给出代码具体过程,最重要的是中间的最⼩⼆乘法的算法框架以及对应模型的转换关系,还有的是下⾯的我遗传因⼦取值是1所以本质上是递推最⼩⼆乘法,⼀般你取0.95-1这个范围内就是带遗传因⼦的最⼩⼆乘法。最后强调⼀下,本代码的框架是在别⼈的基础上改进的带遗传因⼦的递推最⼩⼆乘法。
%%%----------------离线递推最⼩⼆乘法(带遗忘因⼦)----------------%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  递推最⼩⼆乘法(RLS)辨识模型参数
%  等效电路模型:⼆阶等效电路模型ngd071
%  额定容量3000mAH,实际容量2987.1mAH,截⽌电压2.5V
%  编程⼈:a往南向北,⽇期:2018/05/20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;clear all;clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%1.输⼊输出信号
num=xlsread('1-3-25HPPC5a.xls','Detail_94_1_3','F15057:G62677');%代⼊你⾃⼰数据
ts= ;                      %总的采样时间
x=num(1:ts,1)';            %实际电流
y=num(1:ts,2)';            %实际电压%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
soc=[];
ocv=[];      %代⼊你⾃⼰ocv-soc数据
p=polyfit(soc,ocv,8);定时点火装置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
soc(1)=;
ocv(1)=;%你⾃⼰初始ocv-soc数据
for i=2:ts;
soc(i)=soc(i-1)+x(i)*1/(2.9871*3600);
ocv(i)=polyval(p,soc(i));
光通量测试end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%2.RLS递推最⼩⼆乘辨识
%%%y(k)=h1'*cs(k);
%%%%2.1直接给出被辨识参数的初始值,即⼀个充分⼩的实向量以及直接给出初始状态P0,即⼀个充分⼤的实数单位矩阵
新型小型工程机械
cs0=[]';  %代⼊你⾃⼰的初始值
p0=10^(3)*eye(5,5);
E=10^(-20);                  %相对误差E
cs=[cs0,cs0,zeros(5,ts-2)];          %被辨识参数矩阵的初始值及⼤⼩
e=zeros(5,ts);                  %相对误差的初始值及⼤⼩
ff=1;                          %遗忘因⼦
T=1;                            %采样时间
%2.2计算增益矩阵以及求辨识参数
for k=3:ts;                    %开始求K
ev(k)=ocv(k)-y(k);褐变度
h1=[ev(k-1),ev(k-2),-x(k),-x(k-1),-x(k-2)]';
q=h1'*p0*h1+ff;            %遗忘因⼦1
q1=inv(q);                %开始求K(k)
k1=p0*h1*q1;              %求出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;                    %递推
if abs(e2)<=E break;      %若参数收敛满⾜要求,终⽌计算
end                      %⼩循环结束
end                      %⼩循环结束
end                          %⼤循环结束
cs;                            %显⽰被辨识参数
e;                            %显⽰辨识结果的收敛情况
e2; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%3.分离参数
a1=cs(1,1:ts); a2=cs(2,1:ts); a3=cs(3,1:ts); a4=cs(4,1:ts); a5=cs(5,1:ts);
ea1=e(1,:); ea2=e(2,:);ea3=e(3,:); ea4=e(4,:);ea5=e(5,:);
%%4.代⼊逆变⽅程求最终参数
% R=(a3-a4+a5)/(1+a1-a2);
% ts*tp=T^2*(1+a1-a2)/(4*(1-a1-a2));
% ts+tp=T*(1+a2)/(1-a1-a2);
% R+Rs+Rp=(a3+a4+a5)/(1-a1-a2);
% R*ts+R*tp+Rp*ts+Rs*tp=T*(a3-a5)/(1-a1-a2);
% T为采样时间; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b0=(a3-a4+a5)./(1+a1-a2);
b1=T*T*(1+a1-a2)./(4*(1-a1-a2));
b2=T*(1+a2)./(1-a1-a2);
b3=(a3+a4+a5)./(1-a1-a2);
b4=T*(a3-a5)./(1-a1-a2);
dd=b2.*b2-4*b1;
tsp=[(b2+sqrt(dd))/2;(b2-sqrt(dd))/2];
R0=b0;
t2=tsp(1,:);
t1=tsp(2,:);
R2=(b4-R0.*t1-b3.*t2)./(t1-t2);
R1=b3-R0-R2;
C2=t2./R2;
C1=t1./R1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%预处理,这⾥取段平均值
R00=mean(R0,2);
R11=mean(R1,2);
R22=mean(R2,2);
C11=mean(C1);
C22=mean(C2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%5.画出辨识参数曲线以及误差曲线    %这部分不给出了,出图多少看你⾃⼰需求
3.调参经验
  调参,⼜可分为离线和在线情况。但是本质都是⼀样,主要有三个⽅⾯: (1)⽤的实验⼯况是什么,个⼈经验,⽤的⼀般脉冲放电⼯况和HPPC⼯况辨识结果差距很⼤,建议HPPC实验⼯况。
   (2)ocv-soc关系曲线准确程度,因为在matlab⾥⾯⾼阶拟合过程中过拟合的情况属于很正常的。
   (3)最后⼀个是最关键的,是算法中初始参数的设置,特别是参数初始值和协⽅差初始矩阵,还有的是soc初始值、电压初始值以及遗忘因⼦的选择(0.95-1)等等,这都需要反复调试和尝试。
立体交叉桥ωω
   我也只能谈到此,具体问题还要具体分析,祝⼤家百折不弯,做个直男,加油↖()↗!加油↖()↗!

本文发布于:2024-09-23 17:11:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/137302.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:参数   辨识   乘法   情况   递推   矩阵   模型
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议