👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
文献来源:
摘要:我们提出了一个基于粒子滤波的预测框架的实现,该框架利用使用概况的统计特征来(i)估计充电状态(SOC), (ii)预测储能设备(锂离子电池)的放电时间。该方法采用了一种新的经验状态空间模型,该模型受到电池现象学的启发,并使用粒子滤波算法实时估计SOC和其他未知模型参数。滤波阶段采用的自适应机制提高了状态估计的收敛性,为预测阶段提供了充分的初始条件。SOC预测使用基于粒子滤波的框架来实现,该框架考虑了基于两态马尔可夫链转移概率的最大似然估计的未来放电曲线的不确定性的统计特征。所有的算法都经过了训练和验证,使用了一个锂离子26650和两个锂离子18650电池的实验数据,并考虑了不同的操作条件。
索引术语:锂离子电池,马尔可夫链,粒子滤波,充电状态预测。
原文摘要:
Abstract—We present the implementation of a particle-filtering-based prognostic framework that utilizes statistical characteriza-tion of use profiles to (i) estimate the state-of-charge (SOC), and (ii)predict the discharge time of energy storage devices (lithium-ion batteries). The proposed approach uses a novel empirical state-space model, inspired by battery phenomenology, and particle-fil-tering algorithms to estimate SOC and other unknown model pa-rameters in real-time. The adaptation mechanism used during the filtering stage improves the convergence of the state estimate, and provides adequate initial conditions for the prognosis stage. SOC prognosis is implemented using a particle-filtering-based frame-work that considers a statistical characterization of uncertainty for future discharge profiles based on maximum likelihood estimates of transition probabilities for a two-state Markov chain. All algo-rithms have been trained and validated using experimental data acquired from one Li-Ion 26650 and two Li-Ion 18650 cells, and considering different operating conditions.
Index Terms—Lithium-ion battery, Markov chain, particle fil-tering, state-of-charge prognosis.
文献下载:
链接:https://pan.quark.cn/s/00b638d79ba9
提取码:vSvu
📚2 运行结果
2.1 kalmanFilter
2.2 basicNonlinear
2.3 battery
部分代码:
%Leer entrada de corriente
input = csvread('2015_vali1_current.csv');
i_meas = input(:,2);
L = length(i_meas);
dt = 2; %paso de tiempo en segundos
t = dt*(0:(L-1));
%Simular voltaje
v = zeros(L,1);
v_meas = zeros(L,1);
x1 = zeros(L,1);
x2 = zeros(L,1);
%Noise
sigma_1 = 1e-8;
sigma_2 = 1e-8;
sigma_n = 1e-4;
%Initial conditions
x1(1) = Zp;
x2(1) = 1;
v(1) = v0 - i_meas(1)*x1(1);
v_meas(1) = v(1) + sqrt(sigma_n)*randn;
for k = 2:L
%State transition
x1(k) = x1(k-1) + sqrt(sigma_1)*randn;
x2(k) = x2(k-1) - v(k-1)*i_meas(k-1)*dt/Ecrit + sqrt(sigma_2)*randn;
if x2(k)<0
x2(k) = 0;
end
%Measurement
v(k) = vl + (v0-vl)*exp(gamma*(x2(k)-1))...
+ alfa*vl*(x2(k)-1) + (1-alfa)*vl*( exp(-beta)-exp(-beta*sqrt(x2(k))))...
- i_meas(k)*x1(k);
v_meas(k) = v(k) + sqrt(sigma_n)*randn;
end
%Mostrar los datos simulados
figure
subplot(2,2,1)
plot(t,i_meas);
grid, xlabel('Time [s]'), ylabel('Current [A]'), title('Measured Discharge Current');
subplot(2,2,2)
plot(t,v_meas);
grid, xlabel('Time [s]'), ylabel('Voltage [V]'), title('Simulated Measured Discharge Voltage');
%Mostrar los datos simulados
%figure
subplot(2,2,4)
plot(t,v);
grid, xlabel('Time [s]'), ylabel('Voltage [V]'), title('Simulated True Discharge Voltage');
subplot(2,2,3)
plot(t,x2);
grid, xlabel('Time [s]'), ylabel('SOC'), title('Simulated True SOC');
%%
%Filtrado
%--------------PF Bootstrap---------------
n_part = 100;
%Ruidos filtro
w_1 = sigma_1;
w_2 = 1e-5; %sigma_2;
Rnn = 1e-2; %sigma_n;
%Resampling
N_t = n_part;
%Inicializacion de particulas
particle = zeros(n_part,2);
particle_pred = zeros(n_part,2);
particle(:,1) = ones(n_part,1)*Zp;
particle(:,2) = unifrnd(0.8,0.9, n_part, 1); %soc
weight = ones(n_part,1)/n_part;
%Estimadores
x1_est_mmse = zeros(L,1);
x1_est_mmse(1) = mean(particle(:,1));
x2_est_mmse = zeros(L,1); %soc
x2_est_mmse(1) = mean(particle(:,2));
v_model = zeros(n_part,1);
for k=2:L
for i=1:n_part
%Modelo de voltaje para la particula anterior (k-1)
v_model(i) = vl + (v0-vl)*exp(gamma*(particle(i,2)-1))...
+ alfa*vl*(particle(i,2)-1) + (1-alfa)*vl*( exp(-beta)-exp(-beta*sqrt(particle(i,2))))...
- i_meas(k-1)*particle(i,1);
%Importance sampling (prediccion desde k-1 hacia k)
r1 = sqrt(w_1)*randn;
r2 = sqrt(w_2)*randn;
particle_pred(i,1) = particle(i,1) + r1;
particle_pred(i,2) = particle(i,2) - v_model(i)*i_meas(k-1)*dt/Ecrit + r2;
if particle_pred(i,2)<0
particle_pred(i,2) = 0;
end
%Weight update (medicion de valor en k)
v_model(i) = vl + (v0-vl)*exp(gamma*(particle_pred(i,2)-1))...
+ alfa*vl*(particle_pred(i,2)-1) + (1-alfa)*vl*( exp(-beta)-exp(-beta*sqrt(particle_pred(i,2))))...
- i_meas(k)*particle_pred(i,1); %prediccion de medicion en k
innov = v_meas(k) - v_model(i); %innovacion
%weight(i) = exp( -(( innov )^2)/(2*Rnn) )/(sqrt(2*pi*Rnn));
weight(i) = exp( -log(sqrt(2*pi*Rnn)) -(( innov )^2)/(2*Rnn) );
end
if sum(weight)==0
%disp(weight);
disp(innov);
disp('Error');
disp(k);
disp(i);
end
%Normalizar pesos
weight = weight/sum(weight);
N_eff = 1/( sum(weight.^2) );
if N_eff < N_t
%Resampling
cdf = cumsum(weight);
%Systematic resampling
sam = rand/n_part;
for i=1:n_part
samInd = sam + (i-1)/n_part;
ind = find( samInd<=cdf ,1);
particle(i,:) = particle_pred(ind,:);
end
else
for i=1:n_part
particle(i,:) = particle_pred(i,:);
end
end
%Estimacion del estado
x1_est_mmse(k) = mean(particle(:,1));
x2_est_mmse(k) = mean(particle(:,2));
end
figure, plot(t,x2_est_mmse)
hold on
plot(t, x2)
grid, xlabel('Time [s]'), ylabel('SOC'), title('Particle-Filtered SOC ');
legend('Estimate','Ground Truth');
figure
subplot(2,1,1)
plot(t,x2);
hold on
plot(t,x2_est_mmse);
grid, xlabel('Time [s]'), ylabel('State'), title(sprintf('SOC Estimation with $$x^{(2)}_0=$$ %1.1f and $$P_0^{(2)}=$$ %1.0d',x2_est_mmse(1), 1e-5));
legend('True State','BPF Estimate');
subplot(2,1,2)
error = x2-x2_est_mmse;
plot(t,error);
ylim([-4e-2,4e-2]);
grid, xlabel('Time [s]'), ylabel('Error');
%title(sprintf('State Estimation Error with $$x_0=$$ %1.1f and $$P_0=$$ %1.0d',x_est(1), P_est(1)));
title('SOC Estimation Error');
%%
%Filtrado
%--------------EKF---------------
%Ruidos filtro
w_1 = sigma_1;
w_2 = sigma_2;
Rnn = sigma_n;
Rww = [w_1,0;0,w_2];
%Inicializacion de arreglos
x1_est = zeros(L,1); %state estimate
x1_pred = zeros(L,1); %state estimate prediction
P2_est = zeros(L,1);
x2_est = zeros(L,1); %state estimate soc
x2_pred = zeros(L,1); %state estimate prediction soc
v_pred = zeros(L,1); %measurement prediction
innov = zeros(L,1); %innovation
R_innov = zeros(L,1); %innovation covariance
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。