基于扩展卡尔曼滤波的电池SOC估计 实现了双EKF来估计传感器电压和电流偏置,并与状态EKF进行比较,以估计SOC 联系后请加好友邮箱,有详细建模说明(paper)。 MATLAB编程

在电池管理系统(BMS)中,准确估计电池的荷电状态(SOC)至关重要。今天咱就聊聊基于扩展卡尔曼滤波(EKF)来实现电池SOC估计,并且探讨一下双EKF在估计传感器电压和电流偏置方面的应用,以及和状态EKF进行比较。

扩展卡尔曼滤波(EKF)基础

EKF是卡尔曼滤波在非线性系统中的扩展。对于非线性系统,状态方程和观测方程一般是这样的形式:

\[ x{k}=f(x{k - 1}, u{k - 1}) + w{k - 1} \]

\[ y{k}=h(x{k}) + v_{k} \]

这里\( x{k} \)是\( k \)时刻的状态向量,\( u{k - 1} \)是控制输入,\( w{k - 1} \)是过程噪声,\( y{k} \)是观测向量,\( h(x{k}) \)是观测函数,\( v{k} \)是观测噪声。

在MATLAB中,实现EKF的核心代码大概长这样(简化示意):

% 初始化
A = [1 0; 0 1]; % 状态转移矩阵
H = [1 0]; % 观测矩阵
Q = [0.01 0; 0 0.01]; % 过程噪声协方差
R = 0.1; % 观测噪声协方差
x_hat = zeros(2,1); % 初始状态估计
P = eye(2); % 初始估计协方差

% 时间更新(预测)
x_hat_minus = A * x_hat;
P_minus = A * P * A' + Q;

% 测量更新
y = getMeasurement(); % 获取测量值
K = P_minus * H' / (H * P_minus * H' + R);
x_hat = x_hat_minus + K * (y - H * x_hat_minus);
P = (eye(2) - K * H) * P_minus;

在这段代码里,首先初始化了状态转移矩阵\( A \)、观测矩阵\( H \)、过程噪声协方差\( Q \)、观测噪声协方差\( R \)以及初始状态估计\( x_hat \)和初始估计协方差\( P \)。然后通过时间更新步骤预测下一时刻的状态和估计协方差,接着在测量更新步骤中,根据实际测量值\( y \)来校正预测值,得到更准确的状态估计。

双EKF估计传感器电压和电流偏置

双EKF的思路是用两个EKF分别估计电压和电流的偏置。假设电压偏置状态方程和观测方程为:

\[ b{v,k}=b{v,k - 1} + w_{v,k - 1} \]

\[ y{v,k}=V{meas,k}-V{true,k}(x{k}) - b{v,k} + v{v,k} \]

基于扩展卡尔曼滤波的电池SOC估计 实现了双EKF来估计传感器电压和电流偏置,并与状态EKF进行比较,以估计SOC 联系后请加好友邮箱,有详细建模说明(paper)。 MATLAB编程

这里\( b{v,k} \)是\( k \)时刻电压偏置,\( V{meas,k} \)是测量电压,\( V{true,k}(x{k}) \)是真实电压(与电池状态\( x{k} \)相关),\( w{v,k - 1} \)和\( v_{v,k} \)分别是过程噪声和观测噪声。电流偏置同理。

下面是简单的双EKF估计电压偏置的MATLAB代码示例:

% 电压偏置EKF初始化
A_bv = [1];
H_bv = [1];
Q_bv = 0.001;
R_bv = 0.01;
b_hat_v = 0;
P_bv = 1;

% 时间更新(预测)
b_hat_v_minus = A_bv * b_hat_v;
P_bv_minus = A_bv * P_bv * A_bv' + Q_bv;

% 测量更新
y_bv = measuredVoltage - trueVoltage(x_hat) - b_hat_v_minus;
K_bv = P_bv_minus * H_bv' / (H_bv * P_bv_minus * H_bv' + R_bv);
b_hat_v = b_hat_v_minus + K_bv * y_bv;
P_bv = (1 - K_bv * H_bv) * P_bv_minus;

代码逻辑和前面普通EKF类似,初始化相关参数后,通过时间更新和测量更新来不断估计电压偏置。

与状态EKF估计SOC的比较

状态EKF主要就是直接对电池SOC进行估计。把SOC作为状态变量,结合电池的动态模型建立状态方程和观测方程。比如状态方程可以是:

\[ SOC{k}=SOC{k - 1}-\frac{I{k - 1}\Delta t}{C{n}} + w_{SOC,k - 1} \]

观测方程:

\[ V{k}=f(SOC{k}) + v_{V,k} \]

这里\( SOC{k} \)是\( k \)时刻SOC,\( I{k - 1} \)是\( k - 1 \)时刻电流,\( \Delta t \)是时间间隔,\( C{n} \)是电池容量,\( f(SOC{k}) \)是与SOC相关的电池电压函数。

比较双EKF和状态EKF估计SOC时,我们主要看估计的精度、收敛速度等指标。在实际应用中,双EKF通过估计传感器偏置可以一定程度上校正测量误差,理论上可能会提高SOC估计精度。

如果您对详细建模说明感兴趣,联系后请加好友邮箱(具体邮箱请私信我),我会给您发送相关paper。希望今天分享的基于扩展卡尔曼滤波的电池SOC估计相关内容对大家有所帮助,欢迎一起交流讨论。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐