一维离散卡尔曼滤波算法入门教程
项目介绍
本项目是一个专为初学者设计的教学资源,旨在通过 MATLAB 语言实现一套最简的一维离散卡尔曼滤波(Kalman Filter)算法。该程序针对静态物理量(如稳定的电压值、恒定的温度或静态位置)进行模拟,展示了如何通过递归计算从含有随机噪声的传感器观测数据中提取出精确的系统状态。它是自动控制理论、信号处理以及状态估计领域的入门级参考模板。
功能特性
- 递归估算演示:完整展示了卡尔曼滤波五个核心数学公式的循环迭代逻辑。
- 环境模拟系统:内置高斯随机噪声生成器,可模拟真实场景中的过程噪声和测量噪声。
- 参数可视化:除了状态轨迹对比外,还提供了误差协方差和卡尔曼增益的演变曲线,便于观察算法收敛性。
- 高性能对比分析:自动统计并输出测量数据与滤波估计值的平均误差对比,量化滤波效果。
- 易读性设计:代码内包含极其详尽的中文注释,解释了每一个数学变量及其在物理世界中的对应关系。
系统要求
- 软件环境:MATLAB R2016a 或更高版本(兼容所有标准 MATLAB 运行环境)。
- 附加工具箱:无需任何额外工具箱,基于 MATLAB 基础语言实现。
使用方法
- 将脚本文件置于 MATLAB 当前工作路径下。
- 直接运行该脚本,程序将自动执行仿真、计算并弹出可视化窗口。
- 可以在代码的初始化区域修改过程噪声协方差 Q 和测量噪声协方差 R 的值,运行以观察滤波器收敛速度与平滑度之间的平衡。
实现逻辑说明
程序按照典型的“预测-校正”架构分为以下五个关键模块:
- 模拟环境构建:设置一个固定的物理真实值。为了模拟现实情况,程序首先生成真实状态序列(考虑微小的系统波动),然后在该基础上叠加明显的测量噪声,形成模拟传感器的原始输出。
- 滤波器参数初始化:定义状态转移矩阵 A 和观测矩阵 H。在一维静态模型中,这两者均简化为 1。同时初始化过程噪声协方差 Q、测量噪声协方差 R、初始猜测值及其对应的误差协方差 P。
- 预测循环(Prediction Step):
- 计算先验状态估计:利用上一时刻的估计值乘以状态转移矩阵。
- 计算先验误差协方差:预测当前时刻的估计误差范围,受预测模型不确定性(Q)的影响。
- 校正循环(Measurement Update Step):
- 计算卡尔曼增益 K:根据当前预测误差与测量误差的比例,自适应地决定增益大小。
- 状态更新:利用传感器测得的实时数据对预测值进行修正。
- 误差协方差更新:更新当前的最优估计误差,为下一时刻的递归做准备。
- 结果分析与绘图:将整个递归过程的历史记录保存到内存,并在循环结束后通过图表直观展示预测效果。
关键函数与实现细节分析
- 状态转移与观测逻辑:由于目标是静态量,程序通过设置 $A=1$ 和 $H=1$ 模拟了最简的线性系统模型,这使得初学者能够排除复杂矩阵运算的干扰,专注于核心算法逻辑。
- 卡尔曼增益 $K$ 的动态调整:该参数是滤波器的核心。当测量噪声 $R$ 较大或预测误差 $P$ 较小时,$K$ 会变小,系统更倾向于信任预测值;反之则倾向于信任传感器测量值。代码中的曲线图直观地展示了 $K$ 逐渐趋于稳定的过程。
- 误差协方差 $P$ 的收敛性:程序展示了随着观测数据的增加,初始较大的不确定性 $P$ 如何迅速收敛到平稳状态。这体现了卡尔曼滤波器不仅能估计数值,还能量化估计的“自信程度”。
- 性能评估指标:程序最后通过比较测量数据与真实值的平均绝对误差(MAE)以及滤波估计与真实值的 MAE,量化地证明了算法在抑制硬件噪声方面的卓越表现。