Rebel 工具包 (Recursive Bayesian Estimation Library)
Rebel 是一个专为非线性系统状态估计设计的 MATLAB 仿真工具包。它深度集成了递归贝叶斯估计框架下的多种主流算法,旨在为研究和开发先进的导航、跟踪及定位系统提供有力的辅助支持。该工具包通过高度模块化的设计,实现了对复杂非线性环境的高精度状态捕捉。
项目核心特性
- 多算法集成:包含无迹卡尔曼滤波(UKF)、中心差分卡尔曼滤波(CDKF)以及粒子滤波(PF),涵盖了从确定性采样到随机性采样的多种非线性处理技术。
- 高度非线性支持:专门针对雷达跟踪等具有强非线性观测模型(极坐标变换)的系统进行优化。
- 标准化评价体系:内置均方根误差(RMSE)计算功能,并能自动生成轨迹对比图与误差随时间演化曲线。
- 参数化配置:支持对所有滤波器关键参数(如 Sigma 点比例因子、粒子数量、噪声协方差等)进行精细化调整。
系统要求
- MATLAB R2016b 或更高版本。
- Statistics and Machine Learning Toolbox(用于处理多元正态分布采样)。
实现逻辑与功能流程
代码通过一个完整的仿真回路展示了不同滤波算法在雷达跟踪场景下的表现,其具体逻辑如下:
- 环境与模型初始化:
* 定义了匀速直线运动(CV)模型作为系统的状态转移逻辑。
* 设置状态向量包含二维位置与二维速度(x, vx, y, vy)。
* 配置雷达观测模型,将笛卡尔坐标系下的状态映射为距离和角度观测值。
* 初始化过程噪声协方差矩阵(基于时间步长 dt 构造)和测量噪声协方差矩阵(固定传感器精度)。
- 算法参数自定义:
*
UKF:配置 Van der Merwe 比例因子(alpha, beta, kappa),控制 Sigma 点的分布。
*
CDKF:配置比例因子 h,用于中心差分公式的增量控制。
*
PF:设定 500 个初始化粒子,使用状态预估值加上初始协方差的随机扰动进行生成。
- 递归仿真主循环:
*
真值生成:根据离散化状态转移矩阵推进真实轨迹,并在每一步叠加高斯过程噪声。
*
观测生成:模拟雷达传感器,计算包含高斯噪声的距离和方位角。
*
并行滤波执行:在每个时间步,独立的滤波器分别处理相同的观测数据。
*
数据存储:记录每种算法在每一时刻的状态估计值,用于后续统计分析。
- 性能统计与评估:
* 计算各算法在位置分量上的累计 RMSE,作为精度评价的核心指标。
* 记录总运行时间,评估计算效率。
- 结果可视化:
*
轨迹图:在二维平面上对比真值轨迹与 UKF、CDKF、PF 估计轨迹的吻合度。
*
误差趋势图:绘制不同算法在仿真全过程中的位置误差波动情况。
关键函数与算法实现细节
1. 无迹卡尔曼滤波实现细节
算法核心在于 Unscented Transform(UT)。通过计算 2n+1 个 Sigma 点及其对应的均值权重(W_m)和协方差权重(W_c),将非线性变换后的统计特性准确传递。代码中实现了预测步的 Sigma 点传播和更新步的重采样机制,确保在观测模型(从位置到距离/角度)发生强非线性偏转时仍能保持二阶以上的均值和协方差精度。
2. 中心差分卡尔曼滤波实现细节
该算法使用中心差分代替 Taylor 级数展开,其权重系数通过比例因子 h 确定。相较于 UKF,其实现逻辑中利用了对称差分公式来近似协方差,并在更新步中采用了基于 Cholesky 分解的数值稳定性改进方案。
3. 粒子滤波实现细节
采用了序贯重要性采样(SIS)架构:
- 采样/预测:粒子按系统动力学模型进行传播。
- 权重更新:利用高斯似然函数,根据当前观测值与粒子预测观测值之间的创新(Innovation)来计算每个粒子的权重。
- 归一化与估计:权重归一化后,通过所有粒子的加权平均获得状态期望值。
- 重采样机制:引入系统化重采样(Systematic Resampling)策略,当有效粒子采样规模(Nept)低于设定阈值(总数的一半)时触发,有效克服粒子枯竭问题。
使用方法
- 打开 MATLAB 并将工作路径切换至项目根目录。
- 在命令行窗口运行主仿真程序。
- 程序将依次执行 UKF、CDKF 和 PF 算法。
- 仿真结束后,MATLAB 会自动弹出两个分析窗口:
* 窗口 1 显示目标的二维运动轨迹对比。
* 窗口 2 显示随时间变化的误差对比曲线及最终 RMSE 指标。
- 控制台将输出仿真性能报告,包含运行时间和各算法的具体误差数值。