我们知道在RC参数辨识过程中,不同RC阶数对参数的准确度存在很大的影响,如果我们对比1RC和2RC的区别,会发现2RC的参数精度比1RC的要好很多。
得到的2RC参数与SOC的关系也是比较明确且有规律的
SOC | r0 | r1 | c1 | r2 | c2 |
100 | 0.045614 | 0.89439 | 173.3915 | 0.00325 | 980.2758 |
90 | 0.022792 | 0.027812 | 1011.756 | 0.00471 | 456.4282 |
80 | 0.023668 | 0.036059 | 967.7184 | 0.005224 | 420.7934 |
70 | 0.024239 | 0.028395 | 962.9003 | 0.005453 | 355.4462 |
60 | 0.024699 | 0.006119 | 321.0537 | 0.031105 | 935.5144 |
50 | 0.024765 | 0.031517 | 887.0737 | 0.006686 | 271.7164 |
40 | 0.025328 | 0.037325 | 863.2567 | 0.007849 | 238.1184 |
30 | 0.025701 | 0.040193 | 836.1323 | 0.009352 | 210.5516 |
20 | 0.026799 | 0.053891 | 834.826 | 0.011849 | 202.015 |
10 | 0.028713 | 0.104662 | 754.4287 | 0.016396 | 214.5108 |
附上相关的过程代码
currentLimit = 0.5;
iniPar = [0.06;0.03;1000];
xIni = 0;
[m,n] = size(dataHPPC{1});
outputPar = zeros(3,n);
modelError = zeros(m,n);
vModel = zeros(m,n);
for i = 1:n
time = dataHPPC{1}(:,i);
current = dataHPPC{2}(:,i);
vExp = dataHPPC{3}(:,i);
index = find(current>currentLimit);
ocvVoltage = vExp(index(1)-1);
fun = @(beta,x)RC1_fitting_model(beta,x,ocvVoltage,xIni);
outputPar(:,i) = nlinfit([time,current],vExp,fun,iniPar);
vModel(:,i) = RC1_fitting_model(outputPar(:,i),[time,current],ocvVoltage,xIni);
modelError(:,i) = abs((vModel(:,i) - vExp)./vExp)*100;
figure
plot(vModel(:,i))
hold on
plot(vExp)
end
如果需要原始代码和文件,请付费下载