搜索
bottom↓
楼主: jackk

卡尔曼滤波算法C语言实现(转2)

  [复制链接]

出0入0汤圆

发表于 2014-12-24 15:40:18 | 显示全部楼层
好好学习一下。

出0入0汤圆

发表于 2014-12-14 16:23:31 | 显示全部楼层
卡尔曼滤波算法C语言实现  这个不错mark一下,下个月用

出0入0汤圆

发表于 2014-12-14 15:10:14 | 显示全部楼层
收下了,谢谢楼主分享

出0入0汤圆

发表于 2014-12-14 15:07:30 | 显示全部楼层
路过帮顶   学习学习 !!!

出0入0汤圆

发表于 2014-12-14 14:15:35 | 显示全部楼层
应该改进的了的吧,系统方差还有测量方差实时计算。。AKF自适应卡尔曼滤波

出0入0汤圆

发表于 2014-12-13 17:29:17 | 显示全部楼层
楼主有大爱

出0入0汤圆

发表于 2014-12-12 14:42:23 来自手机 | 显示全部楼层
不错,跟着楼主学习了!

出0入0汤圆

发表于 2014-12-3 15:14:27 | 显示全部楼层
mark,学习了

出0入0汤圆

发表于 2014-11-15 16:48:03 | 显示全部楼层
有内容,MARK。

出0入0汤圆

发表于 2014-11-15 16:19:17 | 显示全部楼层
过段时间就要学这个滤波了,做个记号先

出0入0汤圆

发表于 2014-10-30 21:46:56 | 显示全部楼层
你已經做得很棒了

真的,謝謝您的分享 ^^"

出0入0汤圆

发表于 2014-10-30 10:57:35 | 显示全部楼层
学习了...

出0入0汤圆

发表于 2014-10-27 20:05:14 | 显示全部楼层
这个需要,研究一下。

出0入0汤圆

发表于 2014-10-27 19:11:17 | 显示全部楼层
O(∩_∩)O谢谢楼主分享

出0入0汤圆

发表于 2014-10-25 23:17:33 | 显示全部楼层
顶一个,对我帮助大大了!!!!!!!!!!!!!

出0入0汤圆

发表于 2014-10-23 08:43:16 | 显示全部楼层
谢谢分享......

出0入0汤圆

发表于 2014-10-22 14:17:05 | 显示全部楼层
卡尔曼滤波,学习了

出0入0汤圆

发表于 2014-10-6 15:46:09 来自手机 | 显示全部楼层
已收藏 感谢分享

出0入0汤圆

发表于 2014-10-6 15:19:56 | 显示全部楼层
这个飞控上应该很有用。

出0入0汤圆

发表于 2014-10-6 15:01:41 | 显示全部楼层
学习了,谢谢楼主分享!!

出0入0汤圆

发表于 2014-10-6 14:40:09 | 显示全部楼层
学习了

出0入0汤圆

发表于 2014-10-6 12:16:12 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-9-30 11:35:17 | 显示全部楼层
很好,标记一下!收藏!

出0入0汤圆

发表于 2014-9-19 14:51:22 | 显示全部楼层
好贴留名,备用

出0入0汤圆

发表于 2014-9-17 11:30:28 | 显示全部楼层

谢谢分享。。。。。。

出0入4汤圆

发表于 2014-9-15 12:16:57 | 显示全部楼层
好资料,效果太好了

出0入0汤圆

发表于 2014-9-15 11:01:04 | 显示全部楼层
好东西,留名收藏

出0入0汤圆

发表于 2014-9-11 11:20:40 | 显示全部楼层
ËÄÖá·ÉÐÐ?¿¨¶ûÂü

出0入0汤圆

发表于 2014-9-11 11:06:44 | 显示全部楼层
好厉害的样子,,,一点都不懂

出0入0汤圆

发表于 2014-8-28 19:29:16 | 显示全部楼层
不理解,楼主为什么不在函数内部循环  而是采用静态变量的做法,在外部控制循环呢

出0入0汤圆

发表于 2014-8-28 15:45:53 | 显示全部楼层
#在这里快速回复#不错,卡尔曼滤波,mark下

出0入0汤圆

发表于 2014-8-28 13:23:47 | 显示全部楼层
MARK卡尔曼滤波算法C

出0入0汤圆

发表于 2014-8-28 11:13:47 | 显示全部楼层
不错,学习了!

出0入0汤圆

发表于 2014-8-26 13:50:17 | 显示全部楼层
MARK!厉害!

出0入0汤圆

发表于 2014-8-26 12:48:20 | 显示全部楼层
码下来。。慢慢学。。

出0入0汤圆

发表于 2014-8-22 17:08:29 | 显示全部楼层
学习了,再仔细看看

出0入0汤圆

发表于 2014-8-11 22:44:24 | 显示全部楼层
学习了..........不错.............

出0入0汤圆

发表于 2014-8-11 22:14:03 | 显示全部楼层
领教了,多谢楼主。。。

出0入0汤圆

发表于 2014-8-11 20:14:45 | 显示全部楼层
不错,讲的相对详细,学习下!

出0入0汤圆

发表于 2014-8-7 10:25:08 | 显示全部楼层
不错,讲的相对详细,学习下

出0入0汤圆

发表于 2014-8-4 12:06:42 | 显示全部楼层
wiser803 发表于 2014-8-3 16:25
看了网络上许多对于KALMAN滤波的应用,都是将其当一个传感器或一个信号的后端滤波器使用。这是杀鸡用 ...

请给个其他的滤波的例子啊

出0入0汤圆

发表于 2014-8-4 09:51:08 | 显示全部楼层
很好的东西,学习了

出0入0汤圆

发表于 2014-8-3 19:58:27 | 显示全部楼层
感觉LZ的例子里面,如果只是白噪声干扰,用RC或者滑动平均,波形就很好看了

出0入0汤圆

发表于 2014-8-3 16:25:37 | 显示全部楼层
本帖最后由 wiser803 于 2014-8-3 16:28 编辑

      看了网络上许多对于KALMAN滤波的应用,都是将其当一个传感器或一个信号的后端滤波器使用。这是杀鸡用牛刀,是对KALMAN滤波器重大误解造成的。也许,造成这种局面是高校在教了KALMAN滤波原理后,为了联系实际应用給学生一个示例,用单片机KALMAN滤波对信号进行简单的滤波,而学生误以为KALMAN滤波就是干这个用的。
    其实,对于传感器或信号的后端滤波处理,已经有大量很成熟、很好的数字滤波方案可用,相对KALMAN滤波繁杂的代码轻巧很多,其滤波效果甚至比KALMAN滤波直接用来处理信号好很多。
    KALMAN博士推导出这套滤波方法是基于带正态噪声的线性系统模型状态变量的最优估计器(观测器),或称动力学状态最优估计器。由此可知,KALMAN滤波适用于系统模型下的滤波测量和最优估计,信号经适当处理后一般可用于高精度反馈控制。与一般信号滤波器设计参数相对独立不同,KALMAN滤波必须根据系统模型参数,来导出滤波器其他参数。因此,KALMAN滤波的前端信号预处理还是需要的,并非只要KALMAN滤波就OK了。当然,如果将KALMAN滤波器简化到仅仅类似一般信号滤波器,由于阶次的退化其滤波效果预计不会超过专用滤波器的。

出0入0汤圆

发表于 2014-8-3 12:26:14 | 显示全部楼层
膜拜,mark,

出0入0汤圆

发表于 2014-8-1 17:25:42 | 显示全部楼层
相当不错

出0入0汤圆

发表于 2014-7-31 15:50:13 | 显示全部楼层
好贴。。码一下。。慢慢研究。。

出0入0汤圆

发表于 2014-7-31 14:36:10 | 显示全部楼层
标记,卡尔曼滤波

出0入0汤圆

发表于 2014-7-7 21:39:38 | 显示全部楼层

赞一个,楼主

出0入10汤圆

发表于 2014-7-7 21:20:22 | 显示全部楼层
赞一个,楼主

出0入0汤圆

 楼主| 发表于 2014-6-30 20:00:32 | 显示全部楼层
梦中花雨 发表于 2014-6-28 10:32
请问下卡尔曼滤波器的测量噪声系数和系统噪声系数如何确定啊,如mems陀螺仪还有温漂和零漂如何处理呢 ...

试。。。

出0入0汤圆

发表于 2014-6-28 10:32:35 | 显示全部楼层
请问下卡尔曼滤波器的测量噪声系数和系统噪声系数如何确定啊,如mems陀螺仪还有温漂和零漂如何处理呢

出0入10汤圆

发表于 2014-6-17 14:51:13 | 显示全部楼层
  不错。很好1

出0入0汤圆

发表于 2014-6-17 14:42:05 | 显示全部楼层
学生就能做到这个程度,不错。

出0入0汤圆

发表于 2014-6-9 15:52:33 | 显示全部楼层
mark!!!!!!!!!!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2014-6-7 10:48:22 | 显示全部楼层
先收藏mark了

出0入0汤圆

发表于 2014-6-6 20:44:36 来自手机 | 显示全部楼层
先马克一记

出0入0汤圆

发表于 2014-6-4 15:01:21 | 显示全部楼层
是否有必要讨论下状态量和观测量的问题?
其一,我们需要的结果,并不符合一个线性的关系。
其二,若我用陀螺仪去计算我的角度,在这个公式中如何用加速度计当作观测量来滤波。
看了这个公式,我想仅可以实现单个变量的滤波,并无法实现数据融合,陀螺仪和加计还是无法去相互纠正。
真的困惑了。。。理论帝不吝指点啊。。。

出0入0汤圆

发表于 2014-6-4 09:24:38 | 显示全部楼层
楼主,卡尔曼滤波貌似是对随机信号的处理,楼主用在哪里?

出0入0汤圆

发表于 2014-6-2 21:31:48 | 显示全部楼层
本帖最后由 SMC 于 2014-6-2 21:33 编辑
K.O.Carnivist 发表于 2014-3-9 15:19
嗯说下我的学院派的补充吧……

首先呢,卡尔曼滤波是个现代控制理论领域的内容,虽然似乎不少人认为现代控 ...


大神,可以看下Pixhawk的EKF融合姿态吗? 看完后给个短评呗。
Pixhawk的姿态融合有两种可选,一种是EKF,一种是四元数叉乘互补;我看完了后者,发现和坛子里的一模一样,但EKF就无能为力了。
这是网址:https://github.com/PX4/Firmware/ ... itude_estimator_ekf

出0入0汤圆

发表于 2014-6-2 15:31:53 | 显示全部楼层
看到上面的讨论,好多数学的东西都淡忘了,惭愧。

出0入0汤圆

发表于 2014-5-30 00:57:08 | 显示全部楼层
这个学习了.正好在作气压计的程序.读数总是不稳.试试这个滤波

出0入0汤圆

发表于 2014-5-28 09:25:35 | 显示全部楼层
厉害!学习了

出0入0汤圆

发表于 2014-5-27 18:16:02 | 显示全部楼层
讲得还是比较通俗易懂,学习了

出0入0汤圆

发表于 2014-5-27 16:10:48 | 显示全部楼层
正在学习。谢谢分享卡尔曼滤波算法。

出0入0汤圆

发表于 2014-5-19 20:09:00 | 显示全部楼层
留下记号

出0入0汤圆

发表于 2014-5-19 02:44:15 来自手机 | 显示全部楼层
mark。。。不错

出0入0汤圆

发表于 2014-5-18 15:49:57 | 显示全部楼层
好学生,,,,感谢哈

出0入0汤圆

发表于 2014-5-18 11:08:26 | 显示全部楼层
挺好,赞一个!
我用6050做的卡尔曼,四元数做状态,但是有时会有加速度计跳变导致在卡尔曼滤波里修正的那一步上,使状态(四元数)跳变,进而反解的姿态角也跳变,你是怎么处理的?

出0入0汤圆

发表于 2014-5-14 14:09:05 | 显示全部楼层
标记,以后可能用到

出0入0汤圆

发表于 2014-5-14 10:59:13 | 显示全部楼层
Mark 正在学习呀

出0入0汤圆

发表于 2014-5-12 11:58:37 | 显示全部楼层
正需要这个  Mark

出0入0汤圆

发表于 2014-5-11 13:10:56 来自手机 | 显示全部楼层
Mark 正在学习呀

出0入0汤圆

发表于 2014-5-11 10:49:44 | 显示全部楼层
看了楼主的程序,有几个问题,希望楼主解答!

1.我采集的三轴角度传感器的X Y Z三个通道的AD值,用DMA传输,kalman代码是copy你程序里的,但是输出的值却和我均值滤波后的不一样!
        楼主的KALMAN_Q=0.0000001,KALMAN_R=10.0000,而我的确实反过来是对的!
        接触kalman没几天,不知道我的参数对与不对?

2.关于程序可里“Kalman初期迭代过程中的不稳定数据,删除之”,我测试了影响并不是很大,或许是我的硬件滤波已经做的很好了,软件可以有很小的压力吧?
    声明下,我不是做广告的啊!!!我用的是3+2角速度加速度传感器,这个硬件做的很好!个人观点!

3.我的是一个2维数组,但是我是把每一个数据都进行了滤波,对么?还是说不行?

出0入0汤圆

发表于 2014-5-10 18:29:47 | 显示全部楼层
lologame 发表于 2014-4-18 19:35
噪声协方差如何时变呢?没有在卡尔曼方程里面见到对噪声协方差矩阵的更新呀 ...

噪声协方差是另外算的。
给您个例子吧:比如观测一个物体在一维直线上运动,观测量是上一次观测到本次观测之间物体运动的距离(实际上就是速度),误差是测量值的5%;这时观测噪声的分布就是时变的,用卡尔曼滤波的话每次迭代前观测噪声协方差就要用本次的观测量算出来。

出0入0汤圆

发表于 2014-5-5 02:14:15 | 显示全部楼层
顶,,mark

出0入0汤圆

发表于 2014-4-24 13:49:02 | 显示全部楼层
通俗易懂,点个赞!

出0入0汤圆

发表于 2014-4-24 13:12:12 | 显示全部楼层
楼主有做过多维的情况吗?

出0入0汤圆

发表于 2014-4-24 07:43:00 来自手机 | 显示全部楼层
学习!学好数理化,走遍天下都不怕

出0入0汤圆

发表于 2014-4-24 00:46:26 | 显示全部楼层
顶!给力!!

出0入0汤圆

发表于 2014-4-23 17:09:05 | 显示全部楼层
Mark ..学习了

出0入0汤圆

发表于 2014-4-23 15:04:23 | 显示全部楼层
以前也学了卡尔曼滤波,不过学得不够啊,现在做飞控感觉还是很难

出0入0汤圆

发表于 2014-4-22 18:59:27 | 显示全部楼层
不错不错!

出0入0汤圆

发表于 2014-4-22 17:16:29 | 显示全部楼层
挺详细的卡尔曼资料

出0入0汤圆

发表于 2014-4-19 20:15:02 | 显示全部楼层
学习学习。很有用的东西必须马克

出0入0汤圆

发表于 2014-4-18 19:35:51 | 显示全部楼层
K.O.Carnivist 发表于 2014-4-18 19:18
应该是只要求噪声是是独立的高斯分布,没有要求平稳性。噪声协方差阵可以是时变的。 ...

噪声协方差如何时变呢?没有在卡尔曼方程里面见到对噪声协方差矩阵的更新呀

出0入0汤圆

发表于 2014-4-18 19:18:37 | 显示全部楼层
lologame 发表于 2014-4-18 18:33
我对卡尔曼滤波一直有个疑问,卡尔曼滤波需要噪声模型,需要对噪声作估计,那么卡尔曼滤波可以对非平稳噪 ...

应该是只要求噪声是是独立的高斯分布,没有要求平稳性。噪声协方差阵可以是时变的。

出0入0汤圆

发表于 2014-4-18 18:33:23 | 显示全部楼层
K.O.Carnivist 发表于 2014-3-9 15:19
嗯说下我的学院派的补充吧……

首先呢,卡尔曼滤波是个现代控制理论领域的内容,虽然似乎不少人认为现代控 ...

我对卡尔曼滤波一直有个疑问,卡尔曼滤波需要噪声模型,需要对噪声作估计,那么卡尔曼滤波可以对非平稳噪声进行滤波吗?

出0入0汤圆

 楼主| 发表于 2014-4-18 18:04:34 | 显示全部楼层
落叶知秋 发表于 2014-4-15 11:36
看了楼主的代码,有些两个疑问:
其一,

p_last  类型是 static的,会随着迭代调用的进行而进行同时迭代。理解C语言中的static关键字就会理解p_last的初值问题了。实际上,每次的你所谓初值,即为上次函数退出时的值。

出0入0汤圆

 楼主| 发表于 2014-4-18 18:02:17 | 显示全部楼层
落叶知秋 发表于 2014-4-15 11:36
看了楼主的代码,有些两个疑问:
其一,

1,InitialPredictio在函数的实现中确实没用到。学院派的一种说法是:卡尔曼的收敛性与最初的系统估计关系不是很大,只要不为0,最终都会有比较理想的收敛效果。在最终的收敛完场之后,无论最初赋值为多少,都基本会稳定到某一个值。
2,那三个值需要根据不同的实现来尝试调节。没有经验公式,至少我不知道经验公式。实际上,即使存在所谓经验公式,有时间去理解经验公式,可能已经尝试出来了。

出870入263汤圆

发表于 2014-4-17 13:28:56 | 显示全部楼层
对于有纹波的AD检测,用卡尔曼过滤器是很理想的。

出40入42汤圆

发表于 2014-4-15 11:36:22 | 显示全部楼层
看了楼主的代码,有些两个疑问:
其一,
  1. double KalmanFilter(const double ResrcData,double ProcessNiose_Q,double MeasureNoise_R,[color=Red]double InitialPrediction[/color])
  2. {
  3.         double R = MeasureNoise_R;
  4.         double Q = ProcessNiose_Q;

  5.         static        double x_last;

  6.         double x_mid = x_last;
  7.         double x_now;

  8.         [color=Red]static        double p_last;[/color]

  9.         double p_mid ;
  10.         double p_now;
  11.         double kg;       

  12.         x_mid=x_last; //x_last=x(k-1|k-1),x_mid=x(k|k-1)
  13.         p_mid=p_last+Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声
  14.         kg=p_mid/(p_mid+R); //kg为kalman filter,R为噪声
  15.         x_now=x_mid+kg*(ResrcData-x_mid);//估计出的最优值
  16.                
  17.         p_now=(1-kg)*p_mid;//最优值对应的covariance       

  18.         p_last = p_now; //更新covariance值
  19.         x_last = x_now; //更新系统状态值

  20.         return x_now;               
  21. }
复制代码

中的红色参数InitialPrediction,完全没有使用,那究竟有何用?
还有一个红色的参数p_last没有赋初值,那么这个参数就是初始化为0值?
看你的main里面开始的时候有做一段dummy的采集,这个p_last的值应该是那时候开始累积的。对否?

其二,
能说一下你设定的那三个参数(宏定义)是怎么来的么?
当初你设定的时候是否有经验公式?还是说调试出来的?

出0入0汤圆

发表于 2014-4-15 11:19:57 | 显示全部楼层
不错,卡尔曼滤波,明天试一下

出40入42汤圆

发表于 2014-4-15 11:13:04 | 显示全部楼层
好贴顶之!

出0入0汤圆

发表于 2014-4-11 23:05:25 来自手机 | 显示全部楼层
学习学习                     

出0入0汤圆

发表于 2014-4-11 22:20:53 | 显示全部楼层
这个必须顶!!!!!!!!!!

出0入0汤圆

发表于 2014-4-11 15:42:56 | 显示全部楼层
卡尔曼滤波算法C语言实现

出10入95汤圆

发表于 2014-4-10 14:12:04 | 显示全部楼层
谢谢分享!学习了

出0入0汤圆

发表于 2014-3-31 09:30:42 来自手机 | 显示全部楼层
卡尔曼需要简历精确的模型,然后通过现代控制理论和矩阵运算得出准确的公式,还有很多地方需要自己去简化,才可以,特别是对噪声的处理,有色还是无色,

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-13 07:02

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

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