小笨蛋 发表于 2012-5-11 16:27:05

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

本帖最后由 小笨蛋 于 2012-5-11 16:28 编辑

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






#ifndef _KALMAN_H_
#define _KALMAN_H_

externKalmanGain;//卡尔曼增益
externEstimateCovariance;//估计协方差
externMeasureCovariance;//测量协方差
externEstimateValue;//估计值
extern void KalmanFilterInit(void);
extern      KalmanFilter(   Measure);
#endif



#include "config.h"
#include "math.h"

KalmanGain;//卡尔曼增益
EstimateCovariance;//估计协方差
MeasureCovariance;//测量协方差
EstimateValue;//估计值

void KalmanFilterInit(void);

extern    floatKalmanFilter(float   Measure);


void KalmanFilterInit(void)
{
EstimateValue=0;

EstimateCovariance=0.1;
MeasureCovariance=0.02;


}

KalmanFilter(   Measure)
{

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

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

EstimateCovariance=sqrt(1-KalmanGain)*EstimateCovariance;
//更新测量方差
MeasureCovariance=sqrt(1-KalmanGain)*MeasureCovariance;
//返回估计值
return EstimateValue;
}转自http://blog.163.com/tianjunqiang666@126/blog/static/87259119201131314343274/

loongsuns 发表于 2012-5-11 16:29:00

从上班就开始听说卡尔曼一直没见过,哈哈

a_2012_m 发表于 2012-5-11 16:33:21

mark 备用!

蓝海de梦 发表于 2012-5-11 22:08:11

mark!正准备搞呢

liang_work 发表于 2012-5-11 22:33:57

mark 备用!

jack_yu 发表于 2012-5-11 22:56:55

学习了.谢谢!{:smile:}{:smile:}{:smile:}

wochai 发表于 2012-5-11 23:08:54

还是浮点运算啊

xsh2005105326 发表于 2012-5-11 23:40:33

单片机执行,够呛吧
来自:amoBBS 阿莫电子论坛 Android客户端

licongdwqx 发表于 2012-5-13 23:19:00

怎么看不到图啊

Duida 发表于 2012-5-13 23:31:41

mark,过两天搞起

yat 发表于 2012-5-14 09:30:31

markxiexie

Spunky 发表于 2012-5-14 09:44:31

只知道这是个预测模型,由于太复杂一直没有弄懂,得好好研究下

whxiaowang 发表于 2012-5-14 09:46:59

mark......

htjgdw 发表于 2012-5-14 12:57:28

有时间试试。

waszhang 发表于 2012-5-18 17:46:16

我用软件模拟了一下上面的代码,发现几个公式有点问题,首先是卡尔曼增益,好多资料上说是
KalmanGain=sqrt(EstimateCovariance*EstimateCovariance/(EstimateCovariance*EstimateCovariance + MeasureCovariance*MeasureCovariance));
其他几个公式感觉也有问题,还在验证中,有没有已经验证成功的,分享一下经验。

skystalker 发表于 2012-5-21 20:46:41

这是哪门子卡尔曼 也就是个互补滤波

zhzj2007 发表于 2012-11-24 15:18:07

互补滤波......................

w1000 发表于 2012-11-24 15:48:10

卡尔曼是什么呀。适用于何处?

c65193145 发表于 2012-11-24 20:04:22

认真学习 单片机完全可以跑起来 我确定。。

40342zz 发表于 2012-11-24 21:41:25

建议看看现代控制理论或者随机信号处理一类的书吧,这个貌似有点……

yanrz 发表于 2012-11-24 22:17:07

还没用过,先留个脚印!
多谢楼主!

number007cool 发表于 2012-11-28 11:18:22

到底是kalman还是互补啊

wanwan-mcu 发表于 2012-11-28 17:44:41

zywei_09 发表于 2012-11-29 21:57:45

互补滤波,鉴定完毕,卡尔曼滤波的融合系数是通过对噪声的观测得到的。互补滤波是人为设定的,这个程序里融合系数是人为设定的。

beyond870215 发表于 2012-11-29 22:21:52

好东西mark

xiao6ye 发表于 2012-11-30 23:57:21

还是没懂

f43 发表于 2012-12-14 00:35:17

很多人都不知道kalman滤波的作用,我觉得其实就是讲加速度计和陀螺仪的输出转换成角度,至于用什么kalman,balance,average看自己的处理器是否给力了

f43 发表于 2012-12-14 00:36:13

顺便说下,如果楼下认为我有错误,欢迎讨论,我不保证我一定是对的,但是我保证一定给大家一个正确的交代

xizi 发表于 2012-12-14 02:46:17

找到一个帖子,讲到互补滤波:

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

richards 发表于 2012-12-14 08:13:23

备用呢。。。mark

asha 发表于 2012-12-14 13:18:07

是个1维的卡尔曼滤波,他有更新协方差阵和观测噪声阵。

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

还是顶一下,留作备用{:smile:}

wcm_e 发表于 2013-1-19 20:40:48

MARK, 谢谢

oldbreadman 发表于 2013-3-3 17:17:37

Mark,thanks!

sailing8 发表于 2013-3-3 21:20:42

Mark,有没有已经验证成功的,分享一下经验。

adwinter 发表于 2013-3-5 22:25:59

MARK谢谢LZ

wangyeqing333 发表于 2013-3-8 21:06:56

很好的资源,收藏了

zanran8 发表于 2013-3-10 14:01:58

reAper07 发表于 2013-3-11 20:21:37

学习中先收藏{:lol:}谢谢LZ

chensfu 发表于 2013-3-12 11:00:03

MARK,先收藏了

lixin91985 发表于 2013-3-12 11:25:35

linnjing 发表于 2013-1-19 11:42 static/image/common/back.gif
这个不科学啊

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

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

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

Hunter 发表于 2013-3-12 11:30:35

这个必须赞一个啊。NB楼主

bg6agf 发表于 2013-3-12 12:32:44

用手机记号一下

gyx07048153 发表于 2013-4-15 21:33:04

有试过做成四维的卡尔曼滤波器吗?感觉用在stm32f3上跑不太起来

夕阳下的吉他 发表于 2013-4-17 15:16:59

好帖留名,谢谢分享

lianyisixue 发表于 2013-4-17 15:51:22

学习一下~以后备用

Gost 发表于 2013-4-23 20:16:10

mark学习中

382430325 发表于 2013-11-5 09:24:58

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

sunliezhi 发表于 2013-11-5 09:43:29

以后用得着!

hd7a27 发表于 2013-11-5 09:51:33

学习了,帮顶

yat 发表于 2013-11-5 10:11:24

mark套公式原来这么简单,卡尔曼滤波在单片机上面实际应用,转   [复制链接]

longfeix86 发表于 2013-11-5 11:02:40

顶楼主,学习了

muyejingfeng 发表于 2014-3-20 17:28:58

mark                                                                                                                  

木君之上 发表于 2014-3-21 13:08:50

我看了好多卡尔曼的论文,现在终于明白一些道理了,但是要落实的话还是有点难,但是性能好的话也不错的

a_in_s 发表于 2014-3-21 13:35:54

看不到图片

jack_yu 发表于 2014-3-21 14:21:31

谢谢楼主!

lydiary 发表于 2014-3-23 07:11:30

先收藏了吧

lydiary 发表于 2014-3-23 08:04:15

wo还不明白加速度为什么能和陀螺仪的数据相融合。。

六月峰 发表于 2014-3-26 10:33:06

mark!学习一下

索达客 发表于 2015-7-7 21:10:54

贴子很不错,收藏备用了!

jorry 发表于 2016-11-30 18:30:46

mark!!!!!

zhenan421731 发表于 2017-1-3 08:40:26

学习了,通俗易懂的东西

qmsolo2004 发表于 2017-1-3 09:38:20

贴子很不错,学习了!!

lcmdw 发表于 2017-1-3 10:03:02


贴子很不错,学习了!!

stevenh 发表于 2017-1-3 12:53:30

谢谢分享 !

dreamer2016 发表于 2017-1-4 16:54:01

MARK,先收藏了

Xiyuhexuan 发表于 2017-1-5 08:10:38

mark 备用!

mcufan5524 发表于 2017-1-5 22:53:18

卡尔曼滤波,速度马克备用,多谢楼主

eliterxzgxu 发表于 2017-1-6 08:36:00

感谢楼主分享

Xiyuhexuan 发表于 2017-1-16 12:37:42

好东西         

wuquanhui2010 发表于 2017-2-24 22:37:19

进来学习

richard1984 发表于 2017-2-25 17:27:13

xsh2005105326 发表于 2012-5-11 23:40
单片机执行,够呛吧
来自:amoBBS 阿莫电子论坛 Android客户端

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

织梦 发表于 2017-3-2 08:36:52

mark下,备用

hanzo852 发表于 2017-3-2 09:04:09

mark,标记下,说不定什么时候就用上了

sup888 发表于 2017-3-2 09:17:27

上学的时候没有认真,现在看都看不懂了

lncwangfeilnc 发表于 2017-3-2 10:10:54

收藏备用

catzsh 发表于 2017-3-2 16:37:37

运行算过程都是典型的浮点运行算,直接把程序放在MCU中运行不合理。大体估计了一下时间,2812级的单片机运算时间应该在100微妙左右。

hanbing333444 发表于 2017-3-2 17:07:12

学习了,谢谢

luozhongchao123 发表于 2017-3-2 21:43:07

搞传感器和四轴姿态融合的可以用上哦!帮顶上去!

longjh 发表于 2017-3-31 18:15:28

感觉不全对, EstimateCovariance;//估计协方差
MeasureCovariance;//测量协方差
没有更新

wsh 发表于 2018-2-5 23:47:02

卡尔曼滤波 make

ttbboo 发表于 2019-5-10 10:18:06

mark................

kingaaa 发表于 2019-5-10 13:11:34

mark下......

kxm2008 发表于 2019-5-10 13:49:54

收藏备用,经典的PID

malaoshi 发表于 2019-12-17 15:11:00

Mark,卡尔曼滤波器C语言实现。

motor_control 发表于 2019-12-17 20:37:21

一般来说,最好配上原始波形和滤波后的波形的对比图比较好,方便看效果。

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

genhao2 发表于 2019-12-17 21:09:21

卡尔曼滤波,学习一下

somwin 发表于 2019-12-17 21:49:59

卡尔曼滤波

b_snow 发表于 2019-12-17 23:19:22

卡尔曼还是互补滤波器? 反正都能用

xml2028 发表于 2021-8-28 07:16:32

有人测试效果了吗?

akey3000 发表于 2021-8-28 07:30:51

不错,效果看49楼

mainbp 发表于 2022-4-18 16:23:38

linnjing 发表于 2013-1-19 11:42
这个不科学啊

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

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

D.lovers 发表于 2022-4-18 17:01:32

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

好像49楼有注释。哈哈

mainbp 发表于 2022-4-19 14:53:10

D.lovers 发表于 2022-4-18 17:01
好像49楼有注释。哈哈
(引用自95楼)

嗯,谢谢啦,没注意看;
测试了,可以的;{:victory:}

liang16888 发表于 2022-6-13 11:13:38

Thank you !!!
页: [1]
查看完整版本: 套公式原来这么简单,卡尔曼滤波在单片机上面实际应用,转