1.卡尔曼滤波原理
利用滤波器可以从包含噪声的测量数据中抽取期望得到的信号。现代滤波理论表明,滤波方式可以通过时间域、频率域或空间域实现,实现的结果为求解出期望的响应信号。但是捷联惯导计算的测量信号为物体运动产生的惯性信号,信号随物体运动而变化,测量信号本身具有随机性质,因此当前时刻的期望响应信号是未知的,目前只能采用基于状态空间模型的卡尔曼滤波方法。
卡尔曼滤波实质是一种线性均方误差最小的估计,另外也有最大似然估计的方法,它是由计算机实现的实时递推算法,由卡尔曼(R.E.Kalman)于1960年提出。这种滤波方法是从与被提取信号有关的观测量中通过算法估计出所需信号,使估计的信号与期望信号的均方误差最小。将信号输出过程视为白噪声作用下的一个线性系统的输出,用状态方程描述这种输入输出关系。估计过程中,系统状态方程、观测方程和白噪声激励(系统状态噪声和观测噪声)的统计特性构成滤波算法。由于所利用的信息都是时域内的变量,所以不但可以对平稳的、一维的随机过程进行估计,也可以对非平稳的、多维的随机过程进行估计,具有较好的应用性,被广泛应用于导航、信号处理等领域。目前,研究的热点主要是将其与各种组合导航算法相结合的联邦卡尔曼滤波方法、提高解决非线性问题的计算精度和效率的各种卡尔曼滤波改进算法。
卡尔曼滤波对一维或多维的离散时间状态X进行估计,处理的是随机噪声,要求模型精确,随机干扰信号统计特性已知。
假设动态系统的一阶线性动态方程和测量方程为
X(t)=F(t)X(t)+G(t)W(t) (7-89)
Z(t)=H(t)X(t)+V(t)(7-90)
式中,X(t)为系统的状态矢量(n维);F(t)为系统的状态矩阵(n×n阶);G(t)为系统的动态噪声矩阵(n×r阶);W(t)为系统的过程白噪声矢量(r维);Z(t)为系统的测量矢量(m维);H(t)为系统的测量矩阵(m×n阶);V(t)为系统的测量噪声矢量(m维)。
其中卡尔曼滤波要求系统噪声矢量W(t)和测量噪声矢量V(t)都是零均值的白噪声过程。
工程对象一般都是连续的系统,因此对系统的状态估计可以按连续动态系统的滤波方程进行计算。然而在实际应用中,常常是将系统离散化,用离散化后的差分方程描述连续系统。因此下面主要讨论离散系统的卡尔曼滤波,即用离散系统递推线性最小方差估计。为此将状态方程式(7-89)和测量方程式(7-90)离散化,可得
式中,
T为迭代周期;Xk为系统在k时刻的n维状态矢量,也是要求的被估计矢量;Zk为在k时刻的m维测量矢量;Φk,k-1为k-1时刻到k时刻的系统状态转移矩阵(n×n阶);Hk为k时刻的测量矩阵(m×n阶);Wk-1为k-1时刻的系统噪声矢量(r维);Γk-1为系统噪声矩阵(n×r阶),它表示由k-1时刻到k时刻的各个系统噪声分别影响k时刻各个状态的程度;Vk为k时刻的m维测量噪声矢量。
根据卡尔曼滤波要求,假设{Wk,k=0,1,2,…}和{Vk,k=0,1,2,…}是独立的均值为零的白噪声序列,即有
式中,符号E{}表示取均值;δkj为Kroneckerδ符号;Qk为系统噪声方差阵,由于并非系统的所有状态变量xi均有动态噪声的缘故,故Qk是一个非负定矩阵(n×n阶);Rk为测量噪声方差阵,由于每个测量值Zi均含有噪声,故测量方差阵是一个正定矩阵(m×m阶)。
式(7-95)~式(7-97)中,Qk、Rk和Q(t)、R(t)的关系可近似表示为
同时又假设系统的初始状态X0也是正态随机矢量,其均值和协方差矩阵分别为
对于一个实际的物理系统而言,现在和未来时刻的干扰绝对不会影响系统的初始状态X0;为了简化问题的讨论,可以认为系统的初始状态X0、系统的噪声Wk、测量噪声Vk是相互独立的,即对所有的k=0,1,2,…有E{X0WTk}=0;E{X0VTk}=0和E{WkVTk}=0。
以上内容给出了离散系统的数学描述以及有关噪声的概率统计特性的假设。现在先讨论最小方差估计,如果给定测量数据{Zj,j=1,2,…,k}之后,求状态矢量Xi在某种意义下的最优估计,记做。根据观测时刻k与待估计矢量Xi所在的时刻i的关系,将统计估计分为三类:若i>k,称为Xi的预测估计,即由以前的观测数据预测未来的状态矢量。若i=k,称为Xi的滤波估计,它是“实时动态估计”。若i<k,称为Xi的平滑估计,又称内插估计。
最小方差估计的定义是:如果估计使得
成立,则称为矢量Xi的最小方差估计。
记为估计误差,为估计误差的协方差矩阵。如果,则称为Xi的无偏估计。如果为{Zj,j=1,2,…,k}的线性函数,则估计就称作矢量Xi的线性估计。
实际工程应用中常常希望由tk时刻的观测值Zk计算得到该时刻的状态Xk的估计。对于动态系统,由于Xk是从tk以前时刻的状态按照系统转移规律变化过来的(含噪声的影响),现在时刻的状态和以前时刻的状态存在着关联,所以利用tk时刻测量值Zk进行估计,必定有助于估计精度的提高。但是对于线性最小估计方差来说,由于计算方法的限制,若采取同时处理不同时刻的全部测量值来估计tk时刻的状态Xk,计算工作量相当大,因此这种估计方法不适合实时估计动态系统的误差。如果无须“同时全部”处理tk时刻前的测量数据,而是采取一种将前后时刻“关联”起来的递推算法,问题就可解决。这就是卡尔曼在线性最小方差估计的基础上,提出的递推线性最小方差滤波估计——卡尔曼滤波。卡尔曼滤波是一种递推数据处理方法,它利用上一时刻tk-1的估计和实时tk时刻的观测值Zk进行实时估计得到。由上一时刻tk-1的估计是使用再上一时刻tk-2的估计和tk-1时刻的观测值Zk-1得到的,依此类推,可以一直上溯到初始状态矢量和全部时刻的观测矢量{Z0 Z1 Z2 … Zk-1}。所以这种递推的实时估计,实际上是利用了所有全部测量数据而得到的,而且一次只处理一个时刻的测量值,使计算量大大减少。递推线性最小方差估计的估计准则仍然符合式(7-100)。它的估计同样是测量值的线性函数,而且估计也是无偏估计。
2.离散系统的卡尔曼滤波方程
现在的问题是:在给定测量数据{Zj,j=1,2,…,k}后,如何寻找到状态矢量Xk的递推线性最小方差滤波估计。为了便于理解,这里介绍一种推倒卡尔曼滤波方程的比较直观的方法。关于数学上的严格讨论,请参阅有关离散时间系统递推估计的资料。假设已知k-1时刻和此时刻以前的测量数据{Zj,j=1,2,…,k-1},通过计算得到了状态矢量Xk-1的线性最小方差无偏估计。根据方程式(7-91)可以看出,由于随机干扰矢量Wk-1是一个不能预测的随机矢量,因此只能用下述方程:
来计算系统状态矢量Xk的一步估计值,一步估计值的误差记为,有,当是状态矢量Xk-1的最小方差滤波估计时,就是状态矢量Xk的最小方差预测估计。方程式(7-101)称为状态一步预测方程。
观测方程式(7-92),按照同样的推断,由上述系统状态矢量Xk的一步预测估计得,即
现在在时刻k又测量到测量矢量Zk,当前的实际测量矢量Zk与式(7-102)计算获得的Zk的一步预测估计
之间存在着误差,记作1。将式(7-92)表达的Zk的测量值和一步预测估计式(7-102)代入表达式中,可以得到测量矢量Zk的一步测量误差(简称残差),即
根据式(7-103)的右端可以看出,Zk的一步预测误差由两部分构成:一部分是由状态矢量Xk的一步预测的误差,以的形式出现;另一部分是测量本身的噪声Vk。对于测量误差中的前一成分,自然会想到用它去修正状态矢量Xk的一步预测估计,以便预测Xk的滤波估计。
实际上,在数据处理过程中,由于k时刻可以测量到Zk,而是由上一步的式(7-102)计算得到的,因此可以获得的信息只是残差,只是残差中的主要成分,无法具体算出。为了实时估计状态Xk,只有用残差去近似的一步预测估计值的误差X,从而实现的修正,获得滤波估计。是在的基础上估计Xk所需要的信息的,故称为新息(Inovation)。在线性估计范围内,一般总是采用加权的方法来修正一步预测估计,于是可用式(7-104)来计算Xk的滤波估计:
式中,Kk为滤波增益矩阵(n×m阶)。
式(7-104)称为状态滤波方程。根据以上分析,式(7-104)中右端第一项是由k-1时刻和以前所有时刻的测量矢量得到的,第二项中的新息含有k时刻的测量矢量Zk,由此可以认为状态Xk的递推滤波,是由k时刻及其以前各时刻的测量值{Zj,j=1,2,…,k}计算得到的。现在的问题是如何确定增益矩阵Kk。
增益矩阵Kk具有最优加权的含义,即在式(7-104)中,Kk的取值应使卡尔曼滤波对于状态Xk的估计误差X为最小。换句话说,由于增益矩阵Kk的取值,使得最小方差估计准则,即式(7-100)得到满足。
由式(7-91)表示的Xk和式(7-101)表示的可以导出:
根据协方差的定义,以及式(7-105),有
同理,可以获得
将式(7-105)代入式(7-107),可得
将式(7-109)的右端展开,通过整理可得
现在,根据式(7-110)来分析增益矩阵Kk应该如何取值,才能使估计误差的协方差矩阵Pk最小。根据前述假设,Rk为测量噪声方差阵,它是一个对称正定矩阵,而HkPk|k-1HTk至少是非负定矩阵,因此HkPk|k-1HTk+Rk必定为正定矩阵。根据正定矩阵的性质可知,存在一个可逆矩阵Sk,使得
SkSTk=HkPk|k-1HTk+Rk (7-111)
将式(7-111)代入式(7-110),推导可得
Pk=Pk|k-1-KkHkPk|k-1-Pk|k-1HTkKTk+KkSkSTkKTk (7-112)
观察式(7-112)右端,显然它是一个关于矩阵Kk的二次多项式,运用一般的二次多项式的配方法则,可以证明存在一个矩阵Dk使得下面的等式成立:
Pk=Pk|k-1+(KkSk-Dk)(KkSk-Dk)T-DkDkT (7-113)
比较式(7-112)与式(7-113)可得
Dk=Pk|k-1HTk(STk)-1 (7-114)
由于矩阵Pk|k-1是一步预测估计误差的协方差阵,因此矩阵Pk|k-1及矩阵Dk均与增益矩阵Kk的选取没有关系。于是从式(7-113)可以看出,若使矩阵Pk满足最小条件,即式(7-100),则必须有如下等式:
KkSk-Dk=0 (7-115)
将Sk和Dk代入式(7-115),有
Kk=Pk|k-1HTk(HkPk|k-1HTk+Rk)-1 (7-116)
若使矩阵Pk达到最小,即它所属的二次齐次式达到最小,也即方阵Pk的迹(trace):达到最小。所以,根据上述的讨论,Kk根据式(7-116)确定
以后,则Pk=min,增益矩阵Kk是最优增益矩阵,于是,由式(7-104)得到的状态矢量Xk的估计就是最小方差线性滤波估计,或称为卡尔曼滤波。(www.xing528.com)
在滤波开始时必须有初值和P0才能进行,因此必须选择给定和P0。为了确保卡尔曼滤波的无偏性,假设初始(t=0)条件为,则
成立。无偏条件应满足:
利用数学归纳法可以证明,只要系统状态矢量在初始时刻(k=0)的卡尔曼滤波是无偏的,那么卡尔曼滤波值在任何时刻(t=k)也必定是无偏的。
根据以上对状态矢量Xk的最小方差线性递推估计过程的分析,可以得到如下一组递推滤波方程组,通常称为离散系统卡尔曼滤波方程。
状态一步预测方程:
状态估计方程:
最优滤波增益方程:
Kk=Pk|k-1HTk(HkPk|k-1HTk+Rk)-1 (7-121)
一步预测均方误差方程:
Pk|k-1=Φk,k-1Pk-1ΦTk,k-1+Γk-1Qk-1ΓTk-1 (7-122)
估计均方误差方程:
Pk=(I-KkHk)Pk|k-1 (7-123)
或:
Pk=(I-KkHk)Pk|k-1(I-KkHk)T+KkRkKkT (7-124)
由上述式(7-119)~式(7-124)确定的系统称为卡尔曼滤波器,它表现为计算机的数据处理——最小方差线性递推估计运算。卡尔曼滤波器的输入信息是系统的测量输出Zk,滤波器的输出则是系统的状态矢量Xk的最小方差线性无偏估计。卡尔曼滤波方程中的前四个方程,即式(7-119)~式(7-122)包括了由输入量测量值Zk到计算输出值的计算过程。估计方差Pk的式(7-123)或式(7-124)在计算下一步预测方差时是必不可少的。利用式(7-123)和式(7-115)均可以求得Pk。显然前者的计算量小,但是在计算机有舍入误差的情况下不能保证计算出的均方差矩阵Pk一直保持对称。而后者计算量较大,但可以保证Pk为对称阵。故在设计卡尔曼滤波器时,可以根据系统的具体要求来选择其中一个方程。根据卡尔曼滤波方程,即式(7-119)~式(7-123)可以给出离散系统卡尔曼滤波方程计算程序功能图,如图7-11所示。
图7-11 离散系统卡尔曼滤波方程计算程序功能图
由图7-11可以看出,由测量数据Zk计算状态估计时,除了需要知道描述系统测量值的矩阵Hk和状态转移矩阵Φk,k-1以及噪声方差矩阵Qk和Rk,还必须有前一步计算的状态估计和估计均方差Pk-1。若计算出了k时刻的和Pk之后,则又可以使用它们计算下一步(t=k+1)时刻的和Pk+1。因此,由初值和P0开始计算和Pk是一个循环递推的过程。
此外,倘若在系统和测量值中,含有已知的确定值输入量时,系统状态方程和测量方程分别表达为如下形式:
Xk=Φk,k-1Xk-1+Γk-1Wk-1+Bk-1Uk-1 (7-125)
Zk=HkXk+Vk+Yk (7-126)
式中,Uk-1为确定性输入矢量,或称s维控制矢量;Bk-1为系统输入矩阵,或称n×s阶控制系数矩阵;Yk为测量值中确定性输入矢量(m维)。
由式(7-125)和式(7-126)所构成的系统,其卡尔曼滤波方程中,将状态矢量一步预测方程式(7-119)改为
将状态估计方程式(7-120)改为
其他最优滤波增益方程、预测均方误差方程和估计误差方程不变。
3.转移矩阵Φk,k-1和系统噪声方差矩阵Qk的计算
离散系统卡尔曼滤波方程的显著优点就是方程的递推性,利用计算机这一有力的工具进行运算就能实现滤波。而工程中的系统很多都是连续系统,为了实现在计算机中进行滤波计算,常常将连续系统离散化。连续系统离散化的实质,就是根据连续系统的状态矩阵F(t)计算出离散系统的转移矩阵Φk,k-1,以及根据连续系统的系统噪声方差强度矩阵Q(t)计算出离散系统噪声方差矩阵Qk。
动态系统状态方程式(7-89)的齐次方程为
方程式(7-129)的齐次解为
Xk=Φk,k-1Xk-1 (7-130)
式中,Φk,k-1为从历元tk-1到历元tk的状态转移矩阵。
假设计算周期T远远小于系统状态矩阵F(t)发生明显变化所需要的时间,可将F(t)近似看成定常矩阵,则根据定常系统的齐次解有
一般情况下,在递推计算过程中,由历元tk-1到历元tk的时间间隔为计算周期T,将Φk,k-1在tk-1处展开成泰勒级数,有
由式(7-131)可看出,状态转移矩阵Φk,k-1由无穷多项构成,为了减小截断误差,理应取尽可能多的项数之和。然而,在实际计算中,项数取得过多,不仅会大大增加计算工作量,而且由于计算步骤增多,反而导致计算的误差增大。因此,求和的项数要取得合适。为此,一种方法是在转移矩阵计算程序中,预先设置一个整数m,取10-m作为一个阈值,当完成前L项累加时,将这L项之和与第L+1项比较,若第L+1项的值与前L项之和的比之小于阈值10-m,则停止累加。另外,也可通过滤波器设计过程中的误差分析结果来确定合适的取数。若将滤波器的计算周期T平均分成N个时间间隔ΔT(即ΔT=T/N),滤波周期T与计算步长ΔT的关系示意如图7-12所示。
图7-12中,tk(i)(i=0,1,2,…,N)表示t(k-1)+iΔT时刻,即tk(i)=t(k-1)+iΔT。
根据状态转移矩阵的性质有
式(7-133)为连乘积表达,每个时间间隔ΔT之间的转移矩阵可以按以下泰勒展开的一次近似来计算:
Φk(i),k(i-1)≈I+ΔTFi-1 (7-134)
式(7-134)中,
Fi-1=F[tk-1+(i-1)ΔT] (7-135)
图7-12 滤波周期T与计算步长ΔT的关系示意
实际计算中可以将式(7-134)进一步简化为
式中,O(ΔT2)为矩阵中元素是由时间间隔ΔT的二阶或更高阶的小量构成的矩阵,在近似计算中,二阶以上的高阶小量略去不计。
在卡尔曼滤波转移矩阵Φk,k-1的计算中,常常采用式(7-136),在精度相当的情况下,它比采用式(7-134)的计算工作量要小得多。
由卡尔曼滤波方程中的式(7-122)可以看出,在计算一步预测均方误差Pk|k-1时,需要计算形式为Γk-1Qk-1ΓTk-1的系统噪声方差矩阵,为使公式符号简便,以k替代k-1。下面来讨论如何计算ΓkQkΓTk。
设连续系统为定常系统,定义;。则可以证明Qk的计算公式为
计算时项数的确定方法与前述计算时的确定方法相同。
对于时变系统,将计算周期T分隔成N个ΔT的更小的时间间隔来处理,只要ΔT足够小,则可将系统状态矩阵F(t)假设为定常矩阵来计算,计算公式为
若计算周期T相当短,则也可以按下面更简化的公式来计算:
本小节介绍的卡尔曼滤波算法是管道测绘应用中组合导航系统进行信息融合的主要工具,同时也是各种时域滤波使用的主要方法,在初始对准、捷联惯性导航位置推算、终止点校正等很多应用中发挥着重要作用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。