0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

经典卡尔曼滤波算法步骤

FPGA之家 来源:FPGA之家 作者:FPGA之家 2021-01-07 10:08 次阅读

卡尔曼滤波实质上就是基于观测值以及估计值二者的数据对真实值进行估计的过程。预测步骤如图1所示:

图1 卡尔曼滤波原理流程图

假设我们能够得到被测物体的位置和速度的测量值04e04082-507a-11eb-8b86-12bb97331649.png,在已知上一时刻的最优估计值051226a6-507a-11eb-8b86-12bb97331649.png以及它的协方差矩阵0535ab80-507a-11eb-8b86-12bb97331649.png的条件下(初始值可以随意取,但协方差矩阵应为非0矩阵),则有05510588-507a-11eb-8b86-12bb97331649.png057d8324-507a-11eb-8b86-12bb97331649.png,即:

059a407c-507a-11eb-8b86-12bb97331649.png

而此时,

05e0f79c-507a-11eb-8b86-12bb97331649.png

如果我们加入额外的控制量,比如加速度060bca6c-507a-11eb-8b86-12bb97331649.png,此时063a5c56-507a-11eb-8b86-12bb97331649.png06581d68-507a-11eb-8b86-12bb97331649.png,则此时:

067349e4-507a-11eb-8b86-12bb97331649.png

同时,我们认为我们对系统的估计值并非完全准确,比如运动物体会突然打滑之类的,即存在一个协方差为068fa4cc-507a-11eb-8b86-12bb97331649.png的噪声干扰。因此,我们需要对06b3c1a4-507a-11eb-8b86-12bb97331649.png加上系统噪声06e66e4c-507a-11eb-8b86-12bb97331649.png来保证描述的完备性。综上,预测步骤的表达如下所示:

07053ee4-507a-11eb-8b86-12bb97331649.png

073d2ade-507a-11eb-8b86-12bb97331649.png

由于误差累积的作用,单纯对系统进行估计会导致估计值越来越离谱,因此我们以传感器的观测数据对我们的估计进行修正。我们可以用与预测步骤类似的方法将估计值空间映射至观测值空间,如下式所示:

0769792c-507a-11eb-8b86-12bb97331649.png

07865100-507a-11eb-8b86-12bb97331649.png

我们假设观测值为079fb15e-507a-11eb-8b86-12bb97331649.png。同时由于观测数据同样会存在噪声干扰问题,比如传感器噪声等,我们将这种噪声的分布用协方差07be8c0a-507a-11eb-8b86-12bb97331649.png表示。此时,观测值07f1e406-507a-11eb-8b86-12bb97331649.png与估计值081663c6-507a-11eb-8b86-12bb97331649.png处于相同的状态空间,但具有不同的概率分布,如图2所示:

083c33a8-507a-11eb-8b86-12bb97331649.jpg

图2 估计值与观测值概率分布示意图

我们可以认为,这两个概率分布的重叠部分,会更加趋近系统的真实数据,即有更高的置信度,比如我们估计汽车速度是5~10km/h,传感器反馈的速度是8~12km/h,那我们有理由认为汽车的实际速度更趋近于8~10km/h这个区间。

这里将观测值与估计值两个分布的高斯分布相乘,其结果的高斯分布描述如下:

0886fcbc-507a-11eb-8b86-12bb97331649.png

08b0cdbc-507a-11eb-8b86-12bb97331649.png      

08e1e000-507a-11eb-8b86-12bb97331649.png

式中:08fdc04a-507a-11eb-8b86-12bb97331649.png描述高斯分布的协方差,092d918a-507a-11eb-8b86-12bb97331649.png表示高斯分布的均值,矩阵0954485c-507a-11eb-8b86-12bb97331649.png称为卡尔曼增益矩阵。

那么,将估计值097719f4-507a-11eb-8b86-12bb97331649.png以及观测值09a08a82-507a-11eb-8b86-12bb97331649.png代入式(8)至式(10),可以得到:

09b2d0d4-507a-11eb-8b86-12bb97331649.png

09dc3e88-507a-11eb-8b86-12bb97331649.png

09f6da7c-507a-11eb-8b86-12bb97331649.png

式中,0954485c-507a-11eb-8b86-12bb97331649.png称为卡尔曼增益。

将式(11)至式(13)中约去0a5650f6-507a-11eb-8b86-12bb97331649.png,并化简可得:

0a761f44-507a-11eb-8b86-12bb97331649.png

0a8f45f0-507a-11eb-8b86-12bb97331649.png

0aaaf21e-507a-11eb-8b86-12bb97331649.png

0abdb552-507a-11eb-8b86-12bb97331649.png即为我们所得到的最优估计值,同时0adca610-507a-11eb-8b86-12bb97331649.png为其对应的协方差矩阵。在实际应用中,只需要使用式(4)、式(5)以及式(14)至式(16)这5个方程即可实现完整的卡尔曼滤波过程。

在对单一信号源滤波的场合,由于测量值与估计值具备几乎完全相同的概率分布,为了更好的实现去噪效果,在假定被测对象变化不显著的情况下,可以将之前(1~N)个时间节点的测量值随机作为当前时间节点的测量值,以实现更好的去噪效果。原则上,N取值越大滤波效果越好,但也会导致滤波结果滞后越严重。

2. 算法实现

function output = kalmanFilter(data, Q, R, N) if ~exist('Q', 'var') Q = 0.01; end if ~exist('R', 'var') R = 1; end if ~exist('N', 'var') N = 0; end X = 0; P = 1; A = 1; H = 1; output = zeros(size(data)); for ii = N + 1 : length(data) X_k = A * X; P_k = A * P * A' + Q; Kg = P_k * H' / (H * P_k * H' + R); z_k = data(ii - round(rand() * N)); X = X_k + Kg * (z_k - H * X_k); P = (1 - Kg*H) * P_k; output(ii) = X; end end

3. 算法分析

采用经典卡尔曼滤波对虚拟信号及真实信号进行滤波,结果如下图所示:

0b4eaae4-507a-11eb-8b86-12bb97331649.jpg

图3 经典卡尔曼滤波对虚拟信号滤波结果

0b7593ca-507a-11eb-8b86-12bb97331649.jpg

图4 经典卡尔曼滤波对真实信号滤波结果

从滤波结果中可以看出,经典卡尔曼对信号的滤波效果较为优秀,实时性相对较好,计算量需求极小,能够有效去除高斯噪声以及非高斯噪声,基本不受脉冲信号影响。在对被测系统的建模较为精确的条件下,其性能还能够进一步提升。其缺点主要在于需人为给定系统模型,当系统模型不精确时滤波效果会有所下降,但可以通过增加采样频率解决此问题。

建议应用场合:输入信号相对平稳或已知被测系统运动学模型,同时要求运算量极小的场合。

责任编辑:xj

原文标题:滤波算法:经典卡尔曼滤波

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波
    +关注

    关注

    10

    文章

    624

    浏览量

    56250
  • 算法
    +关注

    关注

    23

    文章

    4458

    浏览量

    90766
  • 卡尔曼滤波
    +关注

    关注

    3

    文章

    160

    浏览量

    24478

原文标题:滤波算法:经典卡尔曼滤波

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    卡尔滤波算法c语言实现方法

    卡尔滤波(Kalman Filter)是一种用于估计状态的算法,最初由R.E. Kalman在1960年提出。它是一种线性高斯滤波器,常用于处理包含误差噪声的动态系统。
    的头像 发表于 01-17 10:51 627次阅读

    ADIS16448在卡尔滤波里的系统噪声参数是多少?

    大家好,最近我在使用ADIS16448做IMU和GPS的融合。IMU主要是完成卡尔滤波里预测的步骤,所以我需要为我的IMU设置系统噪声参数Q。然而在ADIS16448的参数表里,我似
    发表于 12-28 08:04

    卡尔滤波算法的基本原理

    卡尔滤波(Kalman Filter)是一种递归的、自适应的滤波算法,广泛应用于估计系统状态和观测过程中的噪声。它最初在1960年被提出,被认为是控制理论和信号处理领域中最重要的发展
    的头像 发表于 12-07 18:26 1030次阅读
    <b class='flag-5'>卡尔</b>曼<b class='flag-5'>滤波</b><b class='flag-5'>算法</b>的基本原理

    卡尔滤波的原理和C代码

    卡尔滤波(KalmanFilter)是一种递归的、自适应的滤波算法,广泛应用于估计系统状态和观测过程中的噪声。它最初在1960年被提出,被认为是控制理论和信号处理领域中最重要的发展之
    的头像 发表于 12-07 08:08 698次阅读
    <b class='flag-5'>卡尔</b>曼<b class='flag-5'>滤波</b>的原理和C代码

    有没有基于9轴传感器的三阶卡尔滤波算法

    有没有基于9轴传感器的三阶卡尔滤波算法
    发表于 11-06 06:00

    二阶滤波对比卡尔滤波输出哪个效果更好?

    二阶滤波对比卡尔滤波输出哪个效果更好
    发表于 10-13 08:21

    卡尔滤波输出的时候延时很大要怎么解决?

    卡尔滤波输出的时候延时很大要怎么解决
    发表于 10-11 08:10

    卡尔滤波是属于一个什么滤波器?

    卡尔滤波器是属于一个高通滤波器还是带通滤波
    发表于 10-11 06:58

    卡尔滤波算法对比其他的滤波算法有什么优点?

    卡尔滤波算法对比其他的滤波算法有什么优点
    发表于 10-11 06:42

    卡尔滤波算法是怎么实现对数据的预测处理的?

    卡尔滤波算法是怎么实现对数据的预测处理的
    发表于 10-10 08:28

    卡尔滤波可以用于四轴的姿态数据处理吗?

    卡尔滤波可以用于四轴的姿态数据处理吗
    发表于 10-10 07:29

    什么是卡尔滤波卡尔滤波过程步骤

    卡尔滤波是一种用于估算线性动态系统状态的优化算法,其基础数学理论为贝叶斯定理,将传感器测量值和系统模型的预测值进行融合,得到对系统状态的估计。
    的头像 发表于 08-30 10:18 1562次阅读

    MPU6050使用互补滤波卡尔滤波算法进行姿态解算

    MPU6050使用互补滤波卡尔滤波算法进行姿态解算
    发表于 08-07 15:46 2次下载

    卡尔滤波(KF)与扩展卡尔曼(EKF)

    卡尔滤波是一种高效率的递归滤波器(自回归滤波器), 它能够从一系列的不完全包含噪声的测量(英文:measurement)中,估计动态系统的状态,然而简单的
    发表于 05-10 17:51 3次下载

    卡尔滤波器原理分析

    卡尔滤波器是一种基础预测定位算法。原理非常简单易懂。核心过程可以用一个图说明。
    的头像 发表于 05-09 17:30 646次阅读
    <b class='flag-5'>卡尔</b>曼<b class='flag-5'>滤波</b>器原理分析