kalman 滤波

2023-05-16

卡尔曼(Kalman)滤波算法原理、C语言实现及实际应用
文章目录

卡尔曼滤波
一、滤波效果展示
二、简介
三、组成

  1. 预测状态方程
    (1)目的:
    (2)方程:
    (3)备注
  2. 预测协方差方程
    (1)目的
    (2)方程
    (3)备注
  3. 卡尔曼增益方程
    (1)目的
    (2)方程
    (3)备注
  4. 跟新最优值方程(卡尔曼滤波的输出)
    (1)目的
    (2)方程
    (3)备注
  5. 更新协方差方程
    (1)目的
    (2)方程
    (3)备注
    四、C 程序代码实现
  6. 参数列表
  7. 代码实现(一维数据滤波)

作者:Beyonderwei
来源:CSDN
原文:https://blog.csdn.net/CSDN_X_W/article/details/90289021
版权声明:本文为博主原创文章,转载请附上博文链接!

卡尔曼滤波

一、滤波效果展示

蓝色的波形是实际测得的数据,红色的波形是经 Kalman 滤波后的数据波形。
注:这里是实际应用激光测距传感器(TOF)vl53l0x 测得的距离数据。

f在这里插入图片描述
二、简介

采用递归的方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能进行状态估计,需要的存储空间小,每一步的计算量小。

三、组成

  1. 预测状态方程

(1)目的:

由 系统状态变量k-1时刻的最优值 和 系统输入 计算出k时刻的 系统预测值。

(2)方程:
在这里插入图片描述
3)备注

①. 当X为一维数据时,Fk的值是1。

  1. 卡尔曼增益方程

(1)目的

根据(k时刻) 协方差矩阵的预测值 计算 卡尔曼增益。

(2)方程
在这里插入图片描述
3)备注

①. 当 Pk|k-1 为一个一维矩阵时,Hk 是1。

  1. 跟新最优值方程(卡尔曼滤波的输出)

(1)目的

根据 状态变量的预测值 和 系统测量值 计算出 k时刻状态变量的最优值。

(2)方程
在这里插入图片描述
(3)备注

①. 当 Pk|k-1 为一个一维矩阵时,Hk 是1。

  1. 更新协方差方程

(1)目的

为了求 k时刻的协方差矩阵。(为得到k+1时刻的卡尔曼输出值做准备)

(2)方程
在这里插入图片描述
(3)备注

①. 当 Pk|k-1 为一个一维矩阵时,Hk 是1。

四、C 程序代码实现

  1. 参数列表
    在这里插入图片描述
  2. 代码实现(一维数据滤波)

实际参数是参照别人已经选好的参数,不过也可以自己改变参数,去观察波形的效果,体会每个参数对于滤波效果的影响,这里不详细介绍。
//1. 结构体类型定义
typedef struct
{
float LastP;//上次估算协方差 初始化值为0.02
float Now_P;//当前估算协方差 初始化值为0
float out;//卡尔曼滤波器输出 初始化值为0
float Kg;//卡尔曼增益 初始化值为0
float Q;//过程噪声协方差 初始化值为0.001
float R;//观测噪声协方差 初始化值为0.543
}KFP;//Kalman Filter parameter

//2. 以高度为例 定义卡尔曼结构体并初始化参数
KFP KFP_height={0.02,0,0,0,0.001,0.543};

/**
*卡尔曼滤波器
*@param KFP *kfp 卡尔曼结构体参数

  • float input 需要滤波的参数的测量值(即传感器的采集值)
    *@return 滤波后的参数(最优值)
    */
    float kalmanFilter(KFP *kfp,float input)
    {
    //预测协方差方程:k时刻系统估算协方差 = k-1时刻的系统协方差 + 过程噪声协方差
    kfp->Now_P = kfp->LastP + kfp->Q;
    //卡尔曼增益方程:卡尔曼增益 = k时刻系统估算协方差 / (k时刻系统估算协方差 + 观测噪声协方差)
    kfp->Kg = kfp->Now_P / (kfp->NOw_P + kfp->R);
    //更新最优值方程:k时刻状态变量的最优值 = 状态变量的预测值 + 卡尔曼增益 * (测量值 - 状态变量的预测值)
    kfp->out = kfp->out + kfp->Kg * (input -kfp->out);//因为这一次的预测值就是上一次的输出值
    //更新协方差方程: 本次的系统协方差付给 kfp->LastP 威下一次运算准备。
    kfp->LastP = (1-kfp->Kg) * kfp->Now_P;
    return kfp->out;
    }

/**
*调用卡尔曼滤波器 实践
*/
int height;
int kalman_height=0;
kalman_height = kalmanFilter(&KFP_height,(float)height);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kalman 滤波 的相关文章

  • 51单片机继电器控制直流电机正反转

    51单片机继电器控制直流电机正反转 用继电器控制 24V 直流电机的转动与停止 继电器是常用的电气隔离器件 简单的驱动电路是用三极管直接驱动 该电路驱动简单 成本低廉 当控制电路为高电平时 xff0c NPN 型三极管就会饱和导通 xff0
  • 51单片机定时器流水灯控制

    51单片机定时器控制led流水灯数码管进行计数 51单片机根据不同的型号有不同数量的定时器的 xff0c 而这些定时器的大概用法是差不多的我们今天就使用定时器来控制led流水灯 实训要求 使用单片机定时器对led灯进行控制 xff0c 数码
  • esp8266单片机使用MAX7219芯片驱动点阵屏幕

    esp8266单片机使用MAX7219芯片驱动点阵屏幕 我们这里使用的单片机是一块esp8266 xff0c 点阵屏幕的话就是买的普通16脚红色的 xff0c 驱动芯片就是MAX7219芯片 xff0c 只需要依次把芯片的clk xff0c
  • 使用自己开发的app远程控制MAX7219点阵屏幕

    使用自己开发的app远程控制MAX7219点阵屏幕 一 功能介绍 xff1a 二 芯片介绍 xff1a 三 实现原理 xff1a 四 代码部分 xff1a 其它资料 xff1a 一 功能介绍 xff1a 1 可以固定显示想显示的内容 2 点

随机推荐

  • go发送http请求

    说明 xff1a 写项目时候用到的 xff0c go发送http请求用到的一个方法 span class token keyword func span 函数名 span class token punctuation span body
  • js事件流

    事件流指的是事件完整执行过程中的流动路径 事件流分为捕获阶段和冒泡阶段 捕获阶段是从父到子 xff1b 冒泡阶段是从子到父 事件冒泡 xff1a 事件冒泡概念 xff1a 当一个元素的事件被触发的时候 xff0c 同样的事件将会在该元素的祖
  • 树莓派安装python3.7.3

    一 安装依赖包 sudo apt get install y make build essential libssl dev zlib1g dev sudo apt get install y libbz2 dev libreadline
  • vscode中调试webpack构建的项目

    在webpack的配置中 xff1a devtool span class token punctuation span span class token string 39 source map 39 span span class to
  • mac下proxychains4的配置文件位置

    mac下proxychains4的配置文件位置 xff1a usr local etc proxychains conf span class token function vim span usr local etc proxychain
  • 1. 驱动开发--基础知识

    文章目录 1 驱动的概念2 linux体系架构3 模块化设计3 1 微内核和宏内核 4 linux设备驱动分类4 1 驱动分类4 2 三类驱动程序详细对比分析4 3 为什么字符设备驱动最重要 5 驱动程序的安全性要求5 1 驱动是内核的一部
  • 【论文笔记】Ensemble Augmented-Shot Y-shaped Learning

    论文笔记 EASY Ensemble Augmented Shot Y shaped Learning State Of The Art Few Shot Classification with Simple Ingredients Int
  • Ubuntu下的文件保存及退出

    这篇文章是写给我自己的 xff0c 怕自己以后忘了 我很多时候会在ubuntu下发现键盘并不那么好使 输入 vim test cpp 然后输入i o a xff0c 输入以上三种 xff0c 进入编辑状态 输入完成 xff0c 按esc退出
  • 机会总是留给有准备的人

    qqq
  • 1.karto-slam涉及的类-雷达以及雷达数据相关

    首先是最简单的 1 sensor msgs LaserScan 主要包括header 还有激光参数 xff08 扫射范围距离 xff0c 步长 xff0c 时间等 xff0c 不包含位姿信息 xff0c header里面含有frame id
  • catkin build 和 catkin_make

    首先安装 xff1a sudo apt get install python catkin tools 编译过程中你可能会遇到以下错误 xff0c 那是因为以前使用了catkin make进行编译 xff0c 需要把build和devel删
  • 使用Haar特征进行人脸识别

    这篇博客对2001年那篇划时代的paper xff1a Rapid Objection Using a Boosted Cascade of Simple Features进行一个简要的解析 这篇文章之后人脸识别的效果有了很大的提升 后来还
  • MySQL基础课程三件套,年前轻松带你带你入门数据库管理系统~

    今天已经2022年1月11日了 xff0c 相信大部分的宝子们已经进入快乐的寒假了 xff0c 今天给对数据库感兴趣的童鞋们推荐B站上的一系列数据库管理入门课 该系列课程分为三个部分 xff0c 第一部分为MySQL新手入门教程详解 xff
  • 【kazam】linux下截屏、录屏软件kazam的简单使用

    安装 xff1a sudo apt get install kazam 或者使用 ppa 安装 sudo add apt repository ppa kazam stable series sudo apt get update sudo
  • LCD24064显示程序,此工程直接运行。

    T6963C C51 Source Code240X64MCU W78E516D 12MHZLCM Controller T6963C RA6963 24064A B 1 FG GND 2 GND GND
  • 四旋翼无人机飞行器基本知识(四旋翼无人机结构和原理+四轴飞行diy全套入门教程)

    第一篇 四旋翼飞行器结构和原理 第二篇 四旋翼飞行diy全套入门教程 四旋翼飞行器结构和原理 1 结构形式 旋翼对称分布在机体的前后 左右四个方向 xff0c 四个旋翼处于同一高度平面 xff0c 且四个旋翼的结构和半径都相同 xff0c
  • 四旋翼飞控原理

    以前 xff0c 搞无人机的十个人有八个是航空 气动 机械出身 xff0c 更多考虑的是如何让飞机稳定飞起来 飞得更快 飞得更高 如今 xff0c 随着芯片 人工智能 大数据技术的发展 xff0c 无人机开始了智能化 终端化 集群化的趋势
  • 四旋翼飞控原理

    以前 xff0c 搞无人机的十个人有八个是航空 气动 机械出身 xff0c 更多考虑的是如何让飞机稳定飞起来 飞得更快 飞得更高 如今 xff0c 随着芯片 人工智能 大数据技术的发展 xff0c 无人机开始了智能化 终端化 集群化的趋势
  • 四旋翼飞行器控制原理与设计

    一 相关理论知识 1 坐标系与欧拉角 进行动力学建模之前首先建立坐标系 xff0c 在此建立地球坐标系和机体坐标系 xff0c 如图所示 xff0c 这里地球系z轴方向向下指向地心 xff0c 机体系x轴为机头方向 当描述一个三维空间内的刚
  • kalman 滤波

    卡尔曼 Kalman 滤波算法原理 C语言实现及实际应用 文章目录 卡尔曼滤波 一 滤波效果展示 二 简介 三 组成 预测状态方程 xff08 1 xff09 目的 xff1a xff08 2 xff09 方程 xff1a xff08 3