搜索
bottom↓
回复: 95

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

  [复制链接]

出0入0汤圆

发表于 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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2012-5-11 16:29:00 | 显示全部楼层
从上班就开始听说卡尔曼一直没见过,哈哈

出0入0汤圆

发表于 2012-5-11 16:33:21 | 显示全部楼层
mark 备用!

出0入0汤圆

发表于 2012-5-11 22:08:11 | 显示全部楼层
mark!正准备搞呢

出0入0汤圆

发表于 2012-5-11 22:33:57 | 显示全部楼层
mark 备用!

出0入0汤圆

发表于 2012-5-11 22:56:55 | 显示全部楼层
学习了.谢谢!

出100入0汤圆

发表于 2012-5-11 23:08:54 | 显示全部楼层
还是浮点运算啊

出0入0汤圆

发表于 2012-5-11 23:40:33 来自手机 | 显示全部楼层
单片机执行,够呛吧
来自:amoBBS 阿莫电子论坛 Android客户端

出0入0汤圆

发表于 2012-5-13 23:19:00 | 显示全部楼层
怎么看不到图啊

出0入0汤圆

发表于 2012-5-13 23:31:41 | 显示全部楼层
mark,过两天搞起

出0入0汤圆

发表于 2012-5-14 09:30:31 | 显示全部楼层
mark  xiexie

出0入0汤圆

发表于 2012-5-14 09:44:31 | 显示全部楼层
只知道这是个预测模型,由于太复杂一直没有弄懂,得好好研究下

出0入0汤圆

发表于 2012-5-14 09:46:59 | 显示全部楼层
mark......

出0入0汤圆

发表于 2012-5-14 12:57:28 | 显示全部楼层
有时间试试。

出0入0汤圆

发表于 2012-5-18 17:46:16 | 显示全部楼层
我用软件模拟了一下上面的代码,发现几个公式有点问题,首先是卡尔曼增益,好多资料上说是
KalmanGain=sqrt(EstimateCovariance*EstimateCovariance/(EstimateCovariance*EstimateCovariance + MeasureCovariance*MeasureCovariance));
其他几个公式感觉也有问题,还在验证中,有没有已经验证成功的,分享一下经验。

出0入0汤圆

发表于 2012-5-21 20:46:41 | 显示全部楼层
这是哪门子卡尔曼 也就是个互补滤波

出0入0汤圆

发表于 2012-11-24 15:18:07 | 显示全部楼层
互补滤波......................

出0入0汤圆

发表于 2012-11-24 15:48:10 | 显示全部楼层
卡尔曼是什么呀。适用于何处?

出0入0汤圆

发表于 2012-11-24 20:04:22 | 显示全部楼层
认真学习 单片机完全可以跑起来 我确定。。

出0入0汤圆

发表于 2012-11-24 21:41:25 | 显示全部楼层
建议看看现代控制理论或者随机信号处理一类的书吧,这个貌似有点……

出0入0汤圆

发表于 2012-11-24 22:17:07 | 显示全部楼层
还没用过,先留个脚印!
多谢楼主!

出0入0汤圆

发表于 2012-11-28 11:18:22 | 显示全部楼层
到底是kalman还是互补啊
头像被屏蔽

出0入0汤圆

发表于 2012-11-28 17:44:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-11-29 21:57:45 | 显示全部楼层
互补滤波,鉴定完毕,卡尔曼滤波的融合系数是通过对噪声的观测得到的。互补滤波是人为设定的,这个程序里融合系数是人为设定的。

出0入0汤圆

发表于 2012-11-29 22:21:52 | 显示全部楼层
好东西mark

出0入0汤圆

发表于 2012-11-30 23:57:21 | 显示全部楼层
还是没懂

出0入0汤圆

发表于 2012-12-14 00:35:17 | 显示全部楼层
很多人都不知道kalman滤波的作用,我觉得其实就是讲加速度计和陀螺仪的输出转换成角度,至于用什么kalman,balance,average看自己的处理器是否给力了

出0入0汤圆

发表于 2012-12-14 00:36:13 | 显示全部楼层
顺便说下,如果楼下认为我有错误,欢迎讨论,我不保证我一定是对的,但是我保证一定给大家一个正确的交代

出0入0汤圆

发表于 2012-12-14 02:46:17 | 显示全部楼层
找到一个帖子,讲到互补滤波:

http://www.amobbs.com/thread-5493125-1-1.html

出0入0汤圆

发表于 2012-12-14 08:13:23 | 显示全部楼层
备用呢。。。mark

出0入0汤圆

发表于 2012-12-14 13:18:07 | 显示全部楼层
是个1维的卡尔曼滤波,他有更新协方差阵和观测噪声阵。

出0入0汤圆

发表于 2013-1-19 11:42:18 | 显示全部楼层
这个不科学啊

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

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

另外没看懂更新协方差的算法,抛开计算精度的问题,Ec 和 Mc 都是同时分别乘以(1-Kg)有什么用?Kg根本不会变嘛!

出0入0汤圆

发表于 2013-1-19 19:52:00 | 显示全部楼层
还是顶一下,留作备用

出0入0汤圆

发表于 2013-1-19 20:40:48 | 显示全部楼层
MARK, 谢谢

出0入0汤圆

发表于 2013-3-3 17:17:37 | 显示全部楼层
Mark,thanks!

出0入0汤圆

发表于 2013-3-3 21:20:42 | 显示全部楼层
Mark,有没有已经验证成功的,分享一下经验。

出0入0汤圆

发表于 2013-3-5 22:25:59 | 显示全部楼层
MARK  谢谢LZ

出0入0汤圆

发表于 2013-3-8 21:06:56 | 显示全部楼层
很好的资源,收藏了
头像被屏蔽

出0入0汤圆

发表于 2013-3-10 14:01:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-3-11 20:21:37 | 显示全部楼层
学习中  先收藏谢谢LZ

出0入0汤圆

发表于 2013-3-12 11:00:03 | 显示全部楼层
MARK,先收藏了

出0入22汤圆

发表于 2013-3-12 11:25:35 | 显示全部楼层
linnjing 发表于 2013-1-19 11:42
这个不科学啊

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

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

真正的卡尔曼,需要一个动态响应方程。或者说变化量。
单变量高速卡尔曼作用不大。

出0入0汤圆

发表于 2013-3-12 11:30:35 | 显示全部楼层
这个必须赞一个啊。NB楼主

出0入0汤圆

发表于 2013-3-12 12:32:44 来自手机 | 显示全部楼层
用手机记号一下

出0入0汤圆

发表于 2013-4-15 21:33:04 | 显示全部楼层
有试过做成四维的卡尔曼滤波器吗?感觉用在stm32f3上跑不太起来

出0入0汤圆

发表于 2013-4-17 15:16:59 | 显示全部楼层
好帖留名,谢谢分享

出0入0汤圆

发表于 2013-4-17 15:51:22 | 显示全部楼层
学习一下~以后备用

出0入0汤圆

发表于 2013-4-23 20:16:10 | 显示全部楼层
mark学习中

出0入0汤圆

发表于 2013-11-5 09:24:58 | 显示全部楼层
没想到看到了自己的程序。
当时做的时候是为了滤除采集到的波形的小尖刺,找了一个牛叉师兄的论文,里面发现了卡尔曼滤波器抽离成一维的滤波器公式。
由于单片机字长限制,也出现了两个系数很快衰减到0,单片机无法表示的数,因此我就设定了一个阈值,当这俩系数小到那个阈值的时候就重新给他们赋初值。我搞东西丢三落四,怕找不到这个程序了就贴了博客上了~~,由于时间久远,记得滤波效果差不多是这个样子

本帖子中包含更多资源

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

x

出0入4汤圆

发表于 2013-11-5 09:43:29 | 显示全部楼层
以后用得着!

出0入0汤圆

发表于 2013-11-5 09:51:33 | 显示全部楼层
学习了,帮顶

出0入0汤圆

发表于 2013-11-5 10:11:24 | 显示全部楼层
mark  套公式原来这么简单,卡尔曼滤波在单片机上面实际应用,转   [复制链接]  

出0入0汤圆

发表于 2013-11-5 11:02:40 | 显示全部楼层
顶楼主,学习了

出0入0汤圆

发表于 2014-3-20 17:28:58 | 显示全部楼层
mark                                                                                                                  

出0入0汤圆

发表于 2014-3-21 13:08:50 | 显示全部楼层
我看了好多卡尔曼的论文,现在终于明白一些道理了,但是要落实的话还是有点难,但是性能好的话也不错的

出0入0汤圆

发表于 2014-3-21 13:35:54 | 显示全部楼层
看不到图片

出0入0汤圆

发表于 2014-3-21 14:21:31 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2014-3-23 07:11:30 来自手机 | 显示全部楼层
先收藏了吧

出0入0汤圆

发表于 2014-3-23 08:04:15 | 显示全部楼层
wo还不明白加速度为什么能和陀螺仪的数据相融合。。

出0入0汤圆

发表于 2014-3-26 10:33:06 | 显示全部楼层
mark!学习一下

出0入0汤圆

发表于 2015-7-7 21:10:54 | 显示全部楼层
贴子很不错,收藏备用了!

出0入0汤圆

发表于 2016-11-30 18:30:46 | 显示全部楼层
mark!!!!!

出0入0汤圆

发表于 2017-1-3 08:40:26 | 显示全部楼层
学习了,通俗易懂的东西

出0入0汤圆

发表于 2017-1-3 09:38:20 | 显示全部楼层
贴子很不错,学习了!!

出0入0汤圆

发表于 2017-1-3 10:03:02 | 显示全部楼层

贴子很不错,学习了!!

出0入0汤圆

发表于 2017-1-3 12:53:30 | 显示全部楼层
谢谢分享 !

出0入0汤圆

发表于 2017-1-4 16:54:01 | 显示全部楼层
MARK,先收藏了

出0入0汤圆

发表于 2017-1-5 08:10:38 | 显示全部楼层
mark 备用!

出0入0汤圆

发表于 2017-1-5 22:53:18 来自手机 | 显示全部楼层
卡尔曼滤波,速度马克备用,多谢楼主

出0入0汤圆

发表于 2017-1-6 08:36:00 来自手机 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2017-1-16 12:37:42 | 显示全部楼层
好东西           

出0入0汤圆

发表于 2017-2-24 22:37:19 | 显示全部楼层
进来学习

出0入0汤圆

发表于 2017-2-25 17:27:13 | 显示全部楼层
xsh2005105326 发表于 2012-5-11 23:40
单片机执行,够呛吧
来自:amoBBS 阿莫电子论坛 Android客户端

只有不好的算法,一般AVR单片机也能够执行,只要程序优化的好

出0入0汤圆

发表于 2017-3-2 08:36:52 | 显示全部楼层
mark下,备用

出0入0汤圆

发表于 2017-3-2 09:04:09 | 显示全部楼层
mark,标记下,说不定什么时候就用上了

出0入0汤圆

发表于 2017-3-2 09:17:27 | 显示全部楼层
上学的时候没有认真,现在看都看不懂了

出0入0汤圆

发表于 2017-3-2 10:10:54 | 显示全部楼层
收藏备用  

出0入0汤圆

发表于 2017-3-2 16:37:37 | 显示全部楼层
运行算过程都是典型的浮点运行算,直接把程序放在MCU中运行不合理。大体估计了一下时间,2812级的单片机运算时间应该在100微妙左右。

出0入0汤圆

发表于 2017-3-2 17:07:12 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2017-3-2 21:43:07 | 显示全部楼层
搞传感器和四轴姿态融合的可以用上哦!帮顶上去!

出0入0汤圆

发表于 2017-3-31 18:15:28 | 显示全部楼层
感觉不全对, EstimateCovariance;//估计协方差
  MeasureCovariance;//测量协方差
没有更新

出0入0汤圆

发表于 2018-2-5 23:47:02 来自手机 | 显示全部楼层
卡尔曼滤波 make

出0入0汤圆

发表于 2019-5-10 10:18:06 | 显示全部楼层
mark................

出0入0汤圆

发表于 2019-5-10 13:11:34 | 显示全部楼层
mark下......

出0入0汤圆

发表于 2019-5-10 13:49:54 | 显示全部楼层
收藏备用,经典的PID

出0入0汤圆

发表于 2019-12-17 15:11:00 | 显示全部楼层
Mark,卡尔曼滤波器C语言实现。

出0入79汤圆

发表于 2019-12-17 20:37:21 | 显示全部楼层
一般来说,最好配上原始波形和滤波后的波形的对比图比较好,方便看效果。

8位单片机一样可以使用,速度没有问题。

出0入0汤圆

发表于 2019-12-17 21:09:21 来自手机 | 显示全部楼层
卡尔曼滤波,学习一下

出0入0汤圆

发表于 2019-12-17 21:49:59 | 显示全部楼层
卡尔曼滤波

出0入0汤圆

发表于 2019-12-17 23:19:22 | 显示全部楼层
卡尔曼还是互补滤波器? 反正都能用

出675入8汤圆

发表于 2021-8-28 07:16:32 来自手机 | 显示全部楼层
有人测试效果了吗?

出100入312汤圆

发表于 2021-8-28 07:30:51 来自手机 | 显示全部楼层
不错,效果看49楼

出10入0汤圆

发表于 2022-4-18 16:23:38 | 显示全部楼层
linnjing 发表于 2013-1-19 11:42
这个不科学啊

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

我用楼主的代码。验证了你的结论;刚开始效果还是有的,时间长了卡尔曼增益变为0,就没用了。。。
怎么解决还在思考。。。

出0入4汤圆

发表于 2022-4-18 17:01:32 | 显示全部楼层
mainbp 发表于 2022-4-18 16:23
我用楼主的代码。验证了你的结论;刚开始效果还是有的,时间长了卡尔曼增益变为0,就没用了。。。
怎么解 ...
(引用自94楼)

好像49楼有注释。哈哈

出10入0汤圆

发表于 2022-4-19 14:53:10 | 显示全部楼层
D.lovers 发表于 2022-4-18 17:01
好像49楼有注释。哈哈
(引用自95楼)

嗯,谢谢啦,没注意看;
测试了,可以的;

出0入0汤圆

发表于 2022-6-13 11:13:38 | 显示全部楼层
Thank you !!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 14:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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