卡尔曼滤波之最优状态估计和最优状态估计算法

1. 最优状态估计

image

情景1:假设一个一个比赛中,不同队伍的自动驾驶汽车使用 GPS 定位,在 100 种不同的地形上各行驶 1 公里。每次都尽可能停在终点。然后计算每只队伍的平均最终位置。

image

第一组输了:因为虽然方差小,但是偏差大。

第二组输了:因为偏差小,但是方差大

第三组赢了:偏差和方差都小

不能仅仅依靠 GPS 数据,因为它可能有噪声。

目的是:0 偏差 + 最小的方差

可以使用 卡尔曼滤波器。

image

输入是 油门, 输出是 汽车的位置。该系统有多个状态,如下图:

image

我们简化为:

image

汽车的输入为 速度,该系统只有一个状态: 汽车的位置。我们正在测量这个状态,因此矩阵 C = 1。

image

GPS 读数有噪音,用 v 表示测量噪声,这是一个随机变量。用 w 表示 过程噪声,也是随机变量,代表风的影响或者汽车速度的变化。虽然这些随机变量不遵循 模式,但是可以使用概率论描述它们的平均属性。

假设 v 服从 0 均值,协方差 R 的高斯分布。因为是单输出系统,协方差 R 是标量,且等于 测量噪声的方差。

类似的,过程噪声也是随机的,假设 w 服从 0 均值,协方差 Q 的高斯分布。

image

因为,测量是有噪声的,因此,测量的并不能反映汽车的真实位置。如果我们知道汽车模型,我们可以将输入放到模型中来估计位置 x ^ k \hat{x}_{k} x^k,但是该估计值也不是完美的,因为还有过程噪声也是随机的。卡尔曼滤波结合 测量值 和 模型预测值 来估计汽车的位置。

image

我们使用概率密度函数来直观讨论卡尔曼滤波器的工作原理。在 初始时间 k-1 ,实际汽车位置可能在 模型估计值 x ^ k − 1 \hat{x}_{k-1} x^k1 附近的任何位置,这种不确定性由 概率密度函数描述,汽车最可能在该分布的平均值附近。在下一个时间步,估计的不确定性增大(因为:在时间步 k-1 到 k, 汽车可能经过坑洼,可能车轮打滑,因此可能前进了与 模型估计的距离不同的距离。), 用较大的方差表示。

image

除了数学模型的预测,还有另外一个信息来源:GPS 测量值。上图橙色的高斯分布表示测量的分布,方差表示测量噪声的不确定性,同样,真正的位置可能是该分布平均值的任何位置。

现在有了 预测值 和测量值,那么汽车位置的最优估计是什么?

结合这两部分信息,通过将 预测和测量的 两个概率密度函数相乘,结果也是高斯函数。该高斯的方差小于之前数学模型估计的方差,该高斯的平均值给了我们汽车位置的最优估计。

卡尔曼滤波器可以计算最优无偏差的汽车位置,且方差最小。

2. 最优状态估计算法

状态观测器:(deterministic system)

x ^ k + 1 = A x ^ k + B u k + K ( y k − C x ^ k ) \hat{x}_{k+1}=A \hat{x}_{k}+B u_{k}+K\left(y_{k}-C \hat{x}_{k}\right) x^k+1=Ax^k+Buk+K(ykCx^k)

卡尔曼滤波器:(stochastic system)

x ^ k = A x ^ k − 1 + B u k + K k ( y k − C ( A x ^ k − 1 + B u k ) ) \hat{x}_{k} = A \hat{x}_{k-1}+B u_{k}+K_{k}\left(y_{k}-C\left(A \hat{x}_{k-1}+B u_{k}\right)\right) x^k=Ax^k1+Buk+Kk(ykC(Ax^k1+Buk))

卡尔曼滤波器是一种状态观测器,但是是为 随机系统设计的。

x ^ k = A x ^ k − 1 + B u k ⏟ x ^ k − : A  Priori Estimate  + K k ( y k − C ( A x ^ k − 1 + B u k ) ) \hat{x}_{k}=\underbrace{A \hat{x}_{k-1}+B u_{k}}_{\hat{x}_{k}^{-}: A \text { Priori Estimate }}+K_{k}\left(y_{k}-C\left(A \hat{x}_{k-1}+B u_{k}\right)\right) x^k=x^k:A Priori Estimate  Ax^k1+Buk+Kk(ykC(Ax^k1+Buk))

第一步:通过建立的数学模型,使用前一个时间步的预测状态和当前的输入, 预测当前的状态。 x ^ k − \hat{x}_{k}^{-} x^k 为先验估计,因为计算它的时候没有使用当前的测量值。简化上面等式:

x ^ k = x ^ k − + K k ( y k − C x ^ k − ) \hat{x}_{k}=\hat{x}_{k}^{-}+K_{k}\left(y_{k}-C \hat{x}_{k}^{-}\right) x^k=x^k+Kk(ykCx^k)

第二步:等式的第二部分使用的是测量值( y k y_{k} yk), 代入方程来更新 先验估计, 从而得到后验估计。

x ^ k ⏞ A P o s t e r i o r i E s t i m a t e = x ^ k − ⏟ Predict  + K k ( y k − C x ^ k − ) ⏟ Update  \overset{A Posteriori Estimate}{\overbrace{\hat{x}_{k}}} =\underbrace{\hat{x}_{k}^{-}}_{\text {Predict }}+\underbrace{K_{k}\left(y_{k}-C \hat{x}_{k}^{-}\right)}_{\text {Update }} x^k APosterioriEstimate=Predict  x^k+Update  Kk(ykCx^k)

具体原理:

image

第一步:数学模型预测部分。因为系统状态可能是多个,比如位移、速度等,因为一个系统中大多数的状态信息是相互关联的。对于卡尔曼滤波器这些不同状态的关联性用协方差矩阵(covariance matrix) P 表示。

上图中下面的 P k − P_{k}^{-} Pk 计算的是 k 时刻的真实状态 x k x_{k} xk 和 k-1 时刻数学模型预测的 k 时刻的状态 x ^ k − \hat{x}_{k}^{-} x^k 之差 的协方差矩阵

Pk−=cov⁡{xk−x^k−}=cov⁡{Axk−1+Buk+wk−Ax^k−1−−Buk}=cov⁡{A(xk−1−x^k−1−)+wk}=Acov⁡{xk−1−x^k−1−}AT+cov⁡{wk}=APk−1AT+Q

这里会用到:

Cov ⁡ ( A X ) = A Cov ⁡ ( X ) A T \operatorname{Cov}(A X)=A \operatorname{Cov}(X) A^{T} Cov(AX)=ACov(X)AT

推导参考:

  1. https://www.zhihu.com/question/51082135/answer/150631891
  2. https://zhuanlan.zhihu.com/p/341440139

image

对于单状态系统,P 是状态预测值的方差。可以把它当作预测状态中的不确定性的度量,不确定性来自过程误差和预测值 x ^ k − 1 \hat{x}_{k-1} x^k1 的不确定性的影响。

image

算法的最开始,预测值 x ^ k − 1 \hat{x}_{k-1} x^k1 P k − 1 P_{k-1} Pk1 来自初始估计值。

第二步,得到 更新后的状态值 x ^ k \hat{x}_{k} x^k 和 其 误差协方差 P k P_{k} Pk。推导见上面公式2。

image

调整卡尔曼增益 K k K_k Kk 使得更新后的状态值误差 P k P_{k} Pk 最小。

image

假设上面条表示估算值 x ^ k \hat{x}_{k} x^k 的计算,通过调整 卡尔曼增益 确定测量值和模型预测值对计算 x ^ k \hat{x}_{k} x^k 的影响。

image

如果测量误差很小,那么测量值更可靠,则应对 x ^ k \hat{x}_{k} x^k 的计算共享更大。

image

相反,如果模型预测值的误差很小,则模型预测值更可靠,则 x ^ k \hat{x}_{k} x^k 的计算更多的取决于 模型预测值。

以两种极端情况为例:

image

image

情况1: 假设 测量误差的协方差 R 趋近于 0。我们的上面描述的系统中 C=1。因此,计算结果只取决于 测量值。

image

image

情况2: 如果预测误差协方差趋近于 0。则卡尔曼增益为 0。因此,计算结果只取决于 模型预测值。

image

卡尔曼滤波器只需要知道 模型预测状态值 和 前一个时间步以及当前测量误差协方差矩阵。因此 卡尔曼滤波器是递归的。

image

卡尔曼滤波器 也被称为传感器融合算法。因此可以增加另外一个数据源,比如 IMU。如果有两个测量值 y。K 和 C 的矩阵维度将如上图变化。

image

将三个概率密度函数相乘来找到汽车位置的最优估计值。

以上讨论都是针对线性系统而言。下面将讨论非线性系统如何使用 卡尔曼滤波器。

参考:

如何通俗并尽可能详细地解释卡尔曼滤波?

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
卡尔曼滤波是一种基于状态空间模型的最优估计算法,主要用于系统状态估计和预测。而AR模型是一种自回归模型,用于描述时间序列数据的相关性和趋势。 对于一个四阶AR模型,其表达式可以表示为: x(t) = a1*x(t-1) + a2*x(t-2) + a3*x(t-3) + a4*x(t-4) + w(t) 其中,x(t)表示时间t的观测值,w(t)表示噪声项,a1~a4为待估计的权值。 卡尔曼滤波的思想是通过观测数据和系统模型的预测,不断地进行状态估计和修正。在估计四阶AR模型的最优权值时,我们可以将其转化为一个状态空间模型,然后使用卡尔曼滤波算法进行估计。 首先,在状态空间模型中,我们可以定义一个4维状态向量x(k)=[x(k), x(k-1), x(k-2), x(k-3)],表示当前时刻和过去三个时刻的观测值。另外,我们还可以定义一个4维过程噪声向量v(k)=[w(k), w(k-1), w(k-2), w(k-3)],表示噪声项。 然后,我们可以建立一个状态转移方程,描述状态向量在时间上的变化: x(k) = F*x(k-1) + v(k) 其中,F为状态转移矩阵,由权值a1~a4确定。 接着,我们可以得到观测方程,用于连接状态向量和观测数据: z(k) = H*x(k) + n(k) 其中,z(k)表示观测值,H为观测矩阵。n(k)表示观测噪声。 最后,通过卡尔曼滤波算法,可以根据观测数据和系统模型,递归地进行状态估计和修正。具体步骤包括预测步骤、更新步骤和修正步骤。 预测步骤中,利用状态转移方程和动态模型,根据上一时刻的估计值,预测当前时刻的状态和协方差。 更新步骤中,通过观测方程,将观测数据与预测值进行比较,得到更新后的状态和协方差。 修正步骤中,根据更新后的状态和协方差,计算最优的权值a1~a4。 通过以上步骤,我们可以估计最优的权值,从而实现对四阶AR模型的最优估计。这样,我们可以利用卡尔曼滤波算法对时间序列数据进行预测和分析,提高数据处理的效果和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理心炼丹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值