基于MATLAB的通用扩展卡尔曼滤波器(EKF)算法实现平台
项目介绍
本项目是一个高度模块化的扩展卡尔曼滤波器(EKF)仿真与分析平台,旨在解决具有非线性观测特性的动态系统状态估计难题。平台通过一阶泰勒展开实现系统的线性化近似,能够有效处理含有高斯白噪声的非线性运动模型。在该仿真环境中,默认配置了一个二维恒定速度(CV)运动模型,并结合了典型的极坐标(距离与方位角)观测模型,完整展示了从真实物理量生成、噪声模拟到滤波器状态还原的全过程。
功能特性
- 非线性状态估计:核心算法支持对非线性观测方程进行实时线性化处理,计算观测阵的雅可比矩阵。
- 模块化函数设计:状态转移、观测模型以及对应的雅可比矩阵计算均封装为独立子函数,便于用户替换为不同的物理模型。
- 角度残差处理:针对极坐标系下的方位角跳变问题,内置了角度归一化逻辑,确保滤波过程的收敛性。
- 完备的性能评估:系统自动计算位置和速度的均方根误差(RMSE),通过量化指标直观反映滤波精度。
- 多维可视化工具:提供轨迹对比、误差演变、协方差收敛、增益动态和残差分布等五大维度的图表分析。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:Statistics and Machine Learning Toolbox(用于生成多维正态分布噪声 mvnrnd 函数)。
使用方法
- 配置参数:在程序起始位置修改仿真步数 T、采样步长 dt、过程噪声协方差 Q 以及测量噪声协方差 R。
- 设置初始值:根据实际需求调整初始真实状态 X_true 和滤波器初始估计状态 X_est。
- 执行仿真:运行主程序,系统将依次执行数据模拟、递归滤波。
- 结果分析:查看命令行输出的 RMSE 评估报告,并观察自动生成的仿真对比图表。
核心算法实现逻辑
程序实现逻辑严格遵循扩展卡尔曼滤波的数学递归过程,主要分为以下四个阶段:
1. 系统初始化阶段
定义状态向量为包含 X/Y 坐标和 X/Y 速度的四维向量。初始化过程噪声协方差矩阵 Q(基于采样时间步长构造)和测量噪声协方差矩阵 R(针对距离和角度)。设定滤波器的初始估计值和误差协方差矩阵 P,为递归循环提供起始点。
2. 真实数据模拟
在每个时间步内,根据状态转移方程和过程噪声生成系统的真实运动轨迹。同时基于真实状态,通过非线性观测方程(计算到原点的距离和方位角)并叠加测量噪声,生成模拟的传感器观测数据。
3. EKF 递归滤波阶段
这是算法的核心部分,每个采样周期执行一次预测和一次修正:
- 时间更新(预测):利用当前时刻的估计值计算下一时刻的预测状态,并根据状态转移雅可比矩阵更新预测误差协方差 P_pre。
- 测量更新(修正):
- 计算观测函数的雅可比矩阵 H。
- 计算预测观测值与实际观测值之间的残差(Innovation)。
- 特别针对方位角残差,使用正弦与余弦函数的反正切值进行归一化,防止角度在边界处发生突变。
- 计算卡尔曼增益 K,并依据残差更新状态估计值 X_est 和误差协方差矩阵 P。
4. 数据记录与评估
循环过程中实时记录真实值、观测值、估计值、协方差对角线元素(代表估计的不确定度)以及卡尔曼增益的模长。循环结束后,对比真实轨迹与估计轨迹,计算全过程的 RMSE。
关键函数与算法细节
- 状态转移函数:采用恒定速度(CV)线性模型,描述物体在二维平面内的位置和速度演变。
- 观测模型:实现笛卡尔坐标系到极坐标系的转换,观测值包括距离(x、y 的平方和开根号)和方位角(y/x 的反正切)。
- 雅可比矩阵计算:
- 预测雅可比:由于状态转移为线性模型,其雅可比矩阵等同于状态转移矩阵。
- 观测雅可比:实时计算观测方程对状态变量的一阶偏导数。对于距离和角度,偏导数与当前的预测位置密切相关,程序内通过位置分量与距离的比例关系动态更新 H 矩阵。
- 奇异值处理:在计算观测雅可比矩阵时,加入了距离阈值判断,避免在坐标原点附近出现除以零的计算错误。
仿真结果展示功能
程序通过一个多子图窗口展示滤波性能:
- 轨迹对比图:直观显示真实轨迹、带噪声的观测点分布以及 EKF 滤波后的平滑轨迹。
- 误差曲线:展示 X 和 Y 两个维度上估计误差随时间的变化情况。
- 协方差演变:观察 P 矩阵对角线元素的下降过程,验证滤波器的收敛性。
- 增益动态:反映卡尔曼增益在滤波初期的剧烈调整和稳定后的变化趋势。
- 残差分布:通过直方图分析距离观测残差是否符合高斯分布特征。