卡尔曼滤波器 Matlab

2025 年 7 月 28 日 | 阅读 7 分钟

Kalman 滤波器 MATLAB 简介

从一组带噪测量中估计系统状态的一种方法是 Kalman 滤波器算法。当系统处理的是混乱、有噪声或不完整的数据时,它尤其有用。

该滤波器的操作方法是,在每个时间步长,使用对状态及其相应不确定性的预测来迭代估计系统状态,然后用新数据更新估计。导航、信号处理和控制系统等众多行业都广泛使用它。

在 MATLAB 中理解和实现 Kalman 滤波器

Kalman 滤波器是一种强大而灵活的工具,在信号处理、导航、控制系统等领域都有应用。当您需要使用带噪测量来估计动态系统的状态时,它特别有用。本文涵盖了 Kalman 滤波器的基本原理,并提供了在 MATLAB 中使用它的详细教程。

Kalman 滤波器是一种递归状态空间估计技术,由 Rudolf E. Kalman 在 20 世纪 60 年代开发。它经常被使用,尤其是在处理带噪或不完美数据时,用于跟踪和估计动态系统的状态。Kalman 滤波器的主要目标是通过融合新观测值和系统先验状态估计来估计系统的当前状态。

Kalman 滤波器在两个基本假设下运行

系统是线性的,这意味着它的动态可以用线性方程来建模。

系统中的噪声,无论是过程噪声还是测量噪声,都遵循高斯分布。实际上,虽然 Kalman 滤波器在线性系统上效果最好,但通过扩展 Kalman 滤波器 (EKF) 和无迹 Kalman 滤波器 (UKF) 等变体,它可以扩展到处理非线性系统。

Kalman 滤波器可以分解为两个基本步骤

“预测和校正”

这些步骤被迭代执行,以估计系统的当前状态。

预报

  • 根据系统动力学和估计的先验状态,预测下一个状态。
  • 估计估计误差的协方差。
  • 由于它根据系统动力学预测状态及其不确定性,因此预测步骤至关重要。

更正

  • 从设备获取新测量值。
  • 为了找到 Kalman 增益,将测量值与预期状态进行比较。
  • 将 Kalman 增益应用于状态估计更新。
  • 重新加载估计误差的协方差。
  • 校正步骤的目的是通过使用新测量值来改进状态估计。

Kalman 滤波器方程

要在 MATLAB 中实现 Kalman 滤波器,理解基本方程至关重要

状态预测

状态预测方程

xk =A⋅xk-1 +B-uk +wk

其中

xk: k 时刻的预测状态

A: 状态转移矩阵

xk-1: k-1 时刻的先前状态估计

B: 控制输入矩阵

uk: k 时刻的控制输入

wk: k 时刻的过程噪声

协方差预测方程

在这种情况下,状态向量由 x 表示,状态转移矩阵由 A 表示,控制输入矩阵由 B 表示(您是控制输入),过程噪声协方差矩阵由 Q 表示,状态估计协方差矩阵由 P 表示。

Pk =A⋅Pk-1 ⋅AT+Q

其中

Pk: k 时刻状态的预期协方差

A: 状态转移矩阵

Pk-1: k-1 时刻状态的先验协方差。

Q: 过程噪声协方差矩阵

通过考虑系统动力学和过程噪声,该方程预测了下一时间步状态估计的协方差。

状态校正

Kalman 增益方程

分配给新测量值的权重在调整状态估计中起着决定性作用。它在分配新测量值和预测的影响方面起着关键作用。

Kk =Pk ⋅HT⋅(H⋅Pk ⋅HT+R)-1

KK: k 时刻的 Kalman 增益

Pk: k 时刻状态的预期协方差

H: 测量矩阵

R: 测量噪声协方差矩阵

通过将预测协方差与测量矩阵的转置和创新协方差(括号内的项)的逆相乘来计算 Kalman 增益。它表示系统对新测量的敏感度。

状态校正方程

xk =xk +Kk ⋅(zk -H⋅xk )

Xk: k 时刻的校正状态估计

Kk : k 时刻的 Kalman 增益

zk: k 时刻的实际测量值

H: 测量矩阵

协方差校正方程

在这些方程中,K 是 Kalman 增益,H 是测量矩阵,R 是测量噪声协方差矩阵,z 是测量向量。

Pk =(I-Kk ⋅H)⋅Pk

Pk: k 时刻状态的校正协方差

Kk : k 时刻的 Kalman 增益

H: 测量矩阵

I: 单位矩阵

Kalman 增益: Kalman 增益的计算考虑了测量值(H⋅Pk ⋅HT+R)和预期状态(Pk)的不确定性。Kalman 增益越小,表明对新测量的依赖性越小,预测的不确定性相对于测量值的不确定性就越大。

状态校正: 实际测量值 (zk) 与预期测量值 (H⋅xk) 之间的差值是创新,它用于根据创新和 Kalman 增益来修改预测状态 (xk)。

协方差校正: 为了说明校正状态估计的准确性,使用 Kalman 增益修改预测协方差 (Pk)。表达式 I-Kk ⋅H 确保了协方差的正确缩放。

示例

输出

Kalman Filter Matlab
  • 即使面对噪声和不确定性,Kalman 滤波器也被证明是确定动态系统状态的有力工具。
  • 跟踪运动物体和估计控制系统中的系统状态只是 Kalman 滤波器可以实现的众多应用中的两种,通过理解预测和校正过程以及相应的方程。通过实践和微调,您可以充分利用此可变估计技术的潜力。

优点和缺点

Kalman 滤波器是一种递归技术,它使用一系列带噪观测值来估计线性动态系统的状态。它广泛用于航海、控制系统和信号处理等许多不同领域。

优点

最优估计: 在高斯噪声存在的情况下,Kalman 滤波器可提供线性动态系统状态的最佳估计。它最小化了估计的均方误差。

适应性: Kalman 滤波器可以处理随时间变化的参数,并且足够灵活,可以与各种系统配合使用。根据新的测量值和系统动力学,它可以修改其估计。

效率: Kalman 滤波器在计算上是高效的,使其适用于实时应用。MATLAB 提供了 Kalman 滤波的内置函数,易于实现和使用。

处理传感器噪声: Kalman 滤波器旨在处理带噪的测量值。它有效地结合了来自系统动力学(预测模型)和带噪测量值的信息,以提供更准确的状态估计。

递归性质: 该滤波器是递归的,这意味着它基于最新的测量值和预测来更新其估计。这使其非常适合在线或实时应用。

不可观测变量的状态估计: Kalman 滤波器可以估计未直接测量的变量的状态。它可以根据可用测量值推断这些不可观测变量的值。

缺点

线性假设: 线性动态系统是 Kalman 滤波器的目标应用。如果系统高度非线性,则可能需要扩展 Kalman 滤波器 (EKF) 或无迹 Kalman 滤波器 (UKF) 才能使滤波器正常工作。

对模型不匹配的敏感性: 系统模型的准确性会影响 Kalman 滤波器的性能。如果模型与实际系统之间存在显著差异,则滤波器可能会产生次优结果。

噪声假设: Kalman 滤波器在系统中的噪声是高斯的假设下运行。实际上,如果噪声与高斯分布差异很大,滤波器的效率可能会受到影响。

非专业人士的复杂性: 对于需要更深入了解底层数学概念的人来说,实现和微调 Kalman 滤波器可能会很困难。用户可能需要对测量模型和系统动力学有扎实的掌握。

内存要求: 在内存有限的应用中,Kalman 滤波器可能需要大量存储空间来维护协方差矩阵和其他变量。

初始化敏感性: 初始条件和协方差值可能对滤波器的性能产生显著影响。选择合适的初始值需要对系统有一定的了解,并且可能涉及一些试错。