赞
踩
介绍一个 Butterworth Nth 滤波器设计系数的函数,像 Matlab 函数一样的:
[bl,al]=butter(but_order,Ws);
和
[bh,ah]=butter(but_order,2*bandwidth(1)/fs,'high');
在 Ububtu 中,容易找到:
$ aptitude search ~dbutterworth | grep lib
rtfilter 是一个库,提供一组实现多通道信号实时数字滤波器的例程(即使用相同的滤波器参数过滤多个信号)。它实现了FIR,IIR滤波器和用于浮点和双数据类型的下采样器(用于实数和复值信号)。还提供了额外的功能来设计几个常用的滤波器:Butterworth,Chebyshev,Windowed sinc,分析滤波器…
安装:
$ sudo aptitude install librtfilter-dev librtfilter1
-dev
安装软件包后,您甚至可以找到一个示例(使用Butterworth过滤器用法)/usr/share/doc/librtfilter1/examples/butterworth.c
。这个例子(以及相应的Makefile)也可以在这里找到。
以上内容参考:参考文章
这里要对一个安装在机械臂的末端的六维力/力矩传感器数据进行处理,实质上就是多通道信号实时数字滤波。根据/usr/share/doc/librtfilter1/examples/butterworth.c
可以发现,API 的使用接口是将多通道信号数据块作为输入,这里我按照 input_data
的数据存储格式,将六通道六维力/力矩传感器数据打包成数据块的形式(这里将传感器数据加载进 vector 容器中维护,每次只取该容器的后边数据块长度的近期数据,并解析给 input_data 数组)实时传递给 API,得到相同格式的输出 output_data
数据块,然后实时获取到 output_data
数据块最后一个周期的元素作为当前周期的实时滤波输出。
从以上测试结果可以发现,不知道为什么,用这个C++库计算出来的滤波结果和 Matlab 提供的函数计算出来的结果不太一样,两者应该都没有错误,但是不知道造成两者区别的原因在于什么,如果有明白为何会这样的朋友,欢迎评论区留言指点一下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。