51uwb.cn

 找回密码
 立即注册
查看: 31703|回复: 117
打印 上一主题 下一主题

【源码参考】kalman 滤波调试

  [复制链接]

73

主题

249

帖子

6783

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6783
跳转到指定楼层
楼主
发表于 2020-4-18 19:56:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
资料包有一个kalman文件夹,里面的程序是从拷贝过来的,没有验证,加上测距效果较好,用均值滤波已经达到我的预期,
kalman滤波一直没有提上日程。
直到前两天一坛友发帖说到这个事,我才有开始琢磨

http://51uwb.cn/forum.php?mod=viewthread&tid=209&extra=page%3D1

进过一番苦苦寻找和调试,终于调通了,特此分享给各位坛友。
先看结果(linux下调试结果)
蓝色数据为原始值,红色是原始值加一个随机噪声,绿色为kalman滤波后结果。

从仿真结果上看,kalman滤波后数据波动变小,更加稳定,更接近真实值。

附件源码使用:
linux gcc编译:gcc -o kalman main.c kalman.c matrix.c -lm
然后执行./kalman即可

*目前与资料包代码不一致,后期更新资料包kalman 滤波算法





kalman_test.rar

11.74 KB, 下载次数: 354

售价: 5 金钱  [记录]

回复

使用道具 举报

73

主题

249

帖子

6783

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6783
沙发
 楼主| 发表于 2020-4-18 21:49:57 | 只看该作者
测距实际结果,+-5cm到+-2.5cm,稳定度好很多!


使用方法
测距之前做初始化
  1. KalMan_Init();
复制代码
算出距离后,直接传入,下面是原始数据和kalman数据全部打印出来
  1. distance = distance - dwt_getrangebias(config.chan,(float)distance, config.prf);
  2. printf("0x%04X <--> 0x%02X%02X : %.2f  %.2f cm\n",SHORT_ADDR,msg_f_send.destAddr[1],msg_f_send.destAddr[0],distance,KalMan(distance));
复制代码
部分原始数据
  1. 0x0002 <--> 0x0001 : 1.75  1.73 cm
  2. 0x0002 <--> 0x0001 : 1.72  1.73 cm
  3. 0x0002 <--> 0x0001 : 1.70  1.73 cm
  4. 0x0002 <--> 0x0001 : 1.73  1.73 cm
  5. 0x0002 <--> 0x0001 : 1.71  1.73 cm
  6. 0x0002 <--> 0x0001 : 1.77  1.73 cm
  7. 0x0002 <--> 0x0001 : 1.77  1.74 cm
  8. 0x0002 <--> 0x0001 : 1.74  1.74 cm
  9. 0x0002 <--> 0x0001 : 1.72  1.74 cm
  10. 0x0002 <--> 0x0001 : 1.72  1.74 cm
  11. 0x0002 <--> 0x0001 : 1.75  1.74 cm
  12. 0x0002 <--> 0x0001 : 1.69  1.73 cm
  13. 0x0002 <--> 0x0001 : 1.72  1.73 cm
  14. 0x0002 <--> 0x0001 : 1.80  1.74 cm
  15. 0x0002 <--> 0x0001 : 1.77  1.75 cm
  16. 0x0002 <--> 0x0001 : 1.73  1.74 cm
  17. 0x0002 <--> 0x0001 : 1.72  1.74 cm
  18. 0x0002 <--> 0x0001 : 1.74  1.74 cm
  19. 0x0002 <--> 0x0001 : 1.72  1.74 cm
  20. 0x0002 <--> 0x0001 : 1.70  1.73 cm
  21. 0x0002 <--> 0x0001 : 1.71  1.73 cm
  22. 0x0002 <--> 0x0001 : 1.76  1.74 cm
  23. 0x0002 <--> 0x0001 : 1.70  1.73 cm
  24. 0x0002 <--> 0x0001 : 1.70  1.73 cm
  25. 0x0002 <--> 0x0001 : 1.68  1.72 cm
  26. 0x0002 <--> 0x0001 : 1.71  1.72 cm
  27. 0x0002 <--> 0x0001 : 1.74  1.72 cm
  28. 0x0002 <--> 0x0001 : 1.69  1.72 cm
  29. 0x0002 <--> 0x0001 : 1.72  1.72 cm
  30. 0x0002 <--> 0x0001 : 1.70  1.72 cm
  31. 0x0002 <--> 0x0001 : 1.74  1.72 cm
  32. 0x0002 <--> 0x0001 : 1.70  1.72 cm
  33. 0x0002 <--> 0x0001 : 1.76  1.73 cm
复制代码




回复

使用道具 举报

0

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
板凳
发表于 2020-4-21 20:13:12 | 只看该作者
好资料,太需要了,感谢楼主分享!
回复

使用道具 举报

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
地板
发表于 2020-4-23 13:16:59 | 只看该作者
怎么下载还要金币呢
回复

使用道具 举报

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
5#
发表于 2020-4-23 13:19:59 | 只看该作者
怎么下载还要金币呢
回复

使用道具 举报

0

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
6#
发表于 2020-4-24 19:33:25 | 只看该作者
金币不够
回复

使用道具 举报

0

主题

13

帖子

26

积分

新手上路

Rank: 1

积分
26
7#
发表于 2020-4-26 10:36:36 | 只看该作者
紧跟大侠步伐,谢谢分享~
回复

使用道具 举报

6

主题

43

帖子

47

积分

新手上路

Rank: 1

积分
47
8#
发表于 2020-5-12 11:19:28 | 只看该作者
这个卡尔曼滤波,效果可以,
我有个问题, 这个针对一个标签 若干个基站的 情况下. 如果是多个标签 多个基站呢 ? 怎么使用卡尔曼?
回复

使用道具 举报

35

主题

955

帖子

3994

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3994
9#
发表于 2020-5-12 12:15:19 | 只看该作者
dw1000_2020 发表于 2020-5-12 11:19
这个卡尔曼滤波,效果可以,
我有个问题, 这个针对一个标签 若干个基站的 情况下. 如果是多个标签 多个基站 ...

搞成数组,相当于多份kalman
回复

使用道具 举报

6

主题

43

帖子

47

积分

新手上路

Rank: 1

积分
47
10#
发表于 2020-5-13 11:35:47 | 只看该作者
分享一下,我比较笨拙的处理方式, 把楼主的源码下载下来,然后合并所有的文件到一个文件.然后再把变量都改为static. 最后把初始化函数和卡尔曼函数改个名字. 这样就新建吧, 你想搞多少份卡尔曼就搞多少份.  哈哈 ,比较笨拙.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-4-20 08:18 , Processed in 0.022245 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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