1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 卡尔曼滤波器原理讲解及其matlab实现

卡尔曼滤波器原理讲解及其matlab实现

时间:2018-11-25 06:46:56

相关推荐

卡尔曼滤波器原理讲解及其matlab实现

目录

一:卡尔曼滤波器的信号模型[1-2]

二:其他方程及变量介绍

三:卡尔曼滤波器递推公式

四:matlab仿真[3]

参考文献:

引言:在进行一些信号处理的过程中,我们通常会采集到一些数据,但是实际测量到的数据是受到噪声干扰了之后的,故与真实的数据有一些偏差。因此我们把 [ 通过测量数据进行一系列处理得到近似于真实数据 ] 的过程( 或利用测量数据估计得到近似于真实数据的过程 )称为 [ 估计 ] 。

其中 [ 波形估计 ] 也是一种估计,它是估计的一个波形( 即一系列数据 ),是很重要的一种工具,在目标跟踪,轨迹跟踪等方面具有很重要的应用。一般波形估计是通过一组数据得到另一组数据,就像是一组数据通过了一个滤波器,得到另一组数据。故经常会听到 [维纳滤波器]、[卡尔曼滤波器] 等词汇。

本文讲解卡尔曼滤波器,连续的卡尔曼滤波器在计算机应用中没有多大意义,故一般说到的卡尔曼滤波器都是离散卡尔曼滤波器。

一:卡尔曼滤波器的信号模型[1-2]

卡尔曼滤波器的信号模型是由状态方程和观测方程组成的,具体的纯公式推导不太好理解,故在此直接用例子来说明:

设目标匀加速度从原点开始作直线运动,考虑到加速度可能会受到时变扰动,写出该例子的信号模型。

状态方程:本例子中,目标距离、目标速度、加速度为三个状态,其中加速度受到的时变扰动为。有:

符号解释:

代表k时刻的距离,代表k-1时刻的距离。其他的类似,卡尔曼滤波器就是不断利用前一时刻的值去估计下一时刻,不断地递推;

表示在k-1时刻目标运动加速度收到的扰动噪声 ( 在这里我们可以认为在路面上匀加速的车受到了风的吹动,这个风就是噪声) 。

将上式写成矩阵形式如下:

令表示时刻目标运动的三个状态量构成三位状态矢量。

符号解释:

表示一步状态转移矩阵。代表k时刻的状态可由前一时刻的状态,并考虑噪声矢量推的;

表示控制矩阵。反映了k-1时刻扰动噪声矢量对系统状态矢量影响程度的矩阵。

写成矩阵形式有:

以上状态方程说明了,可以由前一时刻推的后一时刻的状态,故该式又被称作 [ 一步状态递推公式 ] 。换句话说:我们也可以根据该时刻(k)的状态值去预测下一时刻(k+1)状态值,因为是[预测值]所以不准确,故需要 [ 修正项 ] 去修正,而预测值怎么得来就和下面的 [ 观测值 ] 有关系了。

(还需要注意的一点是,在上述的状态方程中都是确定值,或者说实际值,但是实际当中我们是不知道实际值的,我们需要的就是实际值,所以实际应用中用的状态值都是估计值)

下面来看观测方程,虽然观测值我们是直接得到具体的值,但是因为已经用状态矢量来表示各状态变量,所以在观测方程当中只能用状态矢量。这样在直接测距情况下的目标运动观测方程为:

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

其中:

,代表观测矩阵,是已知的,随着不同场景发生改变。

就是k时刻的运动目标距离测量数据;

是观测噪声。

上述也说了观测值要作为修正项,具体怎么修正,还需要一些条件。

二:其他方程及变量介绍

1、状态滤波:

该公式类似于状态方程(不考虑噪声),但是却多了等式右边的第二项。上文也提到了,上式右边第一项是预测值,不准确,因此需要修正项去修正。

其中:

,本时刻经过修正之后的值(或者称作状态滤波值,最终估计值)。我们最终得到的就是这个。

是卡尔曼增益,后面给出计算公式。

2、状态滤波的均方误差阵,反映了状态滤波的精度。用来计算卡尔曼增益。

3、状态一步预测:1式中的右边第一项可以写成:。其中,是根据本时刻的滤波值去预测下一时刻的值得到的 [ 状态一步预测值 ],这里也进一步细说了预测值和最终估计值的符号的不同。

4、状态一步预测的均方误差阵。反映了一步预测值的精度。用来计算卡尔曼增益。

三:卡尔曼滤波器递推公式

上述也讲述了很多关于卡尔曼滤波器的公式,为了更直观,给出下图的公式表:

上图中的大部分公式已经提过,其中的符号也都解释了。下面讲述各分量在递推过程中的关系,下面看图:

该图其实可以分成两部分观看,第一部充(Ⅰ)(Ⅱ)(Ⅲ)是不断递推求卡尔曼增益的过程。第二部分(Ⅳ)(Ⅴ)是修正和预测下一步的过程。

还需要注意一点的是:和是需要自己设定的。可以参考下图:

四:matlab仿真[3]

上述所讲述的是状态为矢量的卡尔曼滤波器。在这里仿真了一个状态为标量时的离散卡尔曼滤波器,标量状态的卡尔曼滤波器就比矢量的简单得多了,不用考虑什么矩阵矢量了就是将上述的都变成标量。

温度测量:

仿真图:

其中黑点是温度在24摄氏度上下漂移的结果,是测量值,经过卡尔曼滤波器之后得到蓝色的线即状态滤波结果。可以看到很不戳!

代码:

%定义超参数Q=4e-4;R=0.25;%定义观测数据维数mn=[4000,1];%仿真测量值X=24+sqrt(R)*randn(mn);%定义迭代初始参数S_K1=zeros(mn);%一步预测状态值S_K=zeros(mn); %滤波器输出值(一步滤波值经过修正之后)K=zeros(mn); %卡尔曼增益M_K1=zeros(mn);%一步预测状态值协方差矩阵M_K=zeros(mn); %滤波器输出值协方差矩阵M_K(1)=1;S_K(1)=23.3;%kman核心算法for n=2:over%时间更新S_K1(n)=S_K(n-1); %一步预测M_K1(n)=M_K(n-1)+Q; %一步预测均方差矩阵%状态更新K(n)=M_K1(n)/(M_K1(n)+R);S_K(n)=S_K1(n)+K(n)*(X(n)-S_K1(n));M_K(n)=(1-K(n))*M_K1(n);end%绘图LineWidth=2;plot (X, 'k+');%画出温度计的测量值hold on;plot (S_K, 'b-')%画出最优估计值hold off

参考文献:

[1] 赵树杰.赵建勋.信号检测于估计理论.清华大学出版社。

[2]

/video/BV1Rh41117MT?spm_id_from=333.337.search-card.all.click/video/BV1Rh41117MT?spm_id_from=333.337.search-card.all.click[3]/video/BV1WZ4y1F7VN?spm_id_from=333.337.search-card.all.click/video/BV1WZ4y1F7VN?spm_id_from=333.337.search-card.all.click

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。