基于MATLAB的Kalman滤波器、一步预测及平滑算法实现
该项目是一个综合性的数学仿真实验平台,旨在演示和评估线性动态系统在噪声环境下的状态估计性能。项目集成了标准Kalman滤波(Kalman Filter)、一步预测(One-step Prediction)以及Rauch-Tung-Striebel (RTS) 平滑算法,构建了从实时数据处理到离线轨迹优化的完整工作流。
项目介绍
本项目模拟了一个典型的运动目标跟踪场景。通过建立高度抽象的数学模型,系统能够从含有大幅度观测噪声的数据中提取目标的真实运动状态(如位置和速度)。核心算法的设计兼顾了在线处理的实时性(滤波与预测)与离线处理的精确性(平滑),是导航定位、信号处理及运动控制等领域研究的核心基础。
功能特性
- 实时状态估计:利用递归算法对传感器观测数据进行实时修正,输出当前最优的状态点。
- 提前预测能力:通过状态转移矩阵对系统未来时刻的演化进行数学外插,支持提前预测功能。
- 离线数据优化:基于RTS后向平滑算法,在获取完整观测序列后进行全局优化,通过消除滤波时滞提高整体轨迹的平滑度与精度。
- 多维状态建模:内置一套经典的恒定速度(CV)模型,支持多维状态空间(位置与速度)的联合建模与协方差更新。
- 精度定量评估:自动计算滤波与平滑结果相对于系统真值的均方根误差(RMSE),直观展现算法优劣。
系统要求
- MATLAB R2016b 或更高版本。
- Statistics and Machine Learning Toolbox(用于执行多变量正态分布随机数生成函数 mvnrnd)。
实现逻辑与功能细节
该算法通过以下五个阶段实现其核心功能:
- 系统建模与参数设定
代码定义了一个离散时间的线性系统。系统状态向量包含位置和速度两个维度。状态转移矩阵 A 设定为恒定速度模型,观测矩阵 C 设定为仅位置可观测。同时定义了过程噪声协方差 Q 和测量噪声协方差 R,用于模拟真实世界的系统不确定性。
- 真值与观测数据合成
系统基于定义的运动模型产生真实的运动轨迹。通过调用随机数生成引擎,在真实轨迹上叠加符合正态分布的系统噪声和观测噪声,从而产生仿真所需的原始传感器数据(观测值)。
- 正向Kalman滤波与一步预测
算法核心在时间循环中执行:
- 预测步:根据前一时刻的最优估计和系统动态方程,推算出当前时刻的预测值及其预测误差协方差。
- 更新步:计算Kalman增益,并利用当前的观测值对预测结果进行加权修正,获得当前时刻的最优估计值。
- 一步预测功能:在获得当前最优估计后,再次应用状态转移矩阵,提前计算出下一时刻的预期状态。
- 后向RTS平滑处理
在完成所有时刻的正向滤波后,算法进入平滑阶段。平滑过程是逆时间轴执行的:
- 平滑增益计算:利用当前时刻的滤波协方差与下一时刻的预测协方差计算平滑增益。
- 状态回溯:结合未来的平滑残差对当前滤波值进行修正。该过程使得每一个时刻的估计都参考了全量的数据信息,极大地降低了估计误差。
- 结果分析与可视化
系统通过计算位置分量的RMSE来定量分析性能。在可视化环节,代码生成了三张关键图表:显示滤波平滑效果对比的轨迹图、速度状态估计对比图、以及反映估计确定性的误差协方差演化曲线。
关键函数与算法分析
- Kalman滤波递归更新:代码通过 P_pred = A*P_filt*A' + Q 实现了系统不确定性的向前传播,这体现了预测过程中模型误差的累积。
- Kalman增益 K 的计算:作为预测信息与测量信息之间的权重分配器。代码精确实现了测量矩阵与协方差矩阵的乘积与逆运算,保证了在噪声环境下提取信号的最优性。
- RTS平滑增益 G:这是平滑算法的关键,它描述了后一时刻的修正信息如何反向传播给前一时刻。通过这种机制,RTS平滑能够显著削减Kalman滤波在动态变化时的相位滞后。
- 协方差矩阵 P:代码实时计算并存储了每一时刻的误差协方差 P。P 的迹(Trace)反映了系统对当前状态估计的信心水平。通过对比滤波协方差与平滑协方差,可以清晰看到后处理对不确定性的显著压制。
使用方法
- 启动 MATLAB 环境。
- 将项目相关的脚本文件放置在当前工作路径下。
- 运行主函数。
- 程序将自动进行数值仿真,并弹出两个图形窗口:
- 窗口 1 展示位置与速度的拟合效果对比,并在标题栏实时显示滤波与平滑的 RMSE。
- 窗口 2 分别展示预测误差协方差的演化趋势,以及一步预测功能与模型真值的匹配验证结果。
- 开发者可以根据实际需求修改 A、C、Q、R 等矩阵参数,以适应不同的线性系统模型或传感器环境。