基于粒子滤波的一维非线性非高斯目标跟踪系统
项目介绍
本项目是一个基于MATLAB开发的一维动态系统目标跟踪仿真平台。针对复杂环境下的非线性状态转移和非高斯/非线性观测问题,系统采用粒子滤波(Particle Filter, PF)技术,具体实现了顺序重要性重采样(SIR)算法。通过利用一组离散的随机粒子及其权重来近似表示目标的后验概率分布,该系统能够有效处理传统线性滤波器(如卡尔曼滤波)难以应对的强非线性场景。
功能特性
- 强非线性模型仿真:系统内置了经典的非线性状态转移方程(包含分式项与余弦时变项)及二次项非线性观测方程,能够模拟复杂的动态目标行为。
- SIR粒子滤波算法:实现了完整的采样演化、权重更新、归一化以及估计值计算流程。
- 系统重采样机制:集成系统重采样(Systematic Resampling)算法,有效缓解粒子退化现象,通过复制高权重粒子并剔除低权重粒子来优化粒子质量。
- 多维度可视化评估:实时生成目标跟踪曲线、粒子分布演化云图以及瞬时估计误差(RMSE)分布图。
- 误差定量分析:自动计算仿真全过程的平均均方根误差(Average RMSE),为算法性能提供量化指标。
实现逻辑说明
- 参数与空间初始化
系统首先设定仿真步数(50步)、粒子数量(100个)、过程噪声方差(10)以及观测噪声方差(1)。同时为真实状态轨迹、观测序列、滤波估计值及粒子记录矩阵预分配存储空间。
- 真实轨迹与观测生成
基于给定的初始状态,系统通过迭代计算产生真实轨迹。状态转移过程结合了线性衰减、非线性比例项以及随时间变化的余弦干扰,并叠加高斯随机噪声。观测过程则将状态值的平方进行缩放后叠加观测噪声。
- 粒子滤波核心循环
-
预测阶段:根据状态转移方程,利用上一时刻的粒子分布预测当前时刻的粒子位置,并行加入过程噪声以维持种群多样性。
-
更新阶段:根据当前时刻的实际观测值,利用高斯概率密度函数计算每个粒子的似然度,并以此更新粒子权重。
-
归一化:确保所有粒子的权重之和为1。
-
重采样:调用内置函数,根据累积分布函数(CDF)产生均匀间隔的随机采样点,执行系统重采样,将权重重新均等化。
-
状态估计:计算重采样后所有粒子的算术平均值,作为当前时刻的系统状态估计值。
- 误差计算与对比
计算每一时刻真实值与估计值之间的绝对偏差,并在仿真结束后计算全时段的平均RMSE。
关键函数与算法分析
- 系统重采样函数:该函数通过生成一个起始随机点并以固定步长(1/N)移动的方式,在粒子的累积概率区间内进行抽样。相比于简单随机重采样,该方法具有更低的计算复杂度且能更均匀地覆盖高权重区间,能显著提高估计精度。
- 状态转移模型:模型中 25 * x / (1 + x^2) 项引入了极强的非线性,这会导致后验分布呈现非高斯特性,体现了粒子滤波相较于常规算法的优越性。
- 观测似然度计算:基于指数形式的似然函数评价粒子与实际观测的吻合程度。
使用方法- 确保计算机已安装 MATLAB 环境。
- 将代码保存为 .m 文件并在 MATLAB 命令窗口中直接运行。
- 运行结束后,系统将自动弹出包含三个子图的仿真结果窗口:
- 左上子图展示真实轨迹、含噪观测数据与 PF 估计曲线的对比。
- 右上子图展示随着时间推移,粒子群在空间中的分布演化,蓝色点阵的密集程度反映了后验概率分布。
- 下方子图展示全过程的实时估计误差,并在标题中显示最终的平均误差数值。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 依赖模块:无需额外配置工具箱,仅需基础 MATLAB 功能。