搜档网
当前位置:搜档网 › 卡尔曼滤波简介及其算法实现代码

卡尔曼滤波简介及其算法实现代码

卡尔曼滤波简介及其算法实现代码
卡尔曼滤波简介及其算法实现代码

卡尔曼滤波简介及其算法实现代码

卡尔曼滤波算法实现代码(C,C++分别实现)

卡尔曼滤波器简介

近来发现有些问题很多人都很感兴趣。所以在这里希望能尽自己能力跟大家讨论一些力所能及的算法。现在先讨论一下卡尔曼滤波器,如果时间和能力允许,我还希望能够写写其他的算法,例如遗传算法,傅立叶变换,数字滤波,神经网络,图像处理等等。

因为这里不能写复杂的数学公式,所以也只能形象的描述。希望如果哪位是这方面的专家,欢迎讨论更正。

卡尔曼滤波器– Kalman Filter

1.什么是卡尔曼滤波器

(What is the Kalman Filter?)

在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人!

卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下载:

https://www.sodocs.net/doc/108559670.html,/~welch/media/pdf/Kalman1960.pdf。

简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。

2.卡尔曼滤波器的介绍

(Introduction to the Kalman Filter)

为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。但是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。

在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。

假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就

是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。

好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。

假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟 k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。然后,你从温度计那里得到了k时刻的温度值,假设是25度,同时该值的偏差是4度。

由于我们用于估算k时刻的实际温度有两个温度值,分别是23度和25度。究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的 covariance来判断。因为Kg^2=5^2/(5^2+4^2),所以Kg=0.78,我们可以估算出k时刻的实际温度值是:23+0.78* (25-23)=24.56度。可以看出,因为温度计的covariance比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。

现在我们已经得到k时刻的最优温度值了,下一步就是要进入k+1时刻,进行新的最优估算。到现在为止,好像还没看到什么自回归的东西出现。对了,在进入 k+1时刻之前,我们还要算出k 时刻那个最优值(24.56度)的偏差。算法如下:((1-Kg)*5^2)^0.5=2.35。这里的5就是上面的k时刻你预测的那个23度温度值的偏差,得出的2.35就是进入k+1时刻以后k时刻估算出的最优温度值的偏差(对应于上面的3)。

就是这样,卡尔曼滤波器就不断的把covariance递归,从而估算出最优的温度值。他运行的很快,而且它只保留了上一时刻的covariance。上面的Kg,就是卡尔曼增益(Kalman Gain)。他可以随不同的时刻而改变他自己的值,是不是很神奇!

下面就要言归正传,讨论真正工程系统上的卡尔曼。

3.卡尔曼滤波器算法

(The Kalman Filter Algorithm)

在这一部分,我们就来描述源于Dr Kalman 的卡尔曼滤波器。下面的描述,会涉及一些基本的概念知识,包括概率(Probability),随即变量(Random Variable),高斯或正态分配(Gaussian Distribution)还有State-space Model等等。但对于卡尔曼滤波器的详细证明,这里不能一一描述。

首先,我们先要引入一个离散控制过程的系统。该系统可用一个线性随机微分方程(Linear Stochastic Difference equation)来描述:

X(k)=A X(k-1)+B U(k)+W(k)

再加上系统的测量值:

Z(k)=H X(k)+V(k)

上两式子中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。Z(k)是k时刻的测量值,H 是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance 分别是Q,R(这里我们假设他们不随系统状态变化而变化)。

对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。下面我们来用他们结合他们的covariances 来估算系统的最优化输出(类似上一节那个温度的例子)。

首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:

X(k|k-1)=A X(k-1|k-1)+B U(k) (1)

式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。

到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的covariance还没更新。我们用P表示covariance:

P(k|k-1)=A P(k-1|k-1) A’+Q (2)

式 (2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的covariance,A’表示A的转置矩阵,Q是系统过程的covariance。式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。

现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):

X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)

其中Kg为卡尔曼增益(Kalman Gain):

Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) (4)

到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。但是为了要另卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的covariance:

P(k|k)=(I-Kg(k) H)P(k|k-1) (5)

其中I 为1的矩阵,对于单模型单测量,I=1。当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。这样,算法就可以自回归的运算下去。

卡尔曼滤波器的原理基本描述了,式子1,2,3,4和5就是他的5 个基本公式。根据这5个公式,可以很容易的实现计算机的程序。

下面,我会用程序举一个实际运行的例子。。。

4.简单例子

(A Simple Example)

这里我们结合第二第三节,举一个非常简单的例子来说明卡尔曼滤波器的工作过程。所举的例子是进一步描述第二节的例子,而且还会配以程序模拟结果。

根据第二节的描述,把房间看成一个系统,然后对这个系统建模。当然,我们见的模型不需要非常地精确。我们所知道的这个房间的温度是跟前一时刻的温度相同的,所以A=1。没有控制量,所以U(k)=0。因此得出:

X(k|k-1)=X(k-1|k-1) (6)

式子(2)可以改成:

P(k|k-1)=P(k-1|k-1) +Q (7)

因为测量的值是温度计的,跟温度直接对应,所以H=1。式子3,4,5可以改成以下:

X(k|k)= X(k|k-1)+Kg(k) (Z(k)-X(k|k-1)) (8)

Kg(k)= P(k|k-1) / (P(k|k-1) + R) (9)

P(k|k)=(1-Kg(k))P(k|k-1) (10)

现在我们模拟一组测量值作为输入。假设房间的真实温度为25度,我模拟了200个测量值,这些测量值的平均值为25度,但是加入了标准偏差为几度的高斯白噪声(在图中为蓝线)。

为了令卡尔曼滤波器开始工作,我们需要告诉卡尔曼两个零时刻的初始值,是X(0|0)和P(0|0)。他们的值不用太在意,随便给一个就可以了,因为随着卡尔曼的工作,X会逐渐的收敛。但是对于P,一般不要取0,因为这样可能会令卡尔曼完全相信你给定的X(0|0)是系统最优的,从而使算法不能收敛。我选了 X(0|0)=1度,P(0|0)=10。

该系统的真实温度为25度,图中用黑线表示。图中红线是卡尔曼滤波器输出的最优化结果(该结果在算法中设置了Q=1e-6,R=1e-1)。

最佳线性滤波理论起源于40年代美国科学家Wiener和前苏联科学家Kолмогоров等人的研究工作,后人统称为维纳滤波理论。从理论上说,维纳滤波的最大缺点是必须用到无限过去的数据,不适用于实时处理。为了克服这一缺点,60年代Kalman把状态空间模型引入滤波理论,并导出了一套递推估计算法,后人称之为卡尔曼滤波理论。卡尔曼滤波是以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。它适合于实时处理和计算机运算。

现设线性时变系统的离散状态防城和观测方程为:

X(k) = F(k,k-1)·X(k-1)+T(k,k-1)·U(k-1)

Y(k) = H(k)·X(k)+N(k)

其中

X(k)和Y(k)分别是k时刻的状态矢量和观测矢量

F(k,k-1)为状态转移矩阵

U(k)为k时刻动态噪声

T(k,k-1)为系统控制矩阵

H(k)为k时刻观测矩阵

N(k)为k时刻观测噪声

则卡尔曼滤波的算法流程为:

预估计X(k)^= F(k,k-1)·X(k-1)

1.计算预估计协方差矩阵

C(k)^=F(k,k-1)×C(k)×F(k,k-1)'+T(k,k-1)×Q(k)×T(k,k-1)' Q(k) = U(k)×U(k)'

2.计算卡尔曼增益矩阵

K(k) = C(k)^×H(k)'×[H(k)×C(k)^×H(k)'+R(k)]^(-1)

R(k) = N(k)×N(k)'

3.更新估计

X(k)~=X(k)^+K(k)×[Y(k)-H(k)×X(k)^]

4.计算更新后估计协防差矩阵

C(k)~ =

[I-K(k)×H(k)]×C(k)^×[I-K(k)×H(k)]'+K(k)×R(k)×K(k)'

5.X(k+1) = X(k)~

C(k+1) = C(k)~

重复以上步骤

Kalman Filter

科技2010-05-29 21:13:49 阅读90 评论0 字号:大中小订阅

Kalman Filter是一个高效的递归滤波器,它可以实现从一系列的噪声测量中,估计动态系统的状态。广泛应用于包含Radar、计算机视觉在内的等工程应用领域,在控制理论和控制系统工程中也是一个非常重要的课题。连同线性均方规划,卡尔曼滤波器可以用于解决LQG(Linear-quadratic-Gaussian control)问题。卡尔曼滤波器,线性均方归化及线性均方高斯控制器,是大部分控制领域基础难题的主要解决途径。

目录

■ 1 应用实例

■ 2 命名和发展历史

■ 3 基本动态系统模型

■ 4 卡尔曼滤波器

4.1 预测

4.2 更新

4.3 不变量

■ 5 实例

■ 6 推导

6.1 后验估计协方差矩阵推导

6.2 Kalman 增益推导

6.3 后验误差协方差矩阵简化

■ 7 信息滤波

■ 8 非线性滤波器

8.1 扩展Kalman 滤波

8.2 Unscented Kalman filter

■ 9 Kalman-Bucy滤波

■ 10 应用

■11 参见

■12 参考文献

■13 外部链接

■ 1 应用实例

一个简单的应用是估计物体的位置和速度;简要描述如下:假设我们可以获取一个物体的包含噪声的一系列位置观测数据,我们可以获得此物体的精确速度和位置连续更新信息。

例如,对于雷达来说,我们关心的是跟踪目标,而目标的位置,速度,加速度的测量值是时刻含有误差的,卡尔曼滤波器利用目标的动态信息,去掉噪声影响,获取目标此刻好的位置估计(滤波),将来位置估计(预测),也可以是过去位置估计的(插值或平滑)

■ 2 命名和发展历史

这个滤波器以它的发明者Rudolf.E.Kalman 而命名,但是在Kanlman之前,Thorvald Nicolai Thiele和Peter Swerling 已经提出了类似的算法。Stanley Schmidt 首次实现了Kalman滤波器。在一次对NASA Ames Research Center访问中,卡尔曼发现他的方法对于解决阿波罗计划的轨迹预测很有用,后来阿波罗飞船导航电脑就使用了这种滤波器。这个滤波器可以追溯到Swerling(1958),Kalman(1960),Kalman和Bucy(1961)发表的论文。

这个滤波器有时叫做Stratonovich-Kalman-Bucy滤波器。因为更为一般的非线性滤波器最初由Ruslan L.Stratonovich发明,而Stratonovich-Kalman-Bucy滤波器只是非线性滤波器的一个特例。事实上,1960年夏季,Kalman和Stratonovich在一个Moscow召开的会议中相遇,

而作为非线性特例的线性滤波方程,早已经由Stratonovich在此以前发表了。

在控制领域,Kalman滤波被称为线性二次型估计,目前,卡尔曼滤波已经有很多不同的实现,有施密特扩展滤波器、信息滤波器以及一系列的Bierman和Thornton 发明的平方根滤波器等,而卡尔曼最初提出的形式现在称为简单卡尔曼滤波器。也许最常见的卡尔曼滤波器应用是锁相环,它在收音机、计算机和几乎全部视频或通讯设备中广泛存在。

■ 3 基本动态系统模型

Kalman滤波基于时域描述的线性动态系统,它的模型是Markov Chain,而Markov Chain建立在一个被高斯噪声干扰的线性算子之上。系统的状态可以用一个元素为实数的向量表示。随着离散时间的增加,这个线性算子就会作用到当前状态之上,产生一个新的状态,并且会带入一定的噪声,同时一些已知的控制信息也会加入。同时另外一个受噪声干扰的线性算子将产生这些隐含状态的可见输出。Kalman 滤波可以被看作为类似隐马尔科夫模型,它们的显著不同点在于:隐状态变量的取值空间是一个连续的空间,而离散状态空间则不是;另为,隐马尔科夫模型可以描述下一个状态的一个任意分布,这也与应用于Kalman滤波器中的高斯噪声模型相反。Kalman滤波器方程和隐马尔科夫方程之间有很大的二重性,关于Kalman 滤波方程和隐马尔科夫方程之间二重性参看Roweis and Ghahramani(1999)[4]。

为了从一系列的噪声观测中,应用Kalman滤波估计观测过程的内部状态。我们必须把这个过程在Kalman 滤波器的框架下建立模型,这就意味着,对于

每一步k 我们要定义矩阵、、、、如下:

Kalman Filter 假设k 时刻的真实状态是从k-1时刻演化而来,符合下式

这里

■是作用在前一状态的状态转移模型(状态转移矩阵)

■是作用在控制向量上的控制输入模型(输入输出矩阵)

■ 是过程噪声,假设是均值为0的白噪声,协方差为则:

在k时刻,假设真实状态的观测,满足如下公式:

其中是观测模型(观测矩阵),它把真实状态映射到观测空间,是观测噪声,假设它

是均值是0,方差是的高斯白噪声:

Kalman Filter基本动态系统模型如图(1)所示,圆圈代表向量,方块代表矩阵,星号代表高斯噪声,其协方差在右下方标出。

初始状态以及每一时刻的噪声向量{x0, w1, ..., wk, v1 ... vk} 都为认为是互相独立的。实际中,真实世界中动态系统并不是严格的符合此模型。但是Kalman模型是设计在噪声过程工作的,一个近似的符合已经可以使这个滤波器非常有用了,更多复杂模型关于Kalman Filter 模型的变种,将在下述中讨论:

图(1)

■ 4 卡尔曼滤波器

Kalman Filter 是一个递归的估计,即只要获知上一时刻的状态估计和当前状态的观测就可以计算出当前状态的估计,不同于其他的估计技术,Kalman 滤波器不需要观测或/和估计的历史记录,Kalman Filter 是一个纯粹的时域滤波器,而不像低通滤波器等频域滤波器那样,需要在频域中设计,然后转换到时域中应用。

下面,代表已知从m到n-1包括m时刻的观测在n时刻的估计值

卡尔曼滤波器的状态由以下两个变量表示:

■ 已知k时刻以前时刻观测值,k时刻的状态估计值

■ 误差协方差矩阵,度量状态估计的精度程度

Kalman 滤波包括两个阶段:预测和更新;在估计阶段,滤波器应用上一状态的估计做出对当前状态的估计。在更新阶段,滤波器利用在当前状态的观测值优化预测阶段的预测值,以获的一个更精确的当前状态的估计。

4.1 预测

状态预测:

估计协方差预测:

4.2 更新

新息或测量余量

新息协方差

Kalman 增益

状态估计更新

状态协方差更新

使用上述公式计算仅在最优卡尔曼增益的时候有效。使用其他增益公式要复杂一些,看见推导

4.3 不变量

如果模型准确,和值将准确反映最初状态的分布,那么下面所有不变量保持不变,所有估计的误差均值为0:

这里表示的期望,而协方差矩阵则反映的估计的协方差

■ 5 实例

考虑在一个无摩擦、无限长的直轨道上的一辆小车,它的初始位置在0点,但是它会随机的受到冲击作用,我们每隔测量一次小车的位置,但是这些测量数据不是很精确。我们想

建立一个关于小车位置和速度的模型,这里我们描述如何建立这个模型,以及从这个模型出发如何推导出Kalman 滤波器。

因为小车没有控制输入,我们可以忽略和。由于F,H,R和Q全是恒值,我们可以忽略时间下标。

小车的位置和速度用线性空间可以描述如下:

这里表示速度,也就是位置对时间的微分。

我们假设在时间间隔k-1和k之间,小车受到一个恒定的冲击,服从均值为0,方差为的正态分布,根据Newton 动力学方程,可得到:

其中

我们发现:

在每一时刻,我们获取真实位置的.我们假设噪声服噪声干扰测量,假设测量噪声服从均值为0,标准差为正态分布。

其中H= [1 0],

我们可以得到足够精度的初始状态数据,所以我们可以初始化,

如果初始位置和速度不是精确的知道,那么协方差矩阵应该初始化为一个对角线元素B为适当大小的矩阵如下:

这样与模型中已有信息相比,滤波器更趋向于使用首次的测量数据信息。

■ 6 推导

6.1 后验估计协方差矩阵推导

首先开始不变量后验估计协方差矩阵的推导:带入定义,可

得,代入可得

代入可得

整理误差向量可得,

由于误差向量与其他不相关,所以

由协方差矩阵性质则

:使用不变量Pk|k-1以及

Rk的定义这一项可以写作,此公式(Joseph form)对任意增益Kk的都成立,如果Kk最优卡尔曼增益,则可以进一步简化,见下文。

6.2 Kalman 增益推导

Kalman 滤波器是一个最小均方误差估计器,先验状态误差估计可表示为我们最小化这个矢量幅度平方的期望值,这等价于最小化后验估计协方差矩阵的

迹,通过展开合并公式,可得

当矩阵导数为0时,矩阵的迹取最小值,

从这个式子解出Kalman增益

这个增益就是最优Kalman增益,应用它可以得到最小均方误差。

6.3 后验误差协方差矩阵简化

当应用上述最优Kalman增益时,后验误差协方差可以得到简化,在最优Kalman增益两边

同时乘以,可得,参见后验误差协方差公式展开

,带入上式,可得:

这个公式的计算比较简单,所以实际中总是使用这个公式,但是需注意这公式仅在最优卡尔曼增益时它才成立。如果算术精度总是很低而导致数值稳定性出现问题,或者特意使用非最优卡尔曼增益,那么就不能使用这个简化;必须使用上面导出的后验误差协方差公式。

■7 信息滤波

在信息滤波器(逆方差滤波器)中,协方差估计和状态估计将会被信息矩阵和信息向量所取代,它们的定义如下:

类似的预测协方差和预测状态也有等价的信息形式,定义如下:

同样测量协方差和测量向量定义为:

信息更新现在变成一个加和形式:

信息滤波器的主要优点在于N和测量数据都可以用于滤波,简单的通过信息矩阵和信息向量的加和。

为了预测信息滤波器,信息矩阵和信息向量必须变换到它们的等价状态空间,或者应用下述信息空间更新:

这里F和Q必须可逆。

■ 8 非线性滤波器

8.1 扩展Kalman 滤波

估计过程

如以上所述,卡尔曼滤波器估计一个线性随机差分方程描述的离散时间过程的状态变量

,但是如果被估计的过程和(或)观测变量与过程的关系不时线性关系。那该如何处理

呢?一些很有趣和成功的Kalman滤波器应用就是处理这些情况的。将期望和方差线性化的卡尔曼滤波器称作扩展卡尔曼滤波器(Extended Kalman Filter),简称EKF。

同泰勒级数类似,面对非线性关系时,我们可以通过求过程和量测方程的偏导来线性化并计算当前估计,为了实现这个目的,我们必须修改上面的一些描述,我们假设过程仍具有状态

向量,但其状态方程已变为非线性随机差分方程的形式。

观测变量为:

这里随机变量和分别为过程噪声和观测噪声。差分方程式(1.1)中的非线性函数f 将

过去k-1时刻状态与现在k时刻状态联系起来。在测量方程(2.2)中,输入函数uk和零均值过程噪声wk是它的参数。非线性函数h 反映了状态变量xk 和观测变量zk 的关系。

实际中我们并不知道每一时刻噪声wk 和vk 各自真实值,但是我们可以在假设他们不存在的前提下,近似估计状态向量和测量向量:

这里是相对于前一时刻k的后验状态估计。

有一点非常重要,那就是扩展卡尔曼滤波器的一个基本缺陷:离散随机变量的分布(或连续随机变量的密度)在经过非线性系统转化后不再是正态的了。扩展卡尔曼滤波器其实就是一个通过线性化而达到渐进最优贝叶斯决策的特殊状态估计器。[Julier96]中描述了一项有趣的研究,Julier设计了扩展卡尔曼滤波器的一种变体,使得通过非线性转换后的随机变量仍具有正态分布特性。

滤波器的计算原型

为了估计一个具有非线性差分和量测关系的过程,我们先给出式1.3和式1.4的一个新的线性化表示:

其中:

xk 和zk是状态向量和观测向量的真值;

和来自1.3式和1.4式,是状态向量和观测向量的近似值;

是k 时刻状态向量的后验估计;

随机变量wk 和vk 表示过程激励噪声和观测噪声。

A是f 对x的偏导的雅可比矩阵:

W 是f 对w 的偏导的雅可比矩阵:

H 是h 对x 的偏导的雅可比矩阵:

V 是h 对v 的偏导的雅可比矩阵:

卡尔曼滤波算法总结

Kalman_Filter(float Gyro,float Accel) { Angle+=(Gyro - Q_bias) * dt; Pdot[0]=Q_angle - PP[0][1] - PP[1][0]; Pdot[1]= - PP[1][1]; Pdot[2]= - PP[1][1]; Pdot[3]=Q_gyro; PP[0][0] += Pdot[0] * dt; PP[0][1] += Pdot[1] * dt; PP[1][0] += Pdot[2] * dt; PP[1][1] += Pdot[3] * dt; Angle_err = Accel - Angle; PCt_0 = C_0 * PP[0][0]; PCt_1 = C_0 * PP[1][0]; E = R_angle + C_0 * PCt_0; K_0 = PCt_0 / E; K_1 = PCt_1 / E; t_0 = PCt_0; t_1 = C_0 * PP[0][1]; PP[0][0] -= K_0 * t_0; PP[0][1] -= K_0 * t_1; PP[1][0] -= K_1 * t_0; PP[1][1] -= K_1 * t_1; Angle += K_0 * Angle_err; Q_bias += K_1 * Angle_err; Gyro_x = Gyro - Q_bias; } 首先是卡尔曼滤波的5个方程: -=--+(1)先验估计 X k k AX k k Bu k (|1)(1|1)() -=--+(2)协方差矩阵的预测(|1)(1|1)' P k k AP k k A Q

卡尔曼滤波算法与matlab实现

一个应用实例详解卡尔曼滤波及其算法实现 标签:算法filtermatlabalgorithm优化工作 2012-05-14 10:48 75511人阅读评论(25) 收藏举报分类: 数据结构及其算法(4) 为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。但是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。 在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。 假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。 我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。 好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。 假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。然后,你从温度计那里得到了k时刻的温度值,假设是25度,同时该值的偏差是4度。 由于我们用于估算k时刻的实际温度有两个温度值,分别是23 度和25度。究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的covariance(协方差)来判断。因为Kg^2=5^2/(5^2+4^2),所以Kg=0.78,我们可以估算出k时刻的实际温度值是:23+0.78*(25-23)=24.56度。 可以看出,因为温度计的covariance比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。 现在我们已经得到k时刻的最优温度值了,下一步就是要进入k+1时刻,进行新的最优估算。到现在为止,好像还没看到什么自回归的东西出现。对了,在进入k+1时刻之前,我们还要算出k时刻那个最优值(24.56 度)的偏差。算法如下:((1-Kg)*5^2)^0.5=2.35。这里的5就是上面的k时刻你预测的那个23度

几种非线性滤波算法的研究-内附程序

2017 年秋季学期研究生课程考核 (读书报告、研究报告) 考核科目:雷达系统导论 学生所在(系):电子与信息工程学院 学生所在学科:电子与同学工程 学生姓名: 学号: 学生类别: 考核结果阅卷人 第 1 页(共页)

几种非线性滤波算法的介绍与性能分析 作者姓名:学号: 专业院系:电信学院电子工程系 电子邮件: 摘要—非线性滤波算法在雷达目标跟踪中有着重要的应用,对雷达的跟踪性能有着至关重要的影响。好的滤波算法有利于目标航迹的建立及保持,能够得到较精确的目标位置,为发现目标后的后续工作提供可靠的数据依据。本文重点介绍了雷达数据处理中的几种非线性滤波算法:扩展卡尔曼滤波(EKF)、不敏卡尔曼滤波(UKF)、粒子滤波(PF),并且给出了一个利用这三种算法进行数据处理的一个实例,通过这个实例对比分析了这三种算法的性能以及优劣。 关键字—非线性滤波算法;扩展卡尔曼滤波;不敏卡尔曼滤波;粒子滤波; I.概述(一级表题格式) 在雷达对目标进行跟踪前要先对目标进行检测。对于满足检测条件的目标就需要进行跟踪,在跟踪的过程中可以利用新获得的数据完成对目标的进一步检测比如去除虚假目标等,同时利用跟踪获得数据可以进一步完成对目标动态特性的检测和识别。因此对目标进行准确的跟踪是雷达性能的一个重要指标。在检测到满足条件的目标后,根据目标运动状态建立目标运动模型,然后对目标跟踪算法进行设计,这是雷达目标跟踪中的核心部分。 目前主要的跟踪算法包括线性自回归滤波,两点外推滤波、维纳滤波、- αβ滤波、加权最小二乘滤波、维纳滤波和卡尔曼滤波[1]。对于线性系统而言最优滤波的方法就是卡尔曼滤波,卡尔曼滤波是线性高斯模型下的最优状态估计算法。但是实际问题中目标的运动模型往往不是线性的,因此卡尔曼滤波具有很大的局限性。目前主要用的非线性滤波算法可以分为高斯滤波和粒子滤波[2]。不敏卡尔曼滤波和扩展卡尔曼滤波就是高斯滤波中的典型代表,也是应用相对较为广泛的。粒子滤波的应用范围比高斯滤波的适用范围要广,对于系统状态非线性,观测模型非高斯等问题都有很好的适用性。本文具体分析阐述了扩展卡尔曼滤波算法,不敏卡尔曼滤波算法,粒子滤波算法,并且通过一个实例利用仿真的方法分析了这三种算法在滤波性能上的优劣,最后对这三种算法做了一定的总结。 我本科毕业设计题目为《基于历史数据的路径生成算法研究》,由于我是跨专业保研到电信学院,该课题所研究内容不属于雷达系统研究范围,是一种城市路网最快路径生成算法。 II.几种非线性滤波算法 A.扩展卡尔曼滤波 扩展卡尔曼滤波是将非线性系统转换为近似的线性系统的一种方法,其核心思想是围绕滤波值将非线性函数展开成泰勒级数并略去二阶及以上的项,得到一个近似的线性化模型,然后应用卡尔曼滤波完成状态估计。 扩展卡尔曼滤波状态空间模型: k k k w x f+ = + ) ( x 1 状态方程 k k k v x h+ =) ( z观测方程 其中(.) f和(.) h为非线性函数 在扩展卡尔曼滤波中,状态的预测以及观测值的预测由非线性函数计算得出,线性卡尔曼滤波中的状态转移矩阵A阵和观测矩阵H阵由f和h函数的雅克比矩阵代替。 对 (.) f和(.) h Taylor展开,只保留一次项有: ) ? ( ) ?( ) ( k k k k k x x A x f x f- + ≈ ) ? ( ) ?( ) ( k k k k k x x H x h x h- + ≈ 其中: k k x x k k dx df A ?= =为f对 1- k x求导的雅克比矩阵 k k x x k k dx dh H ?= =为h对 1- k x求导的雅克比矩阵 ) ?( ? 1-k k x f x=,于是可以得出: k k k k k k k w x A x f x A x+ - + ≈ + ) ? ) ?( ( 1 k k k k k k k v x H x h x H z+ - + ≈ + ) ? ) ?( ( 1 通过以上变换,将非线性问题线性化。接下来EKF 滤波过程同线性卡尔曼滤波相同,公式如下: )) | (?( ) |1 ( X?k k X f k k= + ) ( ) ( ) | ( ) ( ) |1 (P k Q k k k P k k k+ Φ' Φ = + )1 ( )1 ( ) |1 ( )1 ( )1 (S+ + + ' + + = +k R k H k k P k H k )1 ( )1 ( ) |1 ( )1 ( K1+ + ' + = +-k S k H k k P k

几种卡尔曼滤波算法理论

自适应卡尔曼滤波 卡尔曼滤波发散的原因 如果卡尔曼滤波是稳定的,随着滤波的推进,卡尔曼滤波估计的精度应该越来越高,滤波误差方差阵也应趋于稳定值或有界值。但在实际应用中,随着量测值数目的增加,由于估计误差的均值和估计误差协方差可能越来越大,使滤波逐渐失去准确估计的作用,这种现象称为卡尔曼滤波发散。 引起滤波器发散的主要原因有两点: (1)描述系统动力学特性的数学模型和噪声估计模型不准确,不能直接真实地反映物理过程,使得模型与获得的量测值不匹配而导致滤波发散。这种由于模型建立过于粗糙或失真所引起的发散称为滤波发散。 (2)由于卡尔曼滤波是递推过程,随着滤波步数的增加,舍入误差将逐渐积累。如果计算机字长不够长,这种积累误差很有可能使估计误差方差阵失去非负定性甚至失去对称性,使滤波增益矩阵逐渐失去合适的加权作用而导致发散。这种由于计算舍入误差所引起的发散称为计算发散。 针对上述卡尔曼滤波发散的原因,目前已经出现了几种有效抑制滤波发散的方法,常用的有衰减记忆滤波、限定记忆滤波、扩充状态滤波、有限下界滤波、平方根滤波、和自适应滤波等。这些方法本质上都是以牺牲滤波器的最优性为代价来抑制滤波发散,也就是说,多数都是次优滤波方法。 自适应滤波 在很多实际系统中,系统过程噪声方差矩阵Q和量测误差方差阵R事先是不知道的,有时甚至连状态转移矩阵 或量测矩阵H也不能确切建立。如果所建立的模型与实际模型不符可能回引起滤波发散。自适应滤波就是这样一种具有抑制滤波发散作用的滤波方法。在滤波过程中,自适应滤波一方面利用量测值修正预测值,同时也对未知的或不确切的系统模型参数和噪声统计参数进行估计修正。自适应滤波的方法很多,包括贝叶斯法、极大似然法、相关法与协方差匹配法,其中最基本也是最重要的是相关法,而相关法可分为输出相关法和新息相关法。

卡尔曼滤波算法(C--C++两种实现代码)

卡尔曼滤波算法实现代码 C++实现代码如下: ============================kalman.h================= =============== // kalman.h: interface for the kalman class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_KALMAN_H__ED3D740F_01D2_4616_8B74_8BF57636F2C0__IN CLUDED_) #define AFX_KALMAN_H__ED3D740F_01D2_4616_8B74_8BF57636F2C0__INCLU DED_ #if _MSC_VER > 1000 #pragma once #endif// _MSC_VER > 1000 #include #include "cv.h" class kalman { public: void init_kalman(int x,int xv,int y,int yv); CvKalman* cvkalman; CvMat* state; CvMat* process_noise; CvMat* measurement; const CvMat* prediction; CvPoint2D32f get_predict(float x, float y);

kalman(int x=0,int xv=0,int y=0,int yv=0); //virtual ~kalman(); }; #endif// !defined(AFX_KALMAN_H__ED3D740F_01D2_4616_8B74_8BF57636F2C 0__INCLUDED_) ============================kalman.cpp=============== ================= #include "kalman.h" #include /* tester de printer toutes les valeurs des vecteurs*/ /* tester de changer les matrices du noises */ /* replace state by cvkalman->state_post ??? */ CvRandState rng; const double T = 0.1; kalman::kalman(int x,int xv,int y,int yv) { cvkalman = cvCreateKalman( 4, 4, 0 ); state = cvCreateMat( 4, 1, CV_32FC1 ); process_noise = cvCreateMat( 4, 1, CV_32FC1 ); measurement = cvCreateMat( 4, 1, CV_32FC1 ); int code = -1;

卡尔曼滤波的原理说明

卡尔曼滤波的原理说明 2009年10月23日星期五 01:19 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下 载:.edu/~welch/kalman/media/pdf/Kalman1960.pdf 简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。 2.卡尔曼滤波器的介绍 (Introduction to the Kalman Filter) 为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。但是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。 在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。 假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。 好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。 假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值

卡尔曼滤波算法总结

卡尔曼滤波算法总结-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

2015.12.12 void Kalman_Filter(float Gyro,float Accel) { Angle+=(Gyro - Q_bias) * dt; Pdot[0]=Q_angle - PP[0][1] - PP[1][0]; Pdot[1]= - PP[1][1]; Pdot[2]= - PP[1][1]; Pdot[3]=Q_gyro; PP[0][0] += Pdot[0] * dt; PP[0][1] += Pdot[1] * dt; PP[1][0] += Pdot[2] * dt; PP[1][1] += Pdot[3] * dt; Angle_err = Accel - Angle; PCt_0 = C_0 * PP[0][0]; PCt_1 = C_0 * PP[1][0]; E = R_angle + C_0 * PCt_0; K_0 = PCt_0 / E; K_1 = PCt_1 / E; t_0 = PCt_0; t_1 = C_0 * PP[0][1]; PP[0][0] -= K_0 * t_0; PP[0][1] -= K_0 * t_1; PP[1][0] -= K_1 * t_0; PP[1][1] -= K_1 * t_1; Angle += K_0 * Angle_err; Q_bias += K_1 * Angle_err; Gyro_x = Gyro - Q_bias; }

首先是卡尔曼滤波的5个方程: (|1)(1|1)() X k k AX k k Bu k -=--+(1)先验估计 (|1)(1|1)'P k k AP k k A Q -=--+(2)协方差矩阵的预测 ()(|1)'/(|1)')Kg k P k k H HP k k H R =--+(3)计算卡尔曼增益 (|)(|1)()(()(|1))X k k X k k Kg k Z k HX k k =-+--(4)进行修正 5个式子比较抽象,现在直接用实例来说: 一、卡尔曼滤波第一个式子 对于角度来说,我们认为此时的角度可以近似认为是上一时刻的角度值加上上一时刻陀螺仪测得的角加速度值乘以时间,因为d dt θω=?,角度微分等于时间的微分乘以角速度。但是陀螺仪有个静态漂移(而且还是变化的),静态漂移就是静止了没有角速度然后陀螺仪也会输出一个值,这个值肯定是没有意义的,计算时要把它减去。 由此我们得到了当前角度的预测值Angle Angle=Angle+(Gyro - Q_bias) * dt; 其中等号左边Angle 为此时的角度,等号右边Angle 为上一时刻的角度,Gyro 为陀螺仪测的角速度的值,dt 是两次滤波之间的时间间隔,我们的运行周期是4ms 或者6ms 。 同时 Q_bias 也是一个变化的量。 但是就预测来说认为现在的漂移跟上一时刻是相同的,即 Q_bias=Q_bias 将上面两个式子写成矩阵的形式 1_0 1_0 Angle dt Angle dt Q bias Q bia o s Gyr -= + 得到上式,这个式子对应于卡尔曼滤波的第一个式子 (|1)(1|1)() X k k AX k k Bu k -=--+ (|)(|1) P k k I Kg k H P k k =--(())(5)更新协方差阵

卡尔曼滤波简介及其算法实现代码

卡尔曼滤波简介及其算法实现代码 卡尔曼滤波算法实现代码(C,C++分别实现) 卡尔曼滤波器简介 近来发现有些问题很多人都很感兴趣。所以在这里希望能尽自己能力跟大家讨论一些力所能及的算法。现在先讨论一下卡尔曼滤波器,如果时间和能力允许,我还希望能够写写其他的算法,例如遗传算法,傅立叶变换,数字滤波,神经网络,图像处理等等。 因为这里不能写复杂的数学公式,所以也只能形象的描述。希望如果哪位是这方面的专家,欢迎讨论更正。 卡尔曼滤波器– Kalman Filter 1.什么是卡尔曼滤波器 (What is the Kalman Filter?) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下载: https://www.sodocs.net/doc/108559670.html,/~welch/media/pdf/Kalman1960.pdf。 简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。 2.卡尔曼滤波器的介绍 (Introduction to the Kalman Filter) 为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。但是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。 在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。 假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就

时间序列分析方法之卡尔曼滤波

第十三章 卡尔曼滤波 在本章中,我们介绍一种被称为卡尔曼滤波的十分有用的工具。卡尔曼滤波的基本思想是将动态系统表示成为一种称为状态空间表示的特殊情形。卡尔曼滤波是对系统线性投影进行序列更新的算法。除了一般的优点以外,这种算法对计算确切的有限样本预测、计算Gauss ARMA 模型的确切似然函数、估计具有时变参数的自回归模型等,都提供了重要方法。 §13.1 动态系统的状态空间表示 我们已经介绍过一些随机过程的动态表示方法,下面我们在以前的假设基础上,继续分析动态系统的表示方法。 13.1.1 继续使用的假设 假设表示时刻观测到的n 维随机向量,一类非常丰富的描述动态性的模型可以利用一些可能无法观测的被称为状态向量(state vector)的r 维向量表示,因此表示动态性的状态空间表示(state-space representation)由下列方程系统给出: 状态方程(state model) (13.1) 量测方程(observation model) (13.2) 这里,和分别是阶数为,和的参数矩阵,是的外生或者前定变量。方程(13.1)被称为状态方程(state model),方程(13.2)被称为量测方程(observation model),维向量和维向量都是向量白噪声,满足: (13.3) (13.4) 这里和是和阶矩阵。假设扰动项和对于所有阶滞后都是不相关的,即对所有和,有: (13.5) t x 是外生或者前定变量的假定意味着,在除了包含在121,,,y y y t t 内的信息以外,t x 没有为s t ξ和s t w ( ,2,1,0 s )提供任何新的信息。例如,t x 可以包括t y 的滞后值,也可以包括与 ξ和 w (任意 )不相关的变量。 方程系统中方程(13.1)至方程(13.5)可以表示有限观测值的序列},,,{21T y y y ,这时需要状态向量初始值1ξ。假设1ξ与t v 和t w 的任何实现都不相关:

Kalman滤波算法

Kalman 滤波算法 姓名:刘金强 专业:控制理论与控制工程 学号:2007255 ◆实验目的: (1)、掌握klman 滤波实现的原理和方法 (2)、掌握状态向量预测公式的实现过程 (3)、了解Riccati 差分方程实现的过程和新息的基本性质和过程的计算 ◆实验要求: 问题: F=[a1,a2,a3],其中a1=[1.0 0 0]的转置,a2=[0.3 1.0 0]的转置,a3=[0.1 0.2 0.4]的转置,x(0)=[3,-1,2]的转置;C=[b1,b2,b3],其中b1=[0.3 0.5]的转置,b2=[1,0.4]的转置,b3=[0.8 -0.7]的转置;V1(n)=[0 0 n1(n)sin(0.1n)]的转置,V2(n)=[n2(n) n3(n)];n1(n)为均值为零,方差为1的均匀分布白噪声;n2(n),n3(n)为均值为0,方差为0.1的均匀分布白噪声,n1(n),n2(n),n3(n)相互独立,试用卡尔曼滤波器算法估计x^(n). ◆实验原理: 初始条件: 1?(1)x =E{x(1)} K(1,0)=E{[x(1)- (1)x ][x(1)- (1)H x ]},其中(1)x =E{x(1)} 输入观测向量过程: 观测向量序列={y(1),…………y(n)} 已知参数: 状态转移矩阵F(n+1,n) 观测矩阵C(n) 过程噪声向量的相关矩阵1()Q n 观测噪声向量的相关矩阵2()Q n 计算:n=1,2,3,………………. G(n)=F(n+1,n)K(n,n+1) ()H C n 12[()(,1)()()]H C n K n n C n Q n --+ Kalman 滤波器是一种线性的离散时间有限维系统。Kalman 滤波器的估计性能是:它使滤波后的状态估计误差的相关矩阵P(n)的迹最小化。这意味着,kalman 滤波器是状态向量x(n)的线性最小方差估计。 ◆实验结果: ◆程序代码: (1)主程序

卡尔曼滤波的基本原理及应用

卡尔曼滤波的基本原理及应用卡尔曼滤波在信号处理与系统控制领域应用广泛,目前,正越来越广泛地应用于计算机应用的各个领域。为了更好地理解卡尔曼滤波的原理与进行滤波算法的设计工作,主要从两方面对卡尔曼滤波进行阐述:基本卡尔曼滤波系统模型、滤波模型的建立以及非线性卡尔曼滤波的线性化。最后,对卡尔曼滤波的应用做了简单介绍。 卡尔曼滤波属于一种软件滤波方法,其基本思想是:以最小均方误差为最佳估计准则,采用信号与噪声的状态空间模型,利用前一时刻的估计值和当前时刻的观测值来更新对状态变量的估计,求出当前时刻的估计值,算法根据建立的系统方程和观测方程对需要处理的信号做出满足最小均方误差的估计。 最初的卡尔曼滤波算法被称为基本卡尔曼滤波算法,适用于解决随机线性离散系统的状态或参数估计问题。卡尔曼滤波器包括两个主要过程:预估与校正。预估过程主要是利用时间更新方程建立对当前状态的先验估计,及时向前推算当前状态变量和误差协方差估计的值,以便为下一个时间状态构造先验估计值;校正过程负责反馈,利用测量更新方程在预估过程的先验估计值及当前测量变量的基础上建立起对当前状态的改进的后验估计。这样的一个过程,我们称之为预估-校正过程,对应的这种估计算法称为预估-校正算法。以下给出离散卡尔曼滤波的时间更新方程和状态更新方程。 时间更新方程: 状态更新方程: 在上面式中,各量说明如下: A:作用在X k-1上的n×n 状态变换矩阵 B:作用在控制向量U k-1上的n×1 输入控制矩阵 H:m×n 观测模型矩阵,它把真实状态空间映射成观测空间 P k-:为n×n 先验估计误差协方差矩阵 P k:为n×n 后验估计误差协方差矩阵 Q:n×n 过程噪声协方差矩阵 R:m×m 过程噪声协方差矩阵 I:n×n 阶单位矩阵K k:n×m 阶矩阵,称为卡尔曼增益或混合因数 随着卡尔曼滤波理论的发展,一些实用卡尔曼滤波技术被提出来,如自适应滤波,次优滤波以及滤波发散抑制技术等逐渐得到广泛应用。其它的滤波理论也迅速发展,如线性离散系统的分解滤波(信息平方根滤波,序列平方根滤波,UD 分解滤波),鲁棒滤波(H∞波)。 非线性样条自适应滤波:这是一类新的非线性自适应滤波器,它由一个线性组合器后跟挠性无记忆功能的。涉及的自适应处理的非线性函数是基于可在学习

卡尔曼滤波的原理及应用自己总结

卡尔曼滤波的原理以及应用 滤波,实质上就是信号处理与变换的过程。目的是去除或减弱不想要成分,增强所需成分。卡尔曼滤波的这种去除与增强过程是基于状态量的估计值和实际值之间的均方误差最小准则来实现的,基于这种准则,使得状态量的估计值越来越接近实际想要的值。而状态量和信号量之间有转换的关系,所以估计出状态量,等价于估计出信号量。所以不同于维纳滤波等滤波方式,卡尔曼滤波是把状态空间理论引入到对物理系统的数学建模过程中来,用递归方法解决离散数据线性滤波的问题,它不需要知道全部过去的数据,而是用前一个估计值和最近一个观察数据来估计信号的当前值,从而它具有运用计算机计算方便,而且可用于平稳和不平稳的随机过程(信号),非时变和时变的系统的优越性。 卡尔曼滤波属于一种软件滤波方法,概括来说其基本思想是:以最小均方误差为最佳估计准则,采用信号与噪声的状态空间模型,利用前一时刻的估计值和当前时刻的观测值来更新对状态变量的估计,求出当前时刻的估计值,算法根据建立的系统方程和观测方程对需要处理的信号做出满足最小均方误差的估计。其所得到的解是以估计值的形式给出的。 卡尔曼滤波过程简单来说主要包括两个步骤:状态变量的预估以及状态变量的校正。预估过程是不考虑过程噪声和量测噪声,只是基于系统本身性质并依靠前一时刻的估计值以及系统控制输入的一种估计;校正过程是用量测值与预估量测值之间的误差乘以一个与过程

噪声和量测噪声相关的增益因子来对预估值进行校正的,其中增益因子的确定与状态量的均方误差有关,用到了使均方误差最小的准则。而这一过程中体现出来的递归思想即是:对于当前时刻的状态量估计值以及均方误差预估值实时进行更新,以便用于下一时刻的估计,使得系统在停止运行之前能够源源不断地进行下去。 下面对于其数学建模过程进行详细说明。 1.状态量的预估 (1)由前一时刻的估计值和送给系统的可控制输入来预估计当前时刻状态量。 X(k|k-1)=A X(k-1|k-1)+B U(k) 其中,X(k-1|k-1)表示前一时刻的估计值,U(k)表示系统的控制输入,X(k|k-1)表示由前一时刻估计出来的状态量的预估计值,A表示由k-1时刻过渡到k时刻的状态转移矩阵,B表示控制输入量与状态量之间的一种转换因子,这两个都是由系统性质来决定的。 (2)由前一时刻的均方误差阵来预估计当前时刻的均方误差阵。 P(k|k-1)=A P(k-1|k-1)A’+Q 其中,P(k-1|k-1)是前一时刻的均方误差估计值,A’代表矩阵A 的转置,Q代表过程噪声的均方误差矩阵。该表达式具体推导过程如下: P(k|k-1)=E{[Xs(k|k)-X(k|k-1)][Xs(k|k)-X(k|k-1)]’}------ 其中Xs(k|k)=A Xs(k-1|k-1)+B U(k)+W(k-1)表示当前时刻的实际值,Xs(k-1|k-1)表示前一时刻的实际值,可以看出与当前时刻的预估计值

卡尔曼滤波器总结

1. 卡尔曼全名Rudolf Emil Kalman ,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems 》(线性滤波与预测问题的新方法)。 基于状态空间描述对混有噪声的信号进行滤波的方法,简称卡尔曼滤波。这种方法是R.E.卡尔曼和R.S.布什于1960和1961年提出的。卡尔曼滤波是一种切实可行和便于应用的滤波方法,其计算过程通常需要在计算机上实现。实现卡尔曼滤波的装置或软件称为卡尔曼滤波器。 卡尔曼滤波器(Kalman Filter )是在克服以往滤波方法局限性的基础上提出来的,是一个最优化自回归数据处理算法(optimal recursive data processing algorithm )。它是针对系统的部分状态或是部分状态的线性组合,且量测值中有随机误差(常称为量测噪声)。将仅与部分状态有关的测量进行处理,得出从某种统计意义上讲误差最小的更多状态的估值,从而将混有噪声(干扰)的信号中噪声滤除、提取有用信号。 卡尔曼滤波是一种递推线性最小方差估计,以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。 现设线性时变系统的离散状态方程和观测方程为: ()()()()()X k+1F k X k G k u k ()w k =?++ ()()()()k+1H k+1X k+1k+1Y v =?+ 其中 ()k X 和()k Y 分别是k 时刻的状态矩阵和测量矩阵 ()k F 为状态转移矩阵 ()k G 为系统控制项矩阵 ()k u 为k 时刻对系统的控制量 ()k w 为k 时刻动态噪声,其协方差()Q k ()k H 为k 时刻观测矩阵 ()k v 为k 时刻测量噪声, 其协方差()R k 则卡尔曼滤波的算法流程为: 状态的一步预估计()()()()()??X k+1k F k X k k G k u k |=?|+ 一步预估计协方差矩阵 ()()()()()C k+1k F k C k k F k Q k '|=?|+' 计算卡尔曼增益矩阵

Kalman滤波原理及程序(手册)解析

Kalman 滤波原理及仿真手册 KF/EKF/UKF 原理+应用实例+MATLAB 程序 本手册的研究内容主要有Kalman 滤波,扩展Kalman 滤波,无迹Kalman 滤波等,包括理论介绍和MATLAB 源程序两部分。本手册所介绍的线性滤波器,主要是Kalman 滤波和α-β滤波,交互多模型Kalman 滤波,这些算法的应用领域主要有温度测量、自由落体,GPS 导航、石油地震勘探、视频图像中的目标检测和跟踪。 EKF 和UKF 主要在非线性领域有着重要的应用,目标跟踪是最主要的非线性领域应用之一,除了讲解目标跟踪外,还介绍了通用非线性系统的EKF 和UKF 滤波处理问题,相信读者可以通过学习本文通用的非线性系统,能快速掌握EKF 和UKF 滤波算法。 本文所涉及到的每一个应用实例,都包含原理介绍和程序代码(含详细的中文注释)。 一、四维目标跟踪Kalman 线性滤波例子 在不考虑机动目标自身的动力因素,将匀速直线运动的船舶系统推广到四 维,即状态[]T k y k y k x k x k X )() ()()()( =包含水平方向的位置和速度和纵向的位置和速度。则目标跟踪的系统方程可以用式(3.1)和(3.2)表示, )()()1(k u k X k X Γ+Φ=+ (2-4-9) )()()(k v k HX k Z += (2-4-10) 其中,? ? ???? ??? ???=Φ10 00 1000010 001 T T ,???? ???????? ??=ΓT T T T 05.00005.022,T H ?? ??????????=00100001 ,T y y x x X ? ????? ??????= ,??? ???=y x Z ,u ,v 为零均值的过程噪声和观测噪声。T 为采样周期。为了便于理解, 将状态方程和观测方程具体化:

卡尔曼(kalman)滤波算法特点及其应用

Kalman滤波算法的特点: (1)由于Kalman滤波算法将被估计的信号看作在白噪声作用下一个随机线性系统的输出,并且其输入/输出关系是由状态方程和输出方程在时间域内给出的,因此这种滤波方法不仅适用于平稳随机过程的滤波,而且特别适用于非平稳或平稳马尔可夫序列或高斯-马尔可夫序列的滤波,所以其应用范围是十分广泛的。 (2)Kalman滤波算法是一种时间域滤波方法,采用状态空间描述系统。系统的过程噪声和量测噪声并不是需要滤除的对象,它们的统计特征正是估计过程中需要利用的信息,而被估计量和观测量在不同时刻的一、二阶矩却是不必要知道的。 (3)由于Kalman滤波的基本方程是时间域内的递推形式,其计算过程是一个不断地“预测-修正”的过程,在求解时不要求存储大量数据,并且一旦观测到了新的数据,随即可以算的新的滤波值,因此这种滤波方法非常适合于实时处理、计算机实现。 (4)由于滤波器的增益矩阵与观测无关,因此它可预先离线算出,从而可以减少实时在线计算量。在求滤波器增益矩阵时,要求一个矩阵的逆,它的阶数只取决于观测方程的维数,而该维数通常很小,这样,求逆运算是比较方便的。另外,在求解滤波器增益的过程中,随时可以算出滤波器的精度指标P,其对角线上的元素就是滤波误差向量各分量的方差。 Kalman滤波的应用领域 一般地,只要跟时间序列和高斯白噪声有关或者能建立类似的模型的系统,都可以利用Kalman滤波来处理噪声问题,都可以用其来预测、滤波。Kalman滤波主要应用领域有以下几个方面。 (1)导航制导、目标定位和跟踪领域。 (2)通信与信号处理、数字图像处理、语音信号处理。 (3)天气预报、地震预报。 (4)地质勘探、矿物开采。 (5)故障诊断、检测。 (6)证券股票市场预测。 具体事例: (1)Kalman滤波在温度测量中的应用; (2)Kalman滤波在自由落体运动目标跟踪中的应用; (3)Kalman滤波在船舶GPS导航定位系统中的应用; (4)Kalman滤波在石油地震勘探中的应用; (5)Kalman滤波在视频图像目标跟踪中的应用;

卡尔曼滤波算法及MATLAB实现

基于matlab的卡尔曼信号滤波设计 卡尔曼滤波的基本思想是:以最小均方误差为最佳估计准则,采用信号与噪声的状态空间模型,利用前一时刻的估计值和当前时刻的观测值来更新对状态变量的估计,求出当前时刻的估计值,算法根据建立的系统方程和观测方程对需要处理的信号做出满足最小均方误差的估计。 语音信号在较长时间内是非平稳的,但在较短的时间内的一阶统计量和二阶统计量近似为常量,因此语音信号在相对较短的时间内可以看成白噪声激励以线性时不变系统得到的稳态输出。假定语音信号可看成由一AR模型产生: 时间更新方程: 测量更新方程: K(t)为卡尔曼增益,其计算公式为: 其中 、分别为过程模型噪声协方差和测量模型噪声协方差,测量协方差可以通过观测得到, 则较难确定,在本实验中则通过与两者比较得到。 由于语音信号短时平稳,因此在进行卡尔曼滤波之前对信号进行分帧加窗操作,在滤波之后对处理得到的信号进行合帧,这里选取帧长为256,而帧重叠个数为128; 下图为原声音信号与加噪声后的信号以及声音信号与经卡尔曼滤波处理后的信号:

原声音信号与加噪声后的信号 原声音信号与经卡尔曼滤波处理后的信号 MATLAB程序实现如下: %%%%%%%%%%%%%%%%%基于LPC全极点模型的最大后验概率估计法,采用卡尔曼滤波%%%%%%%%%%%%%% clear; clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%加载声音数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% loadvoice.mat y=m1(2,:); x=y+0.08*randn(1,length(y)); %%%%%%%%%%%%%%%原声音信号和加噪声后的信号%%%%%%%%%%%%%%% figure(1); subplot(211);plot(m1(1,:),m1(2,:));xlabel('时间');ylabel('幅度');title('原声音信号'); subplot(212);plot(m1(1,:),x);xlabel('时间');ylabel('幅度');title('加噪声后的信号');

卡尔曼滤波算法(KF)

卡尔曼滤波器Kalman Filter (zz) 关键词:卡尔曼滤波器Kalman Filter 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Predict ion Problems》(线性滤波与预测问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下载: https://www.sodocs.net/doc/108559670.html,/~welch/kalman/media/pdf/Kalman1960.pdf 简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。 2.卡尔曼滤波器的介绍 (Introduction to the Kalman Filter) 为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。但是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。 在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。 假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后

相关主题