卡尔曼滤波
基于扩展卡尔曼滤波(EKF) 的多状态在线估计案例:利用加速度计输入与位置/速度传感器测量数据,对系统的位置、速度、温度、电流与荷电状态(SOC)五个状态进行递推估计,并将估计结果与测量值、真实值对比,是状态估计与卡尔曼滤波的典型教学示例。
适用课程、行业与场景
本案例适用于自动控制原理、现代控制理论、状态估计与卡尔曼滤波、信号处理、传感器融合、车辆工程、新能源汽车与电池管理系统(BMS)等课程教学;面向新能源汽车、动力电池、自动驾驶与智能网联汽车、电力电子与电机控制等行业的研发与教学人员;可用于卡尔曼滤波与扩展卡尔曼滤波(EKF)的直观讲解,车辆位置/速度状态估计、电池 SOC 与温度估计的实验教学,以及多物理域状态估计与多传感器融合的入门等场景。
系统组成
| 文件 | 说明 |
|---|---|
提示词.txt |
任务说明:基于位置/速度测量数据设计卡尔曼滤波,估计位置、速度、温度、电流、SOC 并对比 |
kalman_filter.jl |
主脚本:EKF 算法实现、RMSE 评估与 TyPlot 可视化 |
kalman_filter_state_estimation_raw_data.csv |
原始数据:加速度输入、真实位置/速度、带噪声测量值 |
算法原理(技术要点)
状态向量
EKF 同时估计五个状态(NX=5):
p—— 位置(m)、v—— 速度(m/s)T—— 温度(°C)、I—— 电流(A)、SOC—— 荷电状态(%)
过程模型(预测步)
结合匀加速运动学、电机发热、热交换与安时积分,递推五个状态:
pₖ = pₖ₋₁ + vₖ₋₁·Δt + ½·aₖ·Δt² // 匀加速运动学
vₖ = vₖ₋₁ + aₖ·Δt
Tₖ = Tₖ₋₁ + [α·I² − (Tₖ₋₁ − T_amb)/(R_th·C_th)]·Δt // I²R 发热 + 散热
Iₖ = k_cur·|aₖ| // 加速度 → 电流(电机扭矩关系,取 |a| 处理制动)
SOCₖ = SOCₖ₋₁ − Iₖ·Δt/(C_bat·3600)·100% // 安时积分(库仑计数)
其中电流转换系数 k_cur = m·r_wheel/gear_ratio,发热系数 α = R_motor/C_thermal。
量测模型(更新步)
量测向量 z = [z_pos, z_vel, z_cur](NZ=3),其中位置与速度直接测量,电流为伪量测 z_cur = k_cur·|aₖ|(由加速度推算)。量测矩阵 H 将 5 维状态映射到 3 维量测空间(H[1,1]=位置、H[2,2]=速度、H[3,4]=电流)。
EKF 递推
- 雅可比矩阵
F = ∂f/∂x:对非线性过程模型线性化(含位置对速度、温度冷却项、SOC 对电流的偏导)。 - 协方差传播:
P = F·P·Fᵀ + Q(Q 为过程噪声)。 - 新息:
y = z − H·x;新息协方差S = H·P·Hᵀ + R。 - 卡尔曼增益:
K = P·Hᵀ·S⁻¹。 - 状态校正:
x̂ = x̂_pred + K·y;协方差校正:P = (I − K·H)·P。
噪声与初始化
- 过程噪声
Q = diag([0.005, 0.05, 0.1, 5.0, 1e-6])·Δt:电流不确定性较大(由输入重置),SOC 极小(积分缓慢)。 - 量测噪声
R = diag([0.5, 0.3, 2.0])。 - 初始状态:位置/速度取首次测量值,温度=环境+5°C,电流由初始加速度推算,SOC 假设 80%。
关键物理参数
| 参数 | 值 | 说明 |
|---|---|---|
| mass | 1000 kg | 整车质量 |
| wheel_radius | 0.3 m | 车轮半径 |
| gear_ratio | 10 | 减速比 |
| k_cur | 30 | 加速度→电流系数(m·r/gear) |
| R_motor | 0.5 Ω | 电机绕组电阻 |
| C_thermal | 50 J/K | 系统热容 |
| R_thermal | 0.2 K/W | 热阻 |
| T_ambient | 25 °C | 环境温度 |
| battery_cap | 50 Ah | 电池容量 |
| dt | 0.1 s | 采样间隔 |
结果评估与可视化
- RMSE 评估:对比位置/速度的测量值与 EKF 估计值相对真实值的均方根误差,输出精度改善百分比。
- 状态估计曲线:位置、速度的估计值与误差(对比真实值、测量值)。
- 置信区间:温度、电流、SOC 估计曲线带 ±2σ 置信带(由协方差对角元开方得到)。
- 新息序列:绘制位置/速度新息序列,用于滤波器一致性检验(应接近零均值白噪声)。
运行方式
在 Syslab 中执行(依赖 CSV、DataFrames、LinearAlgebra、Statistics、TyPlot):
include("kalman_filter.jl")
脚本会在控制台输出 RMSE 与各状态估计摘要,并生成 10 个子图(位置/速度估计与误差、温度/电流/SOC ±2σ 置信区间、加速度输入、新息序列)。
目录内容
| 路径 | 说明 |
|---|---|
提示词.txt |
任务说明 |
kalman_filter.jl |
EKF 算法实现与可视化脚本 |
kalman_filter_state_estimation_raw_data.csv |
传感器原始数据(加速度、真实/测量位置与速度) |
使用许可
本模型库版权由MoHub版权所有,未经许可,不得用于商业用途。
登录账号即可下载资源、参与讨论。