卡尔曼滤波

卡尔曼滤波

一、          卡尔曼滤波的起源

谈到信号的分析与处理,就离不开滤波两个字。通常,信号的频谱处于有限的频率范围内而噪声的频谱则散布在很广的频率范围内,为了消除噪声,可以把FIR滤波器或者IIR滤波器设计成合适的频带滤波器,进行频域滤波。但在许多应用场合,需要直接进行时域滤波,从带噪声的信号中提取有用信号。虽然这样的过程其实也算是对信号的滤波,但其所依据的理论,即针对随机信号的估计理论,是自成体系的。人们对于随机信号干扰下的有用信号不能“确知”,只能“估计”。为了“估计”,要事先确定某种准则以评定估计的好坏程度。

最小均方误差是一种常用的比较简单的经典准则。对于平稳时间序列的最小均方误差估计的第一个明确解是维纳在1942年2月首先给出的。当时美国的一个战争研究团体发表了一个秘密文件,其中就包括维纳关于滤波问题的研究工作,这项研究是用于防空火力控制系统的。维纳滤波器是基于最小均方误差准则的估计器。为了寻求维纳滤波器的冲激响应,需要求解著名的维纳–霍夫方程。这种滤波理论所求的是使均方误差最小的系统最佳冲激响应的明确表达式。

从维纳–霍夫方程来看,维纳滤波算法是十分低效的。这种算法要求设置大量的存储器来保存过去的测量数据,一个新的数据到来后,要进行刷新,重新计算自相关和互相关序列。再者,求解这个方程需要耗费大量时间对高阶矩阵求逆。因此,维纳滤波算法难以运用于实时处理中,尤其是无法用于军事、航空航天等领域。

为此,许多科技工作者进行了多方探索,但在解决非平稳过程的滤波问题时,能给出的方法很少。到20世纪50年代中期,随着空间技术的发展,要求对卫星轨道进行精确地测量,这种方法越来越不能满足实际应用的需要。为此,人们将滤波问题以微分方程表示,提出了一系列适应空间技术应用的精炼算法。1960年和1961年,卡尔曼(R.E. Kalman)和布西(R.S. Bucy)提出了递推滤波算法,成功的将状态变量引入到滤波理论中来,用消息与干扰的状态空间模型代替了通常用来描述它们的协方差函数,将状态空间描述与离散数间刷新联系起来,适于计算机直接进行计算,而不是去寻求滤波器冲激响应的明确公式。这种方法得出的是表征状态估计值及其均方误差的微分方程,给出的是递推算法。这就是著名的卡尔曼理论。

卡尔曼滤波不要求保存过去的测量数据,当新的数据到来时,根据新的数据和前一时刻的储值的估计,借助于系统本身的状态转移方程,按照一套递推公式,即可算出新的估值。这一点说明卡尔曼滤波器属于IIR滤波器的范畴。这就是说,与维纳滤波器不同,卡尔曼滤波器能够利用先前的运算结果,再根据当前数据提供的最新消息,即可得到当前的估值。卡尔曼递推算法大大减少了滤波装置的存储量和计算量,并且突破了平稳随机过程的限制,使卡尔曼滤波器适用于对时变信号的实时处理

二、          卡尔曼滤波的原理

卡尔曼滤波的含义是现时刻的最佳估计为在前一时刻的最佳估计的基础上根据现时刻的观测值作线性修正。卡尔曼滤波在数学上是一种线性最小方差统计估算方法,它是通过处理一系列带有误差的实际测量数据而得到物理参数的最佳估算。其实质要解决的问题是要寻找在最小均方误差下的估计值。它的特点是可以用递推的方法计算,其所需数据存储量较小,便于进行实时处理。具体来说,卡尔曼滤波就是要用预测方程和测量方程对系统状态进行估计。

设动态系统的状态方程和测量方程分别为:

       

     

    上两式子中,是k时刻的系统状态,和是k-1时刻到k时刻的状态转移矩阵,是k时刻的测量值,是测量系统的参数,和分别表示过程和测量的噪声,他们被假设成高斯白噪声。如果被估计状态和观测量是满足上述第一式,系统过程噪声和观测噪声满足第二式的假设,k时刻的观测的估计可按下述方程求解。

进一步预测:                                  (1)

状态估计:                        (2)

    滤波增益矩阵:                               (3)

    一步预测误差方差阵:    (4)

    估计误差方差阵:                          (5)

上述就是卡尔曼滤波器的5条基本公式,只有给定初值和,根据k时刻的观测值,就可以递推计算得k时刻的状态估计(K=1,2,N)。

三、          卡尔曼滤波的发展

自卡尔曼滤波提出以来,经过40多年的发展,卡尔曼滤波已经形成了一个比较完整的理论体系,并且成功应用于航空航天、工业控制等领域,美国空军还将卡尔曼滤波定为标准滤波器。

但是,随着应用领域的不断扩大,滤波对象不确定性的不断提高,传统KF已经不能满足更高的要求,它的主要不足在于:(1)滤波限制条件比较苛刻,它要求系统模型精确以及系统误差模型和观测误差模型已知,这在实际应用中是很难满足的,或者在系统工作过程中,模型发生变化,这些都导致传统KF的滤波发散或精度下降。(2)计算机字长的限制,这种情况可能导致计算过程中出现舍入误差,从而导致方差阵P( k | k)不对称引起滤波发散。(3)观测数据发生突变,由于传感器故障或外部条件发生改变,极有可能出现数据突变,即野值,这会对滤波器的收敛性产生严重影响,甚至导致发散,可以说,野值是对滤波器稳定性的一个考验。

针对上述不足,很多学者提出了不同的方法加以克服,如限定记忆法、平方根滤波、渐消记忆滤波、自适应卡尔曼滤波(Adaptive Kalman Filtering,AKF)、抗野值滤波等。其中,AKF因为具有自适应特性非常适合动态系统滤波而受到广泛重视。因此,在采用卡尔曼滤波处理动态测量数据时,一般都要考虑采取适当的自适应滤波方法来解决这一问题。

自适应卡尔曼滤波最新发展的几个分支包括:相关自适应卡尔曼滤波、多模型自适应卡尔曼滤波、基于信息的自适应卡尔曼滤波、神经网络自适应卡尔曼滤波、模糊逻辑自适应卡尔曼滤波。

相关法是最基本的一种AKF方法,在许多文献中都有详细的论述,相关法分为两类:输出相关法和信息相关法。输出相关法的主要思想是利用观测向量的相关性M(k) =E[Z(k)ZT(k)]自适应调整增益矩阵K(k),这种方法的主要缺陷是计算复杂,实时性难以满足要求。对于高动态系统(如GPS/INS组合导航系统),这种复杂性就更加突出。信息相关法自适应滤波的主要思想是利用信息的相关性M(k) = E[(V(k)VT(k)]自动调整增益矩阵K(k),其中V(k)= Z(k) - C(k) X^( k)。信息相关法比输出相关法更加有效,因为信息更能反映观测数据特性,但是信息相关法计算复杂度却有所增加,很难满足工程需要。

但是在高动态系统中(如GPS/INS组合导航、靶场数据测量等),测量数据经常发生突变产生野值,导致状态估计明显偏离真实状态。抗野值的AKF通过对信息的监测判断是否有野值出现,当有野值出现时,通过自适应调整增益矩阵,达到消除野值影响的目的,虚警概率为4.5%。这种方法不仅可以消除野值的影响,而且还可以用于对传感器的故障诊断。但是它仅仅解决了由于野值引起滤波发散的情况,而对其它原因引起的滤波发散无能为力。如果将这种方法与其它AKF方法结合,那么将得到更完善的自适应滤波方法。

多模型AKF(MultipleModel AKF)最早由Magill在1965年提出的。它由一组卡尔曼滤波器组成,每一个卡尔曼滤波器使用不同的系统模型,各个卡尔曼滤波器并行运行,根据观测向量估计各自的状态。随着时间的不断增加,系统会选出最优的一个滤波器并将其权值增大,而其它权值相应减小。多模型AKF性能最优的前提条件是所用的模型集包含了系统所有可能的模式,但是这个前提条件往往是很难满足的。

基于信息的AKF主要是通过调整噪声统计特性达到自适应的目的,解决了因为噪声统计特性不明确或噪声发生变化的情况。但是对于系统其它模型发生变化不能达到自适应的目的。

卡尔曼滤波器需要精确已知系统模型才能得到系统状态的最优估计,但是这种要求在实际当中很难得到。在上述方法中,大部分方法只是对噪声的统计特性进行了自适应估计,如果系统的其它模型不正确或发生变化时,就不能自适应估计了。将人工智能技术和滤波技术融合是滤波技术的发展趋势。神经网络作为人工智能技术中的一个领域,其主要优点在于它对系统的模型没有特别要求,只要有足够的用于训练的先验数据,就可以用训练的神经网络近似代替原系统。神经网络AKF正是为了满足这一需求而提出的。

AKF是一种很有效的状态滤波技术,已经在目标跟踪、组合导航、故障诊断、图像处理等方面得到成功应用。随着AKF的应用范围不断扩大,AKF已经成为解决工程滤波(估计)问题的主要研究方向。

AKF的发展趋势大概有以下几个方面:

(1)深入研究NNAKF。神经网络与AKF结合不仅可以解决模型不确定问题,而且由于神经网络的并行计算,使NNAKF的实时性得到保证。在应用神经网络时,还有许多问题需要进一步解决:NNAKF的结构、训练样本的获取及其鲁棒性研究。

(2)AKF与其它智能方法结合。神经网络、模糊逻辑与AKF结合使我们看到智能方法与AKF的结合是一个很有前途的研究方向。其它的智能方法包括专家系统、遗传算法以及小波变换等。

(3)AKF与新方法的结合。

(4)AKF与自适应控制的结合。

(5)寻找对放松假设条件系统的滤波方法,如考虑噪声相关模型等。目前的AKF均是在一定的假设条件下的滤波算法。如果假设条件发生变化,或假设条件不能满足,AKF就可能失效,即滤波发散、精度达不到要求等。

(6)自适应算法性能评估。面对如此众多的AKF,针对特定的滤波对象,如何选择恰当的滤波算法是另外一个研究方向。其中滤波器的滤波精度、鲁棒性、实时性是性能评估的三个重要标准。从工程应用角度考虑,鲁棒性、实时性要求比精度要求更高。

四、          卡尔曼滤波的应用

卡尔曼滤波器(KalmanFilter)是一个最优化自回归数据处理算法(optimalrecursive data processing algorithm),它的广泛应用已经超过30年,包括航空器轨道修正、机器人系统控制、雷达系统与导弹追踪等。近年来更被应用于组合导航与动态定位,传感器数据融合、微观经济学等应用研究领域。特别是在图像处理领域如头脸识别、图像分割、图像边缘检测等当前热门研究领域占有重要地位。

卡尔曼滤波作为一种数值估计优化方法,与应用领域的背景结合性很强。因此在应用卡尔曼滤波解决实际问题时,重要的不仅仅是算法的实现与优化问题,更重要的是利用获取的领域知识对被认识系统进行形式化描述,建立起精确的数学模型,再从这个模型出发,进行滤波器的设计与实现工作。

滤波器实际实现时,测量噪声协方差R一般可以观测得到,是滤波器的已知条件。它可以通过离线获取一些系统观测值计算出来。通常,难确定的是过程激励噪声协方差的Q值,因为我们无法直接观测到过程信号。一种方法是通过设定一个合适的Q,给过程信号“注入”足够的不确定性来建立一个简单的可以产生可接受结果的过程模型。为了提高滤波器的性能,通常要按一定标准进行系数的选择与调整。基本卡尔曼滤波(KF)器限定在线性的条件下,在大多数的非线性情形下,使用扩展的卡尔曼滤波(EKF)器来对系统状态进行估计。

随着卡尔曼滤波理论的发展,一些实用卡尔曼滤波技术被提出来,如自适应滤波,次优滤波以及滤波发散抑制技术等逐渐得到广泛应用。其它的滤波理论也迅速发展,如线性离散系统的分解滤波(信息平方根滤波,序列平方根滤波,UD分解滤波),鲁棒滤波(H∞ 波)。

下面给出几个具体应用的例子。

(1)      GPS变形监测动态数据处理中的应用:现阶段GPS用于变形观测中,通常是在确定的瞬间静态研究监测点的状态,而没有考虑到监测点随时间改变位移的动态特性。并且在观测过程中,观测数据往往不连续,这样就无法对动态变形进行实时准确描述。卡尔曼滤波(Kalman,1960)是当前应用最广的一种动态数据处理方法,它具有最小无偏方差。在GPS变形监测中,如果将变形体视为一个动态就可以用来描述这个变形体的运动情况。并能在这个系统中分别找出表示它们的状态参数与其观测值之间的函数关系,那么就可以利用卡尔曼滤波来减弱随机噪声的干扰,进而达到提高GPS变形观测数据精度的目的。

(2)      现代汽车中的悬架分为从动悬架和主动悬架两种。从动悬架即传统式的悬架,是由弹簧、减震器、导向机构等组成,它的功能是减弱路面传给车身的冲击力,衰减由冲击力而引起的承载系统的震动。其中弹簧主要起减缓冲击力的左右,减震器的作用是衰减震动。从动悬架是由外力驱动而起作用的。主动悬架是近十几年发展起来的由电脑控制的一种新型悬架。主动悬架的控制环节中安装了能够产生主动力的装置,采用一种以力抑制力的方式来抑制路面对车身的冲击力及车身的倾斜力。汽车的液压主动悬架系统在控制过程中不可避免的受到噪声的影响。应用卡尔曼滤波对系统的状态向量做最优估计,并应用到系统的全状态反馈控制中,可以有效的提高系统的鲁棒性,

(3)      以探测搜索、捕获跟踪、激光瞄准为技术依托的机载光电稳定跟踪系统已成为发展新一代光电装备的战略基点之一,对于国防安全、社会稳定、现代化生产和生活有着非常重要的意义。在机载光电稳定跟踪系统中,图像跟踪是一个关键技术,直接决定了跟踪系统的性能。同时,图像跟踪也是计算机视觉领域的一个热点研究问题,在视觉监控、人机互动、机器人导航等领域有着广泛的应用。图像跟踪方法大致可分为两大类:概率跟踪方法和确定性跟踪方法。概率跟踪方法由于跟踪性能稳定、可靠,已成为图像跟踪的主流方法,卡尔曼滤波和粒子滤波是这类方法的典型代表。卡尔曼滤波对系统模型和后验分布有严格限制,只能处理线性、高斯、单模态的情况。

五、          我对卡尔曼滤波的体会

通过对卡尔曼滤波相关内容的学习,我对卡尔曼滤波的起源、原理、发展过程以及在实际中的广泛应用有了全新的认识。由于专业原因,平时在专业相关内容的学习、仿真和项目研究过程中还没有在实际中用到卡尔曼滤波,在课堂上的学习和这次大作业相关资料的查阅之后,我总结了自己对卡尔曼滤波的一些认识。下面抛开卡尔曼滤波的公式,用一个简单的例子来进行说明。

假定我们研究的对象是某个物品在市场上的平均价格,根据我们的经验,该物品的平均价格不会发生变化,即是恒定不变的,某天的平均价格和前一天的一样。但是我们对于我们的经验也不是百分之百的肯定,就可能出现上下几元的偏差,可以把这个偏差当做是我们做信号处理中所遇到的噪声,若这些偏差和前后时间没有关系而且服从高斯分配的,就把这个偏差看成是高斯白噪声。同时,我们会有专门的人员来反馈市场上该物品的价格,当然,这个价格中也存在高斯白噪声的偏差。

那么现在,对于某一天该物品的平均价格,我们就有两个值,一个是根据经验的预测值,如同系统的预测值,一个是人员反馈回来的值,如同测量值。若要估计第d天的平均价格,首先要根据d-1天的平均价格来预测第d天的平均价格。由于我们估计价格是不变的,即这两天的平均价格相同,设为100元,同时该值的高斯噪声的偏差是5元。我们从人员反馈回来的价格是107元,偏差是3元。那么,实际平均价格是多少呢?我们是该相信自己的推断还是相信人员的反馈?或者是相信哪个多一点呢?

我们可以用他们的协方差来判断。因为d02=52/(52+32)=0.735,所以d0=0.86,我们可以估算出第d天的实际平均价格是:100+0.86*(107-100)=106.02。可以看出,因为人员反馈的协方差比较小,即比较相信人员反馈,所以估算出的最优平均价格偏向人员反馈的价格。此外,还要计算这个最优平均价格的偏差,算法为((1-d0)*52)^0.5=2.57。这个偏差就是继续估算第d+1天平均价格的偏差。通过这样的方法,卡尔曼滤波器就不断的进行递归,从而估算出最优的值。

当然这样的比喻并不是很恰当,实际中卡尔曼滤波的应用过程远远比这个要复杂的多,同时现在根据实际情况对卡尔曼滤波器的改进也很多,使得其越来越适应实际的需求。关于卡尔曼滤波的学习对我的帮助是很大的,我不仅掌握了结合课堂内容进行扩展学习的方法,也为日后进行信息处理的研究打下了基础。这种方法也可以运用于其他方面的学习,令我受益匪浅。



 

  • 15
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
卡尔曼滤波(Kalman Filter)是一种用于估计系统状态的递归滤波器,它通过融合系统的测量值和预测值来提供最优的状态估计。卡尔曼滤波器假设系统的状态和测量值都是高斯分布,并且系统的动态和测量模型都是线性的。 扩展卡尔曼滤波(Extended Kalman Filter,EKF)是卡尔曼滤波的一种扩展,用于处理非线性系统。EKF通过在每个时间步骤上线性化非线性模型来近似系统的动态和测量模型,然后使用卡尔曼滤波的方法进行状态估计。 无损卡尔曼滤波(Unscented Kalman Filter,UKF)是对EKF的一种改进,它通过使用无损变换(unscented transformation)来近似非线性函数的传播和观测模型。相比于EKF,UKF能够更准确地估计非线性系统的状态。 下面是使用Matlab实现卡尔曼滤波、扩展卡尔曼滤波和无损卡尔曼滤波的简单示例代码: 1. 卡尔曼滤波: ```matlab % 系统动态模型 A = [1 1; 0 1]; B = [0.5; 1]; C = [1 0]; D = 0; % 系统噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; R = 1; % 初始化状态和协方差矩阵 x0 = [0; 0]; P0 = eye(2); % 测量值 y = [1.2; 2.3; 3.5; 4.7]; % 卡尔曼滤波 x_kalman = zeros(2, length(y)); P_kalman = zeros(2, 2, length(y)); x_kalman(:, 1) = x0; P_kalman(:, :, 1) = P0; for k = 2:length(y) % 预测步骤 x_pred = A * x_kalman(:, k-1) + B * u; P_pred = A * P_kalman(:, :, k-1) * A' + Q; % 更新步骤 K = P_pred * C' / (C * P_pred * C' + R); x_kalman(:, k) = x_pred + K * (y(k) - C * x_pred); P_kalman(:, :, k) = (eye(2) - K * C) * P_pred; end % 输出结果 disp(x_kalman); ``` 2. 扩展卡尔曼滤波: ```matlab % 系统动态模型和测量模型(非线性) f = @(x) [x(1) + x(2); x(2)]; h = @(x) x(1); % 系统噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; R = 1; % 初始化状态和协方差矩阵 x0 = [0; 0]; P0 = eye(2); % 测量值 y = [1.2; 2.3; 3.5; 4.7]; % 扩展卡尔曼滤波 x_ekf = zeros(2, length(y)); P_ekf = zeros(2, 2, length(y)); x_ekf(:, 1) = x0; P_ekf(:, :, 1) = P0; for k = 2:length(y) % 预测步骤 x_pred = f(x_ekf(:, k-1)); F = [1 1; 0 1]; % 线性化系统动态模型 P_pred = F * P_ekf(:, :, k-1) * F' + Q; % 更新步骤 H = [1 0]; % 线性化测量模型 K = P_pred * H' / (H * P_pred * H' + R); x_ekf(:, k) = x_pred + K * (y(k) - h(x_pred)); P_ekf(:, :, k) = (eye(2) - K * H) * P_pred; end % 输出结果 disp(x_ekf); ``` 3. 无损卡尔曼滤波: ```matlab % 系统动态模型和测量模型(非线性) f = @(x) [x(1) + x(2); x(2)]; h = @(x) x(1); % 系统噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; R = 1; % 初始化状态和协方差矩阵 x0 = [0; 0]; P0 = eye(2); % 测量值 y = [1.2; 2.3; 3.5; 4.7]; % 无损卡尔曼滤波 x_ukf = zeros(2, length(y)); P_ukf = zeros(2, 2, length(y)); x_ukf(:, 1) = x0; P_ukf(:, :, 1) = P0; for k = 2:length(y) % 预测步骤 [x_pred, P_pred] = unscented_transform(f, x_ukf(:, k-1), P_ukf(:, :, k-1), Q); % 更新步骤 [y_pred, S] = unscented_transform(h, x_pred, P_pred, R); C = P_pred * S' / S / S'; x_ukf(:, k) = x_pred + C * (y(k) - y_pred); P_ukf(:, :, k) = P_pred - C * S * C'; end % 输出结果 disp(x_ukf); ``` 以上是简单的卡尔曼滤波、扩展卡尔曼滤波和无损卡尔曼滤波的Matlab代码示例。请注意,这只是一个简单的演示,实际应用中可能需要根据具体问题进行适当的修改和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值