卡尔曼滤波

基于扩展卡尔曼滤波(EKF) 的多状态在线估计案例:利用加速度计输入与位置/速度传感器测量数据,对系统的位置、速度、温度、电流与荷电状态(SOC)五个状态进行递推估计,并将估计结果与测量值、真实值对比,是状态估计与卡尔曼滤波的典型教学示例。

适用课程、行业与场景

本案例适用于自动控制原理、现代控制理论、状态估计与卡尔曼滤波、信号处理、传感器融合、车辆工程、新能源汽车与电池管理系统(BMS)等课程教学;面向新能源汽车、动力电池、自动驾驶与智能网联汽车、电力电子与电机控制等行业的研发与教学人员;可用于卡尔曼滤波与扩展卡尔曼滤波(EKF)的直观讲解,车辆位置/速度状态估计、电池 SOC 与温度估计的实验教学,以及多物理域状态估计与多传感器融合的入门等场景。

系统组成

文件 说明
提示词.txt 任务说明:基于位置/速度测量数据设计卡尔曼滤波,估计位置、速度、温度、电流、SOC 并对比
kalman_filter.jl 主脚本:EKF 算法实现、RMSE 评估与 TyPlot 可视化
kalman_filter_state_estimation_raw_data.csv 原始数据:加速度输入、真实位置/速度、带噪声测量值

算法原理(技术要点)

状态向量

EKF 同时估计五个状态(NX=5):

x=[p, v, T, I, SOC]Tx = [p,\ v,\ T,\ I,\ SOC]^T
  • 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版权所有,未经许可,不得用于商业用途。