卡尔曼滤波算法在DS18B20温度检测中的应用
KalmanFilterAlgorithm
1.卡尔曼滤波算法特点
采用递归的方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能进行状态估计,需要的存储空间小,每一步的计算量小。
2.卡尔曼滤波算法推导
详细推导过程参照下面博客,我是按照此博客的内容进行的测试“https://blog.csdn.net/CSDN_X_W/article/details/90289021?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-12.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-12.pc_relevant_paycolumn_v3&utm_relevant_index=16”
3.卡尔曼滤波算法在DS18B20温度检测中的应用
(一维数据滤波)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NeKKLexc-1651206585141)(file:///C:/Users/WDK/AppData/Roaming/marktext/images/2022-04-29-12-19-09-image.png?msec=1651206572373)]
//1. 结构体类型定义
typedef struct
{float LastP;//上次估算协方差 初始化值为0.02float Now_P;//当前估算协方差 初始化值为0float out;//卡尔曼滤波器输出 初始化值为0float Kg;//卡尔曼增益 初始化值为0float Q;//过程噪声协方差 初始化值为0.001float R;//观测噪声协方差 初始化值为0.543
}KFP;//Kalman Filter parameter//2. 以温度检测为例 定义卡尔曼结构体并初始化参数
KFP KFP_temperature={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;}/*调用卡尔曼滤波器 实践*/
//主函数中定义局部变量
//这里只放出了必要的函数
//DS18B20比较简单,大家可以去别的帖子查一下怎么读取数据
int main(void)
{int temperature;//定义实际温度值变量int kalman_temperature=0;//定义卡尔曼滤波器修正后的温度值变量while(1){//调用DS18B20_Get_Temp()获取温度temperature=DS18B20_Get_Temp();//卡尔曼滤波器运算修正温度值kalman_temperature = kalmanFilter(&KFP_temperature,(float)temperature);}
}
4.结果观测
可以通过Vofa+软件结合printf
函数观测处理前和处理后的温度。
通过观测发现卡尔曼滤波算法滤波效果较好,但是存在明显的滞后性,对实时性要求不高的情况下可以采用。
printf("T:%d ,%d \n",temperature,kalman_temperature);
卡尔曼滤波算法在DS18B20温度检测中的应用相关推荐
- matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc
基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...
- 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
一.设计资料内容(私信获取) 1. 包含proteus仿真一份: 2. keil源代码一份: 3. 包含基于51单片机的DS18B20温度监测与报警的proteus仿真设计课程报告一份: 4. 包含基 ...
- 基于DS18B20温度检测
目录 一 设计内容 二 芯片介绍 2.1 DS18B20芯片 2.2.1 DS18B20简介 2.1.2单总线介绍及应用: 2.1.3 DS18B20的应用: 2.2 LCD1602芯片 2.2.1 ...
- ds18b20c语言keil,DS18B20温度检测调节程序(C代码)
#include"reg52.h" #include"intrins.h" #include"absacc.h" #define uint ...
- 单片机温度检测高温报警系统 汇编语言
单片机温度检测高温报警系统 实验目的 1) 掌握 51 单片机定时器/计数器工作原理与应用: 2) 掌握 51 单片机中断系统工作原理与应用: 3) 掌握 Keil μVision 软件开发环境,汇编 ...
- ds18b20温度转换指令_学习心得 | 温度检测工程模块划分总结与案例分析
本文为明德扬原创文章,转载请注明出处! 很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路. 明德扬温度检测工程是基于FPGA的一个实用 ...
- 论文推荐 | 目标检测中不平衡问题算法综述
(图片付费下载于视觉中国) 作者 | CV君 来源 | 我爱计算机视觉(ID:aicvml) 今天跟大家推荐一篇前几天新出的投向TPAMI的论文:Imbalance Problems in Objec ...
- matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇
卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...
- otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用
from:http://blog.csdn.net/onezeros/article/details/6136770 otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见ots ...
最新文章
- 计算机专业英语2008影印版第四章翻译,计算机专业英语2008影印版选择题的翻译加答案(14页)-原创力文档...
- 监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标
- linux读写文件 简单版
- 串行口通信c语言代码,问一下单片机串行口通信用c语言实现的问题
- 北交所开市工作准备就绪 定于2021年11月15日开市
- 服务器本地打开asp文件路径,服务器本地打开asp文件
- 荣耀7i android版本,华为荣耀7i有几个版本?荣耀7i不同版本配置介绍
- 浅谈URI和URL的区别
- 【开发】MFC到Delphi的皮肤移植
- threejs的shader材质 颜色混合函数mix
- idea启动azkaban2.5
- Android发送edp服务器,Android6.0调试笔记之edp屏无法点亮问题怎么解决
- 注册表终极修改ie主页的方法
- .NET Framework各个版本(1.0 - 2.0)
- 2022年端午送祝福语小程序源码+可对接流量主
- 【pen200-lab】10.11.1.115
- 为什么开源堡垒机不可取
- python游戏联机_CoderZh首款Python联机对战游戏 - NancyTetris1.0倾情发布(一)
- 出门问问AIGC SaaS平台亮相数贸会 赋能内容创作全流程
- GeoServer使用WFS服务时出414 URI Too Long错误
热门文章
- 以太坊Dapp开发通过truffle部署合约
- 电子模块|心率血氧传感器模块MAX30102及其驱动代码
- ABAP-选择屏幕(四) 动态修改屏幕
- Java异常处理实验
- 计算机bios怎么进入安全模式,安全模式设置-怎样进入bios和安全模式呢?为什么我按F – 手机爱问...
- (附源码)springboot企业人力资源管理系统 毕业设计291816
- 史上最全语义分割综述(FCN,UNet,SegNet,Deeplab,ASPP...)
- 在外企做 IT 有哪些独特的福利
- Java基于springboot+vue的汽车销售购物商城系统
- SPOJ0919 prime checker