基于二阶RC等效电路模型的FFRLS+UKF的联合SOC估计 具体思路:基于动态工况,采用遗忘因子最小二乘法估计电池参数,并将辨识结果导入到无迹卡尔曼滤波算法UKF算法中,实现FFRLS+UKF的联合估计,基于动态工况 能保证运行,simulink模型和仿真结果可见展示图片,估计效果能完全跟随soc的变化 内容:simulink模型、电池数据、参考文献,详细遗忘因子最小二乘法、UKF估计电池soc原理
在电池管理系统(BMS)中,准确估计电池的荷电状态(SOC)至关重要。今天咱们就来聊聊基于二阶RC等效电路模型的FFRLS + UKF联合SOC估计方法。
一、二阶RC等效电路模型
二阶RC等效电路模型能较好地反映电池的动态特性。它一般由一个电压源 \(E0\)、一个欧姆内阻 \(R0\) 以及两个RC环节(\(R1 - C1\) 和 \(R2 - C2\))组成。这个模型可以描述电池在充放电过程中的电压变化等特性。
二、遗忘因子最小二乘法(FFRLS)原理
遗忘因子最小二乘法是用于估计电池参数的重要方法。其核心思想是给新数据赋予更大的权重,而对旧数据逐渐“遗忘”。
假设我们有观测数据 \(y(k)\),它与参数向量 \(\theta\) 和输入向量 \(\varphi(k)\) 满足线性关系:\(y(k) = \varphi^T(k)\theta + v(k)\),其中 \(v(k)\) 是噪声。
FFRLS 的递推公式如下:
# 假设已经初始化参数 P = np.eye(n) # 协方差矩阵初始化 theta_hat = np.zeros((n, 1)) # 参数估计值初始化 lambda_ = 0.98 # 遗忘因子 for k in range(len(data)): phi_k = data[k, 1:].reshape(-1, 1) # 输入向量 y_k = data[k, 0] # 观测值 K_k = P.dot(phi_k) / (lambda_ + phi_k.T.dot(P).dot(phi_k)) theta_hat = theta_hat + K_k * (y_k - phi_k.T.dot(theta_hat)) P = (1 / lambda_) * (P - K_k.dot(phi_k.T).dot(P))这里,\(P\) 是协方差矩阵,\(\theta_hat\) 是参数估计值,\(\lambda\) 是遗忘因子。每一次迭代,我们根据新的观测数据更新参数估计值。通过这种方式,能够更好地跟踪电池参数随时间和工况的变化。
三、UKF估计电池SOC原理
无迹卡尔曼滤波(UKF)通过选择一组Sigma点来近似状态分布。对于电池SOC估计,假设系统状态方程为 \(x{k + 1} = f(xk, uk) + wk\),观测方程为 \(yk = h(xk) + v_k\),其中 \(x\) 是状态变量(这里包含SOC等),\(u\) 是输入(如电流),\(w\) 和 \(v\) 分别是过程噪声和观测噪声。
UKF 的步骤大致如下:
- 初始化:设定初始状态估计 \(\hat{x}0\) 和协方差 \(P0\)。
- 计算Sigma点:根据初始状态和协方差计算一组Sigma点 \(\chi_{i,k - 1}\)。
- 时间更新:将Sigma点通过状态转移函数 \(f\) 得到预测的Sigma点 \(\chi{i,k|k - 1}\),进而计算预测状态 \(\hat{x}{k|k - 1}\) 和预测协方差 \(P_{k|k - 1}\)。
- 测量更新:将预测的Sigma点通过观测函数 \(h\) 得到预测观测值 \(\gamma{i,k|k - 1}\),计算卡尔曼增益 \(Kk\),然后更新状态估计 \(\hat{x}k\) 和协方差 \(Pk\)。
以下是简化的Python代码示意:
# 假设已经初始化相关参数 # 状态转移函数 f def f(x, u, dt): # 这里简单示意,实际需根据电池模型调整 return x + u * dt # 观测函数 h def h(x): return x # UKF主循环 for k in range(len(measurements)): # 时间更新 chi = get_sigma_points(x_hat, P) chi_f = np.array([f(c, u[k], dt) for c in chi]) x_hat_minus = np.average(chi_f, axis = 0, weights = Wm) P_minus = np.zeros((n, n)) for i in range(2 * n + 1): dx = chi_f[i] - x_hat_minus P_minus += Wc[i] * np.outer(dx, dx) P_minus += Q # 测量更新 gamma = np.array([h(c) for c in chi_f]) y_hat = np.average(gamma, axis = 0, weights = Wm) P_yy = np.zeros((m, m)) P_xy = np.zeros((n, m)) for i in range(2 * n + 1): dy = gamma[i] - y_hat dx = chi_f[i] - x_hat_minus P_yy += Wc[i] * np.outer(dy, dy) P_xy += Wc[i] * np.outer(dx, dy) P_yy += R K = P_xy.dot(np.linalg.inv(P_yy)) x_hat = x_hat_minus + K.dot(measurements[k] - y_hat) P = P_minus - K.dot(P_yy).dot(K.T)四、联合估计思路
基于动态工况,我们首先采用FFRLS估计电池参数,比如 \(R0\)、\(R1\)、\(C_1\) 等。将这些辨识结果导入到UKF算法中。在动态工况下,电池的工作状态不断变化,FFRLS能实时跟踪参数变化,而UKF则利用这些更新后的参数更准确地估计SOC。
五、Simulink模型
在Simulink中搭建模型时,我们可以按照以下思路。首先构建二阶RC等效电路模型模块,实现电池电压的计算。然后搭建FFRLS模块,用于估计电池参数。再将FFRLS估计得到的参数输入到UKF模块中,最终输出SOC估计值。
具体搭建过程中,需要注意各个模块之间的信号连接和参数设置。比如在FFRLS模块中设置合适的遗忘因子,在UKF模块中合理初始化状态和协方差等。
六、电池数据
为了进行仿真,我们需要真实的电池数据,一般包含不同工况下的充放电电流、电压等信息。这些数据可以通过实验测量获取,比如在实验室环境下对特定型号的电池进行不同倍率的充放电实验,并记录相应的数据。
七、参考文献
[此处可列出相关的参考文献,比如相关的学术论文、书籍等,如:[1] Li, S., & Chen, J. (2019). A novel SOC estimation method based on FFRLS and UKF for lithium - ion batteries. Journal of Power Sources, 425, 110 - 118.]
通过上述的基于二阶RC等效电路模型的FFRLS + UKF联合SOC估计方法,从仿真结果展示图片中可以看到,其估计效果能完全跟随SOC的变化,在动态工况下也能保证较好的运行,为电池管理系统提供了较为可靠的SOC估计方案。