mean square & kalman filter 最小二乘法到卡尔曼滤波
最小二乘法是解决线性、非线性拟合问题的一般方法, 基于最朴素的假设(无偏估计、最小化误差)推导得到, 通常表现为代价函数的形式, 即统计样本的误差平方和(或均).
对于一个估计问题, 由于噪声的存在, 我们希望得到一个良好的估计, 满足: 无偏估计(均值期望一致)、均方差函数最小.
假设引入
假设一个线性时不变系统模型:
x(k+1)=Ax(k)+Bu(k)(1)x(k+1) = Ax(k) + Bu(k) \tag{1}x(k+1)=Ax(k)+Bu(k)(1)
y(k)=Hx(k)(2)y(k) = Hx(k) \tag{2}y(k)=Hx(k)(2)
x(k)∈Rnx(k) \in R^nx(k)∈Rn 是系统k时刻的状态向量, u(k)∈Rmu(k)\in R^mu(k)∈Rm是系统的输入向量, y(k)∈Rly(k) \in R^ly(k)∈Rl是系统的输出向量. 方程(1)称为状态方程, 是系统内部状态的递推公式, 方程(2)称为测量方程, 是外界对系统状态向量的测量结果.
对系统k时刻状态的估计用x^(k)\hat{x}(k)x^(k)表示, 误差e(k)=x(k)−x^(k)e(k) = x(k) - \hat{x}(k)e(k)=x(k)−x^(k)
观测器示例
现在假设系统的初始状态x(0)未知, 为了获取k时刻的系统状态向量信息, 假定x^(0)\hat{x}(0)x^(0), 我们可以使用如下的观测器:
x^(k+1)=Ax^(k)+Bu(k)(3)\hat{x}(k+1)=A\hat{x}(k)+Bu(k) \tag{3}x^(k+1)=Ax^(k)+Bu(k)(3)
或
x^(k+1)=Ax^(k)+Bu(k)+K(y(k)−Hx^(k))(4)\hat{x}(k+1)=A\hat{x}(k)+Bu(k) + K(y(k)-H\hat{x}(k)) \tag{4}x^(k+1)=Ax^(k)+Bu(k)+K(y(k)−Hx^(k))(4)
公式(4)称渐近观测器.
观测器(3)的状态误差为: e1(k+1)=Ae1(k)e_1(k+1) = Ae_1(k)e1(k+1)=Ae1(k)
观测器(4)的状态误差为: e2(k+1)=(A−KH)e2(k)e_2(k+1) = (A-KH)e_2(k)e2(k+1)=(A−KH)e2(k)
上述观测器的观测性能取决于A、(A-KH)是否是渐近稳定的.
而对于任意LTS系统, 如果(A, H)是可观测的, 那么满足渐近稳定的K是一定存在的. (Kailath,1980)
卡尔曼滤波器的意义
当系统可观测且测量没有噪声时, 渐近观测器是一个较好的观测器, 现在考虑系统处理噪声w(k)与测量噪声v(k):
x(k+1)=Ax(k)+Bu(k)+w(k)(5)x(k+1) = Ax(k) + Bu(k) + w(k) \tag{5}x(k+1)=Ax(k)+Bu(k)+w(k)(5)
y(k)=Hx(k)+v(k)(6)y(k) = Hx(k) + v(k)\tag{6}y(k)=Hx(k)+v(k)(6)
为了方便推导, 一般假设w(k)、v(k)是零均值的高斯噪声, 且w(k)与v(k)与系统状态向量相互独立.
即:
E[w(k)]=E[v(k)]=0E[w(k)w(k)T]=QE[v(k)v(k)T]=RE[w(k)v(k)T]=0
E[w(k)] = E[v(k)] = 0 \\
E[w(k)w(k)^T] = Q \\
E[v(k)v(k)^T] = R \\
E[w(k)v(k)^T] = 0
E[w(k)]=E[v(k)]=0E[w(k)w(k)T]=QE[v(k)v(k)T]=RE[w(k)v(k)T]=0
由于噪声的存在, 随着时间的累计, 观测器的误差有可能越来越大, 不确定度增大, 为此基于噪声存在的高性能滤波器----卡尔曼滤波器应运而生.
定义说明
x^(k∣k−1)\hat{x}(k|k-1)x^(k∣k−1): 由系统的状态方程和k-1时刻估计量预测得到,称预测项.
x^(k∣k)\hat{x}(k|k)x^(k∣k): 由观测器滤波后得到,称估计项.
x^(k∣k−1)=Ax^(k−1∣k−1)+Bu(k−1)\hat{x}(k|k-1) = A\hat{x}(k-1|k-1)+Bu(k-1)x^(k∣k−1)=Ax^(k−1∣k−1)+Bu(k−1)
x^(k∣k)=x^(k∣k−1)+K(y(k)−Hx^(k∣k−1))\hat{x}(k|k) = \hat{x}(k|k-1)+K(y(k)-H\hat{x}(k|k-1))x^(k∣k)=x^(k∣k−1)+K(y(k)−Hx^(k∣k−1)) , 其中K称为卡尔曼增益.
e(k∣k−1)=x(k)−x^(k∣k−1)e(k|k-1) = x(k)-\hat{x}(k|k-1)e(k∣k−1)=x(k)−x^(k∣k−1)称为先验误差
e(k∣k)=x(k)−x^(k∣k)e(k|k) = x(k)-\hat{x}(k|k)e(k∣k)=x(k)−x^(k∣k)称为后验误差
对于先验估计, 有: E[x(k)]=E[x^(k∣k−1)]E[x(k)] = E[\hat{x}(k|k-1)]E[x(k)]=E[x^(k∣k−1)]
P(k∣k−1)=cov(e(k∣k−1))=E[e(k∣k−1)e(k∣k−1)T]P(k|k-1) = cov(e(k|k-1)) = E[e(k|k-1)e(k|k-1)^T]P(k∣k−1)=cov(e(k∣k−1))=E[e(k∣k−1)e(k∣k−1)T]称为先验估计误差协方差
P(k∣k)=cov(e(k∣k))=E[e(k∣k)e(k∣k)T]P(k|k) = cov(e(k|k)) = E[e(k|k)e(k|k)^T]P(k∣k)=cov(e(k∣k))=E[e(k∣k)e(k∣k)T]称为后验估计误差协方差
给定u(k)、y(k)和x^(k∣k−1)\hat{x}(k|k-1)x^(k∣k−1)下确定x(k)的线性估计.
我们希望状态估计的无偏性首要的: E[x^(k∣k)]=E[x(k)]E[\hat{x}(k|k)] = E[x(k)]E[x^(k∣k)]=E[x(k)]
同时具有最小均方误差: min tr(P(k∣k))min \ tr(P(k|k))min tr(P(k∣k)) (均方误差和是对应估计误差协方差矩阵的对角线之和, 即矩阵的迹)
补充一下与迹有关的矩阵求导公式:
tr(AT)=tr(A) tr(A^T) = tr(A) tr(AT)=tr(A)
∂tr(AB)A=BT,∂tr(BA)A=BT \frac{\partial tr(AB)}{A} = B^T , \frac{\partial tr(BA)}{A} = B^T A∂tr(AB)=BT,A∂tr(BA)=BT
∂tr(ABAT)A=ABT+AB=(如果B为对称阵)2AB \frac{\partial tr(ABA^T)}{A} = AB^T + AB = (如果B为对称阵) 2ABA∂tr(ABAT)=ABT+AB=(如果B为对称阵)2AB
由于卡尔曼滤波器是递推滤波器, 实际运行时由"预测->更新->预测->更新"的不断循环, 所以我们需要解决的问题有几个:
- ① 最佳卡尔曼增益K是多少
- ② P(k|k-1)、P(k|k)如何更新
首先考察后验误差e(k∣k)e(k|k)e(k∣k) :
e(k∣k)=x(k)−x^(k∣k)=x(k)−x^(k∣k−1)−K(y(k)−Hx^(k∣k−1))=x(k)−x^(k∣k−1)−K(Hx(k)+v(k)−Hx^(k∣k−1))=(I−KH)[x(k)−x^(k∣k−1)]−Kv(k)(6)
\begin{aligned}
e(k|k) &= x(k)-\hat{x}(k|k) \\
&= x(k)- \hat{x}(k|k-1)-K(y(k)-H\hat{x}(k|k-1)) \\
&= x(k)- \hat{x}(k|k-1)-K(Hx(k)+v(k)-H\hat{x}(k|k-1)) \\
&= (I-KH)[x(k)-\hat{x}(k|k-1)] - Kv(k) \\ \tag{6}
\end{aligned}
e(k∣k)=x(k)−x^(k∣k)=x(k)−x^(k∣k−1)−K(y(k)−Hx^(k∣k−1))=x(k)−x^(k∣k−1)−K(Hx(k)+v(k)−Hx^(k∣k−1))=(I−KH)[x(k)−x^(k∣k−1)]−Kv(k)(6)
从而, 可以得到后验误差协方差:
P(k∣k)=E(e(k∣k)e(k∣k)T)=(I−KH)E[ [x(k)−x^(k∣k−1)][x(k)−x^(k∣k−1)]T ](I−KH)T+KE[v(k)v(k)T]KT=(I−KH)P(k∣k−1)(I−KH)T+KRKT=P(k∣k−1)−KHP(k∣k−1)−P(k∣k−1)HTKT+K[ HP(k∣k−1)HT+R ]KT(7)
\begin{aligned}
P(k|k) &= E(e(k|k)e(k|k)^T) \\
&= (I-KH)E[\ [x(k)-\hat{x}(k|k-1)][x(k)-\hat{x}(k|k-1)]^T \ ](I-KH)^T + KE[v(k)v(k)^T]K^T \\
&= (I-KH)P(k|k-1)(I-KH)^T + KRK^T \\
&= P(k|k-1) - KHP(k|k-1) - P(k|k-1)H^TK^T + K[\ HP(k|k-1)H^T + R \ ]K^T \\ \tag{7}
\end{aligned}
P(k∣k)=E(e(k∣k)e(k∣k)T)=(I−KH)E[ [x(k)−x^(k∣k−1)][x(k)−x^(k∣k−1)]T ](I−KH)T+KE[v(k)v(k)T]KT=(I−KH)P(k∣k−1)(I−KH)T+KRKT=P(k∣k−1)−KHP(k∣k−1)−P(k∣k−1)HTKT+K[ HP(k∣k−1)HT+R ]KT(7)
由最小化P(k|k)的迹(前面提到, 后验误差协方差的迹为均方误差和), 求导:
∂(P(k∣k))K=−2P(k∣k−1)HT+2K[HP(k∣k−1)HT+R]
\frac{\partial(P(k|k))}{K} = -2P(k|k-1)H^T + 2K[HP(k|k-1)H^T+R] \\
K∂(P(k∣k))=−2P(k∣k−1)HT+2K[HP(k∣k−1)HT+R]
令偏导为0, 得到:
K=P(k∣k−1)HT∗[HP(k∣k−1)HT+R]−1(8) K=P(k|k-1)H^T * [HP(k|k-1)H^T+R]^{-1} \tag{8} K=P(k∣k−1)HT∗[HP(k∣k−1)HT+R]−1(8)
公式(8)称为最佳卡尔曼增益公式.
代入公式(7), 得到P(k|k)的更新公式:
P(k∣k)=(I−KH)P(k∣k−1)(9)
P(k|k) = (I-KH)P(k|k-1) \tag{9}
P(k∣k)=(I−KH)P(k∣k−1)(9)
还缺一个P(k|k-1)的更新公式, 考察先验误差e(k+1|k):
e(k+1∣k)=x(k+1)−x^(k+1∣k)=Ax(k)+Bu(k)+w(k)−(Ax^(k∣k)+Bu(k))=A[x(k)−x^(k∣k)]+w(k)=Ae(k∣k)+w(k)(10)
\begin{aligned}
e(k+1|k) &= x(k+1)-\hat{x}(k+1|k) \\
&= Ax(k) + Bu(k) + w(k) - (A\hat{x}(k|k)+Bu(k)) \\
&= A[x(k)- \hat{x}(k|k)] + w(k) \\
&= Ae(k|k) + w(k) \\ \tag{10}
\end{aligned}
e(k+1∣k)=x(k+1)−x^(k+1∣k)=Ax(k)+Bu(k)+w(k)−(Ax^(k∣k)+Bu(k))=A[x(k)−x^(k∣k)]+w(k)=Ae(k∣k)+w(k)(10)
P(k∣k−1)=E[e(k∣k−1)e(k∣k−1)T]=E[(Ae(k−1∣k−1)+w(k−1))(Ae(k−1∣k−1)+w(k−1))T]=E[Ae(k−1∣k−1)e(k−1∣k−1)TAT+Ae(k−1∣k−1)w(k−1)T+w(k−1)e(k−1∣k−1)TAT+w(k−1)w(k−1)T]=AE[e(k−1∣k−1)e(k−1∣k−1)T]AT+E[w(k−1)w(k−1)T]=AP(k−1∣k−1)AT+Q(11) \begin{aligned} P(k|k-1) &= E[e(k|k-1)e(k|k-1)^T] \\ &= E[(Ae(k-1|k-1) + w(k-1))(Ae(k-1|k-1) + w(k-1))^T] \\ &= E[Ae(k-1|k-1)e(k-1|k-1)^TA^T+Ae(k-1|k-1)w(k-1)^T+w(k-1)e(k-1|k-1)^TA^T+w(k-1)w(k-1)^T] \\ &= AE[e(k-1|k-1)e(k-1|k-1)^T]A^T + E[w(k-1)w(k-1)^T] \\ &= AP(k-1|k-1)A^T + Q \\ \tag{11} \end{aligned} P(k∣k−1)=E[e(k∣k−1)e(k∣k−1)T]=E[(Ae(k−1∣k−1)+w(k−1))(Ae(k−1∣k−1)+w(k−1))T]=E[Ae(k−1∣k−1)e(k−1∣k−1)TAT+Ae(k−1∣k−1)w(k−1)T+w(k−1)e(k−1∣k−1)TAT+w(k−1)w(k−1)T]=AE[e(k−1∣k−1)e(k−1∣k−1)T]AT+E[w(k−1)w(k−1)T]=AP(k−1∣k−1)AT+Q(11)
至此,我们解决了卡尔曼滤波器依赖的三个黄金公式: 公式(8)、(9)、(11).
一个规范的卡尔曼过程如下:
- 给定初始状态估计 x^(0∣0)\hat{x}(0|0)x^(0∣0),初始误差协方差P(0∣0)P(0|0)P(0∣0) 系统处理噪声方差Q, 测量噪声方差R
- 估计k时刻的状态: x^(k∣k−1)=Ax^(k−1∣k−1)+Bu(k)\hat{x}(k|k-1) = A\hat{x}(k-1|k-1) + Bu(k)x^(k∣k−1)=Ax^(k−1∣k−1)+Bu(k)
- 更新先验误差协方差: P(k∣k−1)=AP(k−1∣k−1)AT+QP(k|k-1)=AP(k-1|k-1)A^T + QP(k∣k−1)=AP(k−1∣k−1)AT+Q
- 计算最佳卡尔曼增益: K=P(k∣k−1)HT[HP(k∣k−1)HT+R]−1K=P(k|k-1)H^T[HP(k|k-1)H^T+R]^{-1}K=P(k∣k−1)HT[HP(k∣k−1)HT+R]−1
- 更新后验误差协方差: P(k∣k)=(I−KH)P(k∣k−1)P(k|k) = (I-KH)P(k|k-1)P(k∣k)=(I−KH)P(k∣k−1)
- 计算状态向量的误差项: e^(k)=y(k)−Hx(k∣k−1)\hat{e}(k) = y(k)-Hx(k|k-1)e^(k)=y(k)−Hx(k∣k−1)
- 计算状态向量的后验估计: x^(k∣k)=x^(k∣k−1)+K∗e^(k)\hat{x}(k|k)=\hat{x}(k|k-1)+K*\hat{e}(k)x^(k∣k)=x^(k∣k−1)+K∗e^(k)
- 计算系统输出的后验估计: y^(k)=Hx^(k∣k)\hat{y}(k) = H\hat{x}(k|k)y^(k)=Hx^(k∣k)
本文深入探讨了卡尔曼滤波的原理,从最小二乘法出发,逐步过渡到卡尔曼滤波器的设计,包括系统模型假设、卡尔曼增益计算、误差协方差更新等关键步骤,适用于线性时不变系统在噪声环境下的状态估计。
2014

被折叠的 条评论
为什么被折叠?



