【源码参考】kalman 滤波调试
资料包有一个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 滤波算法
测距实际结果,+-5cm到+-2.5cm,稳定度好很多!
使用方法
测距之前做初始化
KalMan_Init();算出距离后,直接传入,下面是原始数据和kalman数据全部打印出来
distance = distance - dwt_getrangebias(config.chan,(float)distance, config.prf);
printf("0x%04X <--> 0x%02X%02X : %.2f%.2f cm\n",SHORT_ADDR,msg_f_send.destAddr,msg_f_send.destAddr,distance,KalMan(distance));
部分原始数据
0x0002 <--> 0x0001 : 1.751.73 cm
0x0002 <--> 0x0001 : 1.721.73 cm
0x0002 <--> 0x0001 : 1.701.73 cm
0x0002 <--> 0x0001 : 1.731.73 cm
0x0002 <--> 0x0001 : 1.711.73 cm
0x0002 <--> 0x0001 : 1.771.73 cm
0x0002 <--> 0x0001 : 1.771.74 cm
0x0002 <--> 0x0001 : 1.741.74 cm
0x0002 <--> 0x0001 : 1.721.74 cm
0x0002 <--> 0x0001 : 1.721.74 cm
0x0002 <--> 0x0001 : 1.751.74 cm
0x0002 <--> 0x0001 : 1.691.73 cm
0x0002 <--> 0x0001 : 1.721.73 cm
0x0002 <--> 0x0001 : 1.801.74 cm
0x0002 <--> 0x0001 : 1.771.75 cm
0x0002 <--> 0x0001 : 1.731.74 cm
0x0002 <--> 0x0001 : 1.721.74 cm
0x0002 <--> 0x0001 : 1.741.74 cm
0x0002 <--> 0x0001 : 1.721.74 cm
0x0002 <--> 0x0001 : 1.701.73 cm
0x0002 <--> 0x0001 : 1.711.73 cm
0x0002 <--> 0x0001 : 1.761.74 cm
0x0002 <--> 0x0001 : 1.701.73 cm
0x0002 <--> 0x0001 : 1.701.73 cm
0x0002 <--> 0x0001 : 1.681.72 cm
0x0002 <--> 0x0001 : 1.711.72 cm
0x0002 <--> 0x0001 : 1.741.72 cm
0x0002 <--> 0x0001 : 1.691.72 cm
0x0002 <--> 0x0001 : 1.721.72 cm
0x0002 <--> 0x0001 : 1.701.72 cm
0x0002 <--> 0x0001 : 1.741.72 cm
0x0002 <--> 0x0001 : 1.701.72 cm
0x0002 <--> 0x0001 : 1.761.73 cm
好资料,太需要了,感谢楼主分享! 怎么下载还要金币呢 怎么下载还要金币呢 金币不够:):):):) 紧跟大侠步伐,谢谢分享~ 这个卡尔曼滤波,效果可以,
我有个问题, 这个针对一个标签 若干个基站的 情况下. 如果是多个标签 多个基站呢 ? 怎么使用卡尔曼? dw1000_2020 发表于 2020-5-12 11:19
这个卡尔曼滤波,效果可以,
我有个问题, 这个针对一个标签 若干个基站的 情况下. 如果是多个标签 多个基站 ...
搞成数组,相当于多份kalman 分享一下,我比较笨拙的处理方式, 把楼主的源码下载下来,然后合并所有的文件到一个文件.然后再把变量都改为static. 最后把初始化函数和卡尔曼函数改个名字. 这样就新建吧, 你想搞多少份卡尔曼就搞多少份.哈哈 ,比较笨拙.