现有:
我们如何去估计出系统此时真实的状态呢?
答案是需要结合“预测值”和“测量值”。例如我们可以加权求和,但是这个权重要怎么定义,才能准确估计出真实状态呢?这个权重就是Kalman Filter解决的事情。
x k = F k x k − 1 + B k u k + w k x_k=F_kx_{k-1}+B_ku_k+w_k xk=Fkxk−1+Bkuk+wk
我们假设这个预测方法是线性变换, B k u k B_ku_k Bkuk是除了状态转移之外的控制量。 w k w_k wk是预测误差,假设为高斯分布(即均值为0的多元正态分布),其协方差矩阵为 Q k Q_k Qk。
也就是说,下一刻我们的预测值,有一部分与上一刻状态有关,一部分与外力控制有关(外力控制与上一刻状态无关),还有一部分被噪声所影响。
举个例子:
假设一小车在x轴上向前以速度 v v v匀速运动, x k x_k xk表示的是k时刻小车在x轴上的坐标。显然我们有 x k = x k − 1 + v t x_k=x_{k-1}+vt xk=xk−1+vt,这里速度v和时间t都和上一个状态无关,属于让小车位置变化的“外力”。
z k = H k x k + v k z_k=H_kx_k+v_k zk=Hkxk+vk
因为我们不一定有测量仪器能直接测量出系统状态,因此我们假设测量方法也是线性变换。
也就是说,当我们的测量仪器用于测量系统状态 x k x_k xk时,它的读数是系统状态加上一定的线性变换 H k H_k Hk,以及测量噪声 v k v_k vk,假设为高斯分布(即均值为0的多元正态分布),其协方差矩阵为 R k R_k Rk。
举个例子:
我们称体重需要得到以“斤”为单位的数据,这是系统状态,但是我们的称只能读出单位为“kg”的数据(这就是 z k z_k zk),那我们就需要做一个单位转换(对应 H k H_k Hk),此外,由于称不一定准,所以最后称的读数还得加上一点噪声。
所有参数中: F k F_k Fk、 B k B_k Bk、 u k u_k uk、 Q k Q_k Qk、 H k H_k Hk、 R k R_k Rk都需要已知,要么自己根据公式和经验定义,要么从样本数据里估计一个值。
Kalman Filter将一直维护对系统状态 x k x_k xk的最优估计值,以及这个估计值的偏差:
首先,通过系统的预测方法,我们可以得到“预测值”:
x k ˉ = F k x ^ k − 1 + B k u k \bar{x_k}=F_k\hat{x}_{k-1}+B_ku_k xkˉ=Fkx^k−1+Bkuk
由于误差不知道,且假设其均值为0,所以这里不算误差
那么协方差也可以从上一个状态转移:
P ˉ k = F k P k − 1 F k T + Q k \bar{P}_k=F_kP_{k-1}F_k^T+Q_k Pˉk=FkPk−1FkT+Qk
这个阶段需要结合“预测值”和“测量值”。结合思想如下:
参考:如何通俗并尽可能详细地解释卡尔曼滤波? - 肖畅的回答 - 知乎
参考这里
让我们从一维看起,设方差为 σ 2 \sigma^2 σ2,均值为 μ \mu μ,一个标准一维高斯钟形曲线方程如下所示:
N ( x , μ , σ ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 \mathcal{N}(x,\mu,\sigma)=\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} N(x,μ,σ)=σ2π1e−2σ2(x−μ)2
那么两条高斯曲线相乘呢?
N ( x , μ 0 , σ 0 ) ⋅ N ( x , μ 1 , σ 1 ) = N ( x , μ ′ , σ ′ ) \mathcal{N}(x,\mu_0,\sigma_0)\cdot\mathcal{N}(x,\mu_1,\sigma_1)=\mathcal{N}(x,\mu',\sigma') N(x,μ0,σ0)⋅N(x,μ1,σ1)=N(x,μ′,σ′)
把这个式子按照一维方程进行扩展,可得:
μ ′ = μ 0 + σ 0 2 ( μ 1 − μ 0 ) σ 0 2 + σ 1 2 \mu'=\mu_0+\frac{\sigma_0^2(\mu_1-\mu_0)}{\sigma_0^2+\sigma_1^2} μ′=μ0+σ02+σ12σ02(μ1−μ0)
σ ′ 2 = σ 0 2 − σ 0 4 σ 0 2 + σ 1 2 \sigma'^2=\sigma_0^2-\frac{\sigma_0^4}{\sigma_0^2+\sigma_1^2} σ′2=σ02−σ02+σ12σ04
如果有些太复杂,我们用k简化一下:
k = σ 0 2 σ 0 2 + σ 1 2 \mathbf{k}=\frac{\sigma_0^2}{\sigma_0^2+\sigma_1^2} k=σ02+σ12σ02
μ ′ = μ 0 + k ( μ 1 − μ 0 ) \mu'=\mu_0+\mathbf{k}(\mu_1-\mu_0) μ′=μ0+k(μ1−μ0)
σ ′ 2 = σ 0 2 − k σ 0 2 \sigma'^2=\sigma_0^2-\mathbf{k}\sigma_0^2 σ′2=σ02−kσ02
以上是一维的内容,如果是多维空间,把这个式子转成矩阵格式:
K = Σ 0 ( Σ 0 + Σ 1 ) − 1 \mathbf{K}=\Sigma_0(\Sigma_0+\Sigma_1)^{-1} K=Σ0(Σ0+Σ1)−1
μ ′ = μ 0 + K ( μ 1 − μ 0 ) \mu'=\mu_0+\mathbf{K}(\mu_1-\mu_0) μ′=μ0+K(μ1−μ0)
Σ ′ = Σ 0 − K Σ 0 \Sigma'=\Sigma_0-\mathbf{K}\Sigma_0 Σ′=Σ0−KΣ0
其中, Σ \Sigma Σ表示协方差。
代入到Kalman Filter里,我们把“预测分布” ( μ 0 , Σ 0 ) = ( H k x ˉ k , H k P ˉ k H k T ) (\mu_0, \Sigma_0)=(H_k\bar{x}_k,H_k\bar{P}_kH_k^T) (μ0,Σ0)=(Hkxˉk,HkPˉkHkT),和“测量分布” ( μ 1 , Σ 1 ) = ( z k , R k ) (\mu_1, \Sigma_1)=(z_k,R_k) (μ1,Σ1)=(zk,Rk)代入到上面的等式里,那么新分布 ( μ ′ , Σ ′ ) = ( H k x ^ k , H k P k H k T ) (\mu',\Sigma')=(H_k\hat{x}_k, H_kP_kH_k^T) (μ′,Σ′)=(Hkx^k,HkPkHkT)为:
这里 ( μ 0 , Σ 0 ) = ( H k x ˉ k , H k P ˉ k H k T ) (\mu_0, \Sigma_0)=(H_k\bar{x}_k,H_k\bar{P}_kH_k^T) (μ0,Σ0)=(Hkxˉk,HkPˉkHkT)乘以了系数 H k H_k Hk是为了把 x k x_k xk转换到和 z k z_k zk一个坐标系。
K = H k P ˉ k H k T ( H k P ˉ k H k T + R k ) − 1 K=H_k\bar{P}_kH_k^T(H_k\bar{P}_kH_k^T+R_k)^{-1} K=HkPˉkHkT(HkPˉkHkT+Rk)−1
H k x ^ k = H k x ˉ k + K ( z k − H k x ˉ k ) H_k\hat{x}_k=H_k\bar{x}_k+K(z_k-H_k\bar{x}_k) Hkx^k=Hkxˉk+K(zk−Hkxˉk)
H k P k H k T = H k P ˉ k H k T − K H k P ˉ k H k T H_kP_kH_k^T=H_k\bar{P}_kH_k^T-KH_k\bar{P}_kH_k^T HkPkHkT=HkPˉkHkT−KHkPˉkHkT
等式两边消掉 H k H_k Hk并化简后:
K k = P ˉ k H k T ( H k P ˉ k H k T + R k ) − 1 K_k=\bar{P}_kH_k^T(H_k\bar{P}_kH_k^T+R_k)^{-1} Kk=PˉkHkT(HkPˉkHkT+Rk)−1
x ^ k = x ˉ k + K k ( z k − H k x ˉ k ) \hat{x}_k=\bar{x}_k+K_k(z_k-H_k\bar{x}_k) x^k=xˉk+Kk(zk−Hkxˉk)
P k = ( I − K k H k ) P ˉ k P_k=(I-K_kH_k)\bar{P}_k Pk=(I−KkHk)Pˉk
K \mathbf{K} K就是Kalman Gain,它衡量了“测量值”和“预测值”之间的权重比例, K \mathbf{K} K越大,“测量值”所占权重越大。
从一维结果 k = σ 0 2 σ 0 2 + σ 1 2 = 1 1 + σ 1 2 / σ 0 2 \mathbf{k}=\frac{\sigma_0^2}{\sigma_0^2+\sigma_1^2}=\frac{1}{1+\sigma_1^2/\sigma_0^2} k=σ02+σ12σ02=1+σ12/σ021可知, σ 0 2 \sigma_0^2 σ02越大, k \mathbf{k} k越大。而当“预测值”的误差越大时, σ 0 2 \sigma_0^2 σ02越大。也就是说,当“预测值”的误差越大时,该公式将更信任“测量值”。