基于卡尔曼滤波的二维目标追踪仿真系统
项目简介
本项目是一个基于 Matlab 开发的算法仿真系统,旨在演示和验证线性卡尔曼滤波(Linear Kalman Filter, LKF)在二维平面目标追踪场景中的应用。系统模拟了一个动态目标在二维空间中的运动,并通过叠加高斯白噪声的一般观测模型生成仿真雷达或传感器数据。核心算法利用卡尔曼滤波的“预测-更新”机制,从含有噪声的观测数据中实时估计目标的准确位置和速度,并对算法的去噪性能和收敛精度进行量化分析与可视化展示。
功能特性
- 运动学建模:基于恒定速度(Constant Velocity, CV)模型构建状态转移方程,模拟目标在 X 和 Y 轴方向上的运动。
- 噪声仿真:具备真实环境模拟能力,在基准真值轨迹上分别叠加过程噪声(Process Noise)和测量噪声(Measurement Noise),生成符合高斯分布的随机观测数据。
- 线性卡尔曼滤波算法:实现了完整的线性卡尔曼滤波迭代流程,包括时间更新(预测)和测量更新(校正)。
- 性能评估:自动计算并输出位置估计和速度估计的均方根误差(RMSE),量化评估滤波效果。
- 多维数据可视化:提供二维轨迹对比图、误差收敛曲线图以及位置分量时序图,直观展示滤波前后的数据差异。
系统要求
- 软件环境:Matlab R2016a 及以上版本(代码仅使用 Matlab 基础函数,不依赖特定工具箱)。
- 运行配置:标准 PC 即可,无需特殊硬件加速。
使用方法
- 确保运行环境已安装 Matlab。
- 打开包含仿真代码的
.m 脚本文件。 - 直接运行主函数。
- 程序运行结束后,Matlab 控制台将输出仿真步数、位置 RMSE 和速度 RMSE 统计结果,并自动弹出三个可视化窗口展示追踪效果。
代码实现逻辑与算法细节
系统的主程序流程严格遵循以下逻辑实现:
1. 参数初始化与模型构建
程序首先定义仿真时间参数(总时长 50秒,步长 0.1秒)和目标的初始状态向量(位置为原点,X轴速度 2m/s,Y轴速度 1.5m/s)。构建了卡尔曼滤波的核心矩阵:
- 状态转移矩阵 (F):基于匀速模型设计,描述状态如何在时间步长间演变。
- 观测矩阵 (H):定义系统仅能观测到位置信息(X 和 Y),而无法直接观测速度。
- 噪声协方差矩阵 (Q & R):
*
Q (过程噪声):采用离散噪声模型,模拟目标运动过程中的微小加速度扰动。
*
R (测量噪声):假设传感器在 X 和 Y 方向上的测量标准差为 2.0米,构建对角矩阵。
- 初始估计:为了验证滤波器的收敛性,特意将初始估计状态设置了偏差(即估计值与真值不重合),并初始化协方差矩阵 P。
2. 仿真数据生成
在滤波循环开始前,程序预先生成了全周期的仿真数据:
- 真值生成 (Ground Truth):利用状态转移矩阵迭代生成真实轨迹,并未完全理想化,而是加入了微小的随机过程噪声,以模拟真实物理环境中的不确定性。
- 观测值生成 (Measurements):在每一时刻的真实位置上,叠加标准差为 2.0米的高斯白噪声,模拟传感器获取的带噪数据。
3. 卡尔曼滤波迭代核心
程序通过循环遍历每一个时间步,执行标准的卡尔曼滤波“预测-校正”步骤:
* 根据上一时刻的最优估计,利用矩阵 F 预测当前时刻的先验状态。
* 推演当前时刻的先验误差协方差 P,引入过程噪声 Q 的影响。
* 计算卡尔曼增益 K,该增益决定了多大程度上信任观测数据不仅。
* 计算测量残差(Innovation),即实际观测值与预测观测值之差。
* 结合卡尔曼增益修正先验状态,得到当前时刻的后验最优状态估计(位置和速度)。
* 更新误差协方差矩阵 P,以供下一时刻迭代使用。
* 同时记录协方差矩阵的迹(Trace),用于潜在的不确定性分析。
4. 误差统计与输出
仿真结束后,系统提取出真实轨迹与滤波估计轨迹,分别计算:
- 位置误差:X轴与Y轴方向的欧氏距离误差。
- 速度误差:速度分量的估计偏差。
- 最终计算并打印位置和速度的均方根误差(RMSE),以此作为评判跟踪精度的指标。
5. 结果可视化
程序最后绘制三组图表:
- 二维轨迹对比图:在同一坐标系下绘制真实轨迹(蓝色实线)、带噪观测点(绿色散点)和卡尔曼滤波估计轨迹(红色虚线)。可以看到红色虚线如何从初始偏差逐渐收敛并平滑地跟随真实轨迹。
- 误差分析图:包含两个子图,分别展示位置误差(X/Y)和速度误差(Vx/Vy)随时间变化的曲线,并标定 RMSE 值和 0 误差基准线。
- 位置分量分析图:将 X 轴和 Y 轴的位置数据分开展示,清晰地对比真实值、观测值(噪声散点)和估计值在时间序列上的吻合程度。