基于误差校正算法改进的粒子滤波器
项目介绍
本项目实现了一种基于误差校正机制改进的粒子滤波器(Particle Filter, PF),专门用于解决非线性系统的状态估计问题。针对传统粒子滤波器在处理高度非线性模型或非高斯噪声时容易出现的粒子退化及滤波发散现象,本项目通过引入实时误差校正增益,利用观测残差对粒子分布进行反馈调节。该算法能够有效将粒子群引导至高似然概率区域,在目标状态发生突变或环境干扰较大的情况下,依然能保持较高的跟踪精度和鲁棒性。
功能特性
- 增强型粒子分布调整:通过观测残差实时干预粒子采样,抑制样本贫化。
- 高度非线性支持:系统状态方程包含复杂的非线性分式与三角函数波动,观测方程采用非线性平方模型。
- 系统重采样机制:内置高效的系统重采样算法,当粒子有效性低于设定阈值(N/2)时自动触发,维持粒子多样性。
- 多维度可视化报告:实时生成状态追踪曲线、绝对误差分布柱状图、粒子群演化动态散点图以及传感器测量值趋势图。
- 性能统计分析:仿真结束后自动计算并输出均方根误差(RMSE)与平均绝对误差(MAE)。
使用方法
- 环境准备:确保计算机已安装 MATLAB R2016b 或更高版本。
- 运行仿真:打开主程序文件,点击“运行”按钮。
- 参数调节:用户可根据需求在程序顶部的参数设置区域修改粒子数量(N)、过程噪声(Q)、测量噪声(R)或核心的校正增益(Gain_EC)。
- 结果查看:程序将自动弹出仿真图窗,并在命令行窗口输出详细的仿真分析报告。
系统要求
- 软件环境:MATLAB R2016b 及以上版本。
- 硬件要求:标准桌面电脑配置,无需特殊计算加速设备。
- 依赖说明:基于 MATLAB 基础库实现,无需安装额外的工具箱(如 Control System Toolbox 等)。
实现逻辑说明
仿真程序遵循以下核心逻辑流程:
- 环境初始化:通过固定随机种子保证结果可重复性,设定仿真时长为 50 个周期。
- 模拟真实轨迹:利用预定义的非线性状态转移方程 $f(x, k)$ 生成真实状态序列,并通过观测方程 $h(x)$ 疊加高斯白噪声生成传感器测量值。
- 粒子滤波核心循环:
-
预测阶段:根据状态方程对每个粒子进行一次非线性演化,并叠加过程噪声。
-
误差校正阶段(改进环节):计算当前时刻传感器的实际测量值与每个粒子预测观测值之间的偏差(残差),结合增益系数(Gain_EC)对粒子的位置进行实时修正,使粒子向高概率区间靠拢。
-
权重更新:计算修正后粒子在当前观测下的高斯似然概率,作为其权重。
-
权重归一化:确保所有粒子权重之和为 1。
-
自适应重采样:通过检测有效粒子数,在必要时执行系统重采样逻辑,即利用累积概率分布分布进行均匀采样。
- 状态输出:计算粒子群的加权平均值作为当前时刻的最优状态估计。
- 绘图与评估:对比真实值与估计值,计算误差指标并在图表中呈现。
关键算法与实现细节
- 误差校正算子:其实现公式为 $particles = particles + Gain_EC times (z_meas - z_pred)$。这一步骤在权重计算之前介入,通过物理上的分布干预,减少了对大样本量的依赖,即使在粒子数较少(如 100 个)时也能获得稳定的收敛效果。
- 系统重采样算法:不同于随机重采样,系统重采样通过在归一化累积权重轴上以固定步长 $1/N$ 进行扫描,保证了权重大、位置优的粒子能被更均匀地复制,极大地降低了随机采样带来的方差。
- 非线性动态模型:状态转移函数 $0.5x + 25x/(1+x^2) + 8cos(1.2k)$ 具有强非线性和时变波动特性,能够充分验证改进型粒子滤波器在复杂动态环境下的性能。
- 可视化设计:
-
状态追踪图:清晰展示估计值对真实值的跟随能力。
-
粒子演化图:通过半透明散点展示 100 个粒子随时间步推移的分布宽度,直观体现算法对粒子退化的抑制作用。
-
误差报告:通过 RMSE 这一量化指标直观评估算法精度。