1960年,美籍匈牙利数学家卡尔曼将状态空间分析方法引入滤波理论中,对状态和杂讯进行了完美的统一描述,得到时域上的递推滤波演算法,即卡尔曼滤波,相应的演算法公式称为卡尔曼滤波器。注意卡尔曼滤波是在时域上应用的。

卡尔曼滤波是在已知系统和量测的数学模型、量测杂讯统计特性及系统状态初值的情况下(这也是用卡尔曼滤波的前提条件,需要搞清楚卡尔曼滤波的初值),利用输出信号的量测数据和系统模型方程,实时获得系统状态变数和输入信号的最优估计值。它是一种线性,无偏,且误差方差最小的随机系统最优估计演算法。其实,说到底,卡尔曼滤波就是递推形的线性最小方差估计。

学习卡尔曼滤波估计,要知道最优估计理论里面的相关知识,更要了解最基础最根本的最优估计理论,那就是最小二乘法。

RLS和卡尔曼滤波器非常类似,也是用来估计参数的,我们来推导一下它的过程。

首先定义一下各个变数

在一个线性系统中,系统状态估计方程为:

Z=Hx+v

其中, Z 为观测量, H 为观测矩阵, x 为状态量(未知参数,待估计量), v 为杂讯

先来看看普通的最小二乘

假设 hat x_k 为状态量 x 的最优估计量,则误差 e 可定义为

e=Z-Hhat x

误差越小,说明我们的估计量越接近真值。

假设我们一批数据,我们希望总误差越小越好,定义代价函数J为

J=e_1^2+e_2^2+dots+e_n^2

用向量来表示,即

J=e^Te=(Z-Hhat x)^T(Z-Hhat x)=Z^TZ-hat x^TH^TZ-Z^THhat x+hat x^TH^THhat x

最小化代价函数,令 J 对估计量 hat x 求偏导的结果为0,得

frac{partial J}{partialhat x}=-H^TZ-H^TZ+(H^TH+H^TH)hat x=-2H^TZ+2H^THhat x=0

hat x=(H^TH)^{-1}H^TZ

可以看出,估计量 hat x 是观测量 Z 的线性函数,即线性估计。

=========================关于矩阵求导====================

一般来讲,我们约定x=(x_1,x_2,...x_N)^T ,这是分母布局。

frac{partial Ax}{x}=A^T

frac{partial x^TA}{x}=A

如果是分子布局,刚好相反,实质是一样的,布局问题而已。

=======================================================

令估计误差 widetilde x=x-hat x=-(H^TH)^{-1}H^Tv

当测量误差的均值为0时,估计误差的数学期望等于零,最小二乘估计是无偏估计(估计误差期望等于0):

E[widetilde x]=E[-(H^TH)^{-1}H^Tv]=-(H^TH)^{-1}H^TE[v]=0

此时,

估计误差方差阵Var(	ilde x)=E[	ilde x-E(	ilde x)][	ilde x-E(	ilde x)]^T=E[	ilde x	ilde x^T]

估计值的均方误差阵 E[x-hat x][x-hat x]^T=E[	ilde x	ilde x^T]

因此,估计误差方差阵 Var(widetilde x) 和估计值的均方误差阵 E[x-hat x][x-hat x]^T 相等。

注意 J(hat x)=(Z-Hhat x)^T(Z-Hhat x) 与估计误差方差阵 Var(widetilde x) 概念不同,最小二乘估计只保证测量值与估计值的平方和最小,不保证估计误差的方差最小。最小二乘估计不需要随机变数V的任何统计信息。

加权最小二乘估计(Weighted Least Square, WLS)

在古典最小二乘中,假设了每一次测量的权重相同,但事实上这样并不合理。假如一个估计值偏离真实值很远,那么它对估计结果的影响就应该被削弱,反之影响应该加强。加权最小二乘就是做这样的事。

加权最小二乘估计的误差平方和为:

J_w(hat x)=(Z-Hhat x)^TW(Z-Hhat x)

同样要使这个误差平方和最小化:

frac{partial J_w(hat x)}{partialhat x}=0

可得

hat x_{wls}=(H^TWH)^{-1}H^TWZ

通过一系列推导可以发现,当 W=R^{-1} 时,最小二乘估计是缺少初值条件下的线性无偏最小方差估计,又称马尔科夫估计。

则估计量可以表示为 hat x_{wls}=(H^TR^{-1}H)^{-1}H^TR^{-1}Z

其中,R为杂讯方差阵, R=E[vv^T]

递推最小二乘估计(Recursive Least Square, RLS)

但是,最小二乘有个问题,就是前面计算出最优估计量后,当有新的数据进来时候,又要重新计算最优估计量。数据量比较大的时候,计算量会变得特别大。

所以引出了递归最小二乘,当有新的数据进来,不会再把以前的数据重新计算一遍,而是用当前的观测值对以前的最优估计量进行矫正更新。

考虑k次测量:

Z_k=H_kX+v_k

假设第k次的最优估计量 hat x_k 为前一次最优估计量 hat x_{k-1} 与测量误差的线性组合:

hat x_k = hat x_{k-1}+K_k(Z_k-H_khat x_{k-1})

则误差

	ilde x=x_k-hat x_k=x_k-hat x_{k-1}-K_k(Z_k-H_khat x_{k-1})

由加权最小二乘可知 hat x_{wls}=(H^TR^{-1}H)^{-1}H^TR^{-1}Z

估计误差方差阵,用符号 P_k 表示: egin{align}P_k=Var(	ilde x)&=E[	ilde x	ilde x^T] \ &=E[-(H^TR^{-1}H)^{-1}H^TR^{-1}v][-(H^TR^{-1}H)^{-1}H^TR^{-1}v]^T \ &=E[-(H^TR^{-1}H)^{-1}H^TR^{-1}vv^TR^{-1}H(H^TR^{-1}H)^{-1}] \ &=(H^TR^{-1}H)^{-1}H^TR^{-1}RR^{-1}H(H^TR^{-1}H)^{-1} \ &=(H^TR^{-1}H)^{-1}H^TR^{-1}H(H^TR^{-1}H)^{-1} \ &=(H^TR^{-1}H)^{-1}  end{align}

则最优估计 hat x 可以表示为

hat x_{wls}=P_kH_k^TR_k^{-1}Z_k

另外, P_k 可以表示成跟 P_{k-1} 的递推关系

P_k=E[(x_k-hat x)(x_k-hat x)^T]=E[x_k-hat x_{k-1}-K_k(Z_k-H_khat x_{k-1})][x_k-hat x_{k-1}-K_k(Z_k-H_khat x_{k-1})]^T

化简得

P_k=(1-K_kH_k)P_{k-1}(1-K_kH_k)^T+K_kR_kK_k^T

代价函数为 P_k 的迹,即 J=tr(P_k) ,令代价函数 J 对 K_k 求导结果为0,可得

K_k=P_{k-1}H_k^T(H_kP_{k-1}H_k^T+R_k)^{-1}

P_k 式子展开后, K_k 式子代入其最后一项,化简后可得

P_k=P_{k-1}-K_kH_kP_{k-1}=(1-K_kH_k)P_{k-1}

可以看出协方差 P_k 随著每次观测,在逐渐减小。

演算法的整个流程为:

1,初始化估计器:

hat x_0=E[x]

P_0=E[(x-hat x_0)(x-hat x_0)^T]

2,建立观测模型,定义雅克比和测量协方差矩阵:

y_k=H_kx+v_k

3,使用下面方程更新对 hat x_k 的估计和协方差 P_k

K_k=P_{k-1}H_k^T(H_kP_{k-1}H_k^T+R_k)^{-1}

hat x_k=hat x_{k-1}+K_k(y_k-H_khat x_{k-1})

P_k=(1-K_kH_k)P_{k-1}

可以总结出RLS 两个特点:

1,RLS可以进行实时在线估计参数

2,RLS是一个线性递推估计器,它使当前参数的(协)方差最小化。

详细推导过程如下图所示

因为 P_{k-1} 是协方差矩阵,只有对角线上有元素,所以转置对它没有影响,即

P_{k-1}=P_{k-1}^T

其实递推最小二乘法:就是想使方差之和最小,然后发现,方差之和就是估计误差的协方差矩阵的迹,迹里面又包含了K,所以也就是求K使得迹最小,即对K求导。

参考:

blog.csdn.net/qinruiyan

blog.csdn.net/ethan_guo

blog.csdn.net/shanpengh

blog.csdn.net/victor_zy

Z_k=H_kx+v_k


推荐阅读:
相关文章