amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 18277|回复: 89

套公式原来这么简单,卡尔曼滤波在单片机上面实际应用,转

  [复制链接]
发表于 2012-5-11 16:27:05 | 显示全部楼层 |阅读模式
本帖最后由 小笨蛋 于 2012-5-11 16:28 编辑

很形象的卡尔曼滤波的原理说明
http://www.ourdev.cn/thread-5474930-1-1.html






  1. #ifndef _KALMAN_H_
  2. #define _KALMAN_H_

  3. extern  KalmanGain;//  卡尔曼增益
  4. extern  EstimateCovariance;//估计协方差
  5. extern  MeasureCovariance;//测量协方差
  6. extern  EstimateValue;//估计值
  7. extern void KalmanFilterInit(void);
  8. extern      KalmanFilter(   Measure);
  9. #endif



  10. #include "config.h"
  11. #include "math.h"

  12.   KalmanGain;//  卡尔曼增益
  13.   EstimateCovariance;//估计协方差
  14.   MeasureCovariance;//测量协方差
  15.   EstimateValue;//估计值

  16. void KalmanFilterInit(void);

  17. extern    float  KalmanFilter(float   Measure);


  18. void KalmanFilterInit(void)
  19. {
  20. EstimateValue=0;

  21. EstimateCovariance=0.1;
  22. MeasureCovariance=0.02;


  23. }

  24. KalmanFilter(   Measure)
  25. {

  26. //计算卡尔曼增益
  27. KalmanGain=EstimateCovariance*sqrt(1/(EstimateCovariance*EstimateCovariance+MeasureCovariance*MeasureCovariance));

  28. //计算本次滤波估计值
  29. EstimateValue=EstimateValue+KalmanGain*(Measure-EstimateValue);
  30. //更新估计协方差

  31. EstimateCovariance=sqrt(1-KalmanGain)*EstimateCovariance;
  32. //更新测量方差
  33. MeasureCovariance=sqrt(1-KalmanGain)*MeasureCovariance;
  34. //返回估计值
  35. return EstimateValue;
  36. }
复制代码
转自http://blog.163.com/tianjunqiang ... 119201131314343274/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2012-5-11 16:29:00 | 显示全部楼层
从上班就开始听说卡尔曼一直没见过,哈哈
发表于 2012-5-11 16:33:21 | 显示全部楼层
mark 备用!
发表于 2012-5-11 22:08:11 | 显示全部楼层
mark!正准备搞呢
发表于 2012-5-11 22:33:57 | 显示全部楼层
mark 备用!
发表于 2012-5-11 22:56:55 | 显示全部楼层
学习了.谢谢!
发表于 2012-5-11 23:08:54 | 显示全部楼层
还是浮点运算啊
发表于 2012-5-11 23:40:33 来自手机 | 显示全部楼层
单片机执行,够呛吧
来自:amoBBS 阿莫电子论坛 Android客户端
发表于 2012-5-13 23:19:00 | 显示全部楼层
怎么看不到图啊
发表于 2012-5-13 23:31:41 | 显示全部楼层
mark,过两天搞起
发表于 2012-5-14 09:30:31 | 显示全部楼层
mark  xiexie
发表于 2012-5-14 09:44:31 | 显示全部楼层
只知道这是个预测模型,由于太复杂一直没有弄懂,得好好研究下
发表于 2012-5-14 09:46:59 | 显示全部楼层
mark......
发表于 2012-5-14 12:57:28 | 显示全部楼层
有时间试试。
发表于 2012-5-18 17:46:16 | 显示全部楼层
我用软件模拟了一下上面的代码,发现几个公式有点问题,首先是卡尔曼增益,好多资料上说是
KalmanGain=sqrt(EstimateCovariance*EstimateCovariance/(EstimateCovariance*EstimateCovariance + MeasureCovariance*MeasureCovariance));
其他几个公式感觉也有问题,还在验证中,有没有已经验证成功的,分享一下经验。
发表于 2012-5-21 20:46:41 | 显示全部楼层
这是哪门子卡尔曼 也就是个互补滤波
发表于 2012-11-24 15:18:07 | 显示全部楼层
互补滤波......................
发表于 2012-11-24 15:48:10 | 显示全部楼层
卡尔曼是什么呀。适用于何处?
发表于 2012-11-24 20:04:22 | 显示全部楼层
认真学习 单片机完全可以跑起来 我确定。。
发表于 2012-11-24 21:41:25 | 显示全部楼层
建议看看现代控制理论或者随机信号处理一类的书吧,这个貌似有点……
发表于 2012-11-24 22:17:07 | 显示全部楼层
还没用过,先留个脚印!
多谢楼主!
发表于 2012-11-28 11:18:22 | 显示全部楼层
到底是kalman还是互补啊
头像被屏蔽
发表于 2012-11-28 17:44:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2012-11-29 21:57:45 | 显示全部楼层
互补滤波,鉴定完毕,卡尔曼滤波的融合系数是通过对噪声的观测得到的。互补滤波是人为设定的,这个程序里融合系数是人为设定的。
发表于 2012-11-29 22:21:52 | 显示全部楼层
好东西mark
发表于 2012-11-30 23:57:21 | 显示全部楼层
还是没懂
发表于 2012-12-14 00:35:17 | 显示全部楼层
很多人都不知道kalman滤波的作用,我觉得其实就是讲加速度计和陀螺仪的输出转换成角度,至于用什么kalman,balance,average看自己的处理器是否给力了
发表于 2012-12-14 00:36:13 | 显示全部楼层
顺便说下,如果楼下认为我有错误,欢迎讨论,我不保证我一定是对的,但是我保证一定给大家一个正确的交代
发表于 2012-12-14 02:46:17 | 显示全部楼层
找到一个帖子,讲到互补滤波:

http://www.amobbs.com/thread-5493125-1-1.html
发表于 2012-12-14 08:13:23 | 显示全部楼层
备用呢。。。mark
发表于 2012-12-14 13:18:07 | 显示全部楼层
是个1维的卡尔曼滤波,他有更新协方差阵和观测噪声阵。
发表于 2013-1-19 11:42:18 | 显示全部楼层
这个不科学啊

因为 代码 41 行的计算卡尔曼增益结果必然是在0到1之间的,很简单,Ec 拿到根号里面,公式变形后的分子小于分母且都分子分母同为正
所以 代码 47 49 行的更新协方差的结果必然是 Ec 和 Mc 越来越小,最终趋向 0

都变成0了,那公式还怎么用?!

另外没看懂更新协方差的算法,抛开计算精度的问题,Ec 和 Mc 都是同时分别乘以(1-Kg)有什么用?Kg根本不会变嘛!
发表于 2013-1-19 19:52:00 | 显示全部楼层
还是顶一下,留作备用
发表于 2013-1-19 20:40:48 | 显示全部楼层
MARK, 谢谢
发表于 2013-3-3 17:17:37 | 显示全部楼层
Mark,thanks!
发表于 2013-3-3 21:20:42 | 显示全部楼层
Mark,有没有已经验证成功的,分享一下经验。
发表于 2013-3-5 22:25:59 | 显示全部楼层
MARK  谢谢LZ
发表于 2013-3-8 21:06:56 | 显示全部楼层
很好的资源,收藏了
头像被屏蔽
发表于 2013-3-10 14:01:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-3-11 20:21:37 | 显示全部楼层
学习中  先收藏谢谢LZ
发表于 2013-3-12 11:00:03 | 显示全部楼层
MARK,先收藏了
发表于 2013-3-12 11:25:35 | 显示全部楼层
linnjing 发表于 2013-1-19 11:42
这个不科学啊

因为 代码 41 行的计算卡尔曼增益结果必然是在0到1之间的,很简单,Ec 拿到根号里面,公式 ...

兄台 这个是简单的卡尔曼,只能用一次的。

真正的卡尔曼,需要一个动态响应方程。或者说变化量。
单变量高速卡尔曼作用不大。
发表于 2013-3-12 11:30:35 | 显示全部楼层
这个必须赞一个啊。NB楼主
发表于 2013-3-12 12:32:44 来自手机 | 显示全部楼层
用手机记号一下
发表于 2013-4-15 21:33:04 | 显示全部楼层
有试过做成四维的卡尔曼滤波器吗?感觉用在stm32f3上跑不太起来
发表于 2013-4-17 15:16:59 | 显示全部楼层
好帖留名,谢谢分享
发表于 2013-4-17 15:51:22 | 显示全部楼层
学习一下~以后备用
发表于 2013-4-23 20:16:10 | 显示全部楼层
mark学习中
发表于 2013-11-5 09:24:58 | 显示全部楼层
没想到看到了自己的程序。
当时做的时候是为了滤除采集到的波形的小尖刺,找了一个牛叉师兄的论文,里面发现了卡尔曼滤波器抽离成一维的滤波器公式。
由于单片机字长限制,也出现了两个系数很快衰减到0,单片机无法表示的数,因此我就设定了一个阈值,当这俩系数小到那个阈值的时候就重新给他们赋初值。我搞东西丢三落四,怕找不到这个程序了就贴了博客上了~~,由于时间久远,记得滤波效果差不多是这个样子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-11-5 09:43:29 | 显示全部楼层
以后用得着!
发表于 2013-11-5 09:51:33 | 显示全部楼层
学习了,帮顶
发表于 2013-11-5 10:11:24 | 显示全部楼层
mark  套公式原来这么简单,卡尔曼滤波在单片机上面实际应用,转   [复制链接]  

发表于 2013-11-5 11:02:40 | 显示全部楼层
顶楼主,学习了
发表于 2014-3-20 17:28:58 | 显示全部楼层
mark                                                                                                                  
发表于 2014-3-21 13:08:50 | 显示全部楼层
我看了好多卡尔曼的论文,现在终于明白一些道理了,但是要落实的话还是有点难,但是性能好的话也不错的
发表于 2014-3-21 13:35:54 | 显示全部楼层
看不到图片
发表于 2014-3-21 14:21:31 | 显示全部楼层
谢谢楼主!
发表于 2014-3-23 07:11:30 来自手机 | 显示全部楼层
先收藏了吧
发表于 2014-3-23 08:04:15 | 显示全部楼层
wo还不明白加速度为什么能和陀螺仪的数据相融合。。
发表于 2014-3-26 10:33:06 | 显示全部楼层
mark!学习一下
发表于 2015-7-7 21:10:54 | 显示全部楼层
贴子很不错,收藏备用了!
发表于 2016-11-30 18:30:46 | 显示全部楼层
mark!!!!!
发表于 2017-1-3 08:40:26 | 显示全部楼层
学习了,通俗易懂的东西
发表于 2017-1-3 09:38:20 | 显示全部楼层
贴子很不错,学习了!!
发表于 2017-1-3 10:03:02 | 显示全部楼层

贴子很不错,学习了!!
发表于 2017-1-3 12:53:30 | 显示全部楼层
谢谢分享 !
发表于 2017-1-4 16:54:01 | 显示全部楼层
MARK,先收藏了
发表于 2017-1-5 08:10:38 | 显示全部楼层
mark 备用!
发表于 2017-1-5 22:53:18 来自手机 | 显示全部楼层
卡尔曼滤波,速度马克备用,多谢楼主
发表于 2017-1-6 08:36:00 来自手机 | 显示全部楼层
感谢楼主分享
发表于 2017-1-16 12:37:42 | 显示全部楼层
好东西           
发表于 2017-2-24 22:37:19 | 显示全部楼层
进来学习
发表于 2017-2-25 17:27:13 | 显示全部楼层
xsh2005105326 发表于 2012-5-11 23:40
单片机执行,够呛吧
来自:amoBBS 阿莫电子论坛 Android客户端

只有不好的算法,一般AVR单片机也能够执行,只要程序优化的好
发表于 2017-3-2 08:36:52 | 显示全部楼层
mark下,备用
发表于 2017-3-2 09:04:09 | 显示全部楼层
mark,标记下,说不定什么时候就用上了
发表于 2017-3-2 09:17:27 | 显示全部楼层
上学的时候没有认真,现在看都看不懂了
发表于 2017-3-2 10:10:54 | 显示全部楼层
收藏备用  
发表于 2017-3-2 16:37:37 | 显示全部楼层
运行算过程都是典型的浮点运行算,直接把程序放在MCU中运行不合理。大体估计了一下时间,2812级的单片机运算时间应该在100微妙左右。
发表于 2017-3-2 17:07:12 | 显示全部楼层
学习了,谢谢
发表于 2017-3-2 21:43:07 | 显示全部楼层
搞传感器和四轴姿态融合的可以用上哦!帮顶上去!
发表于 2017-3-31 18:15:28 | 显示全部楼层
感觉不全对, EstimateCovariance;//估计协方差
  MeasureCovariance;//测量协方差
没有更新
发表于 2018-2-5 23:47:02 来自手机 | 显示全部楼层
卡尔曼滤波 make
发表于 2019-5-10 10:18:06 | 显示全部楼层
mark................
发表于 2019-5-10 13:11:34 | 显示全部楼层
mark下......
发表于 2019-5-10 13:49:54 | 显示全部楼层
收藏备用,经典的PID
发表于 2019-12-17 15:11:00 | 显示全部楼层
Mark,卡尔曼滤波器C语言实现。
发表于 2019-12-17 20:37:21 | 显示全部楼层
一般来说,最好配上原始波形和滤波后的波形的对比图比较好,方便看效果。

8位单片机一样可以使用,速度没有问题。
发表于 2019-12-17 21:09:21 来自手机 | 显示全部楼层
卡尔曼滤波,学习一下
发表于 2019-12-17 21:49:59 | 显示全部楼层
卡尔曼滤波
发表于 2019-12-17 23:19:22 | 显示全部楼层
卡尔曼还是互补滤波器? 反正都能用
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2020-2-25 17:11

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表