当前位置:   article > 正文

C++ Butterworth N阶滤波器设计_butterworth c++

butterworth c++

介绍一个 Butterworth Nth 滤波器设计系数的函数,像 Matlab 函数一样的:

[bl,al]=butter(but_order,Ws); 
  • 1

[bh,ah]=butter(but_order,2*bandwidth(1)/fs,'high');
  • 1

rtfilter

在 Ububtu 中,容易找到:

$ aptitude search ~dbutterworth | grep lib
  • 1

在这里插入图片描述
rtfilter 是一个库,提供一组实现多通道信号实时数字滤波器的例程(即使用相同的滤波器参数过滤多个信号)。它实现了FIR,IIR滤波器和用于浮点和双数据类型的下采样器(用于实数和复值信号)。还提供了额外的功能来设计几个常用的滤波器:Butterworth,Chebyshev,Windowed sinc,分析滤波器…

安装:

$ sudo aptitude install librtfilter-dev librtfilter1
  • 1

-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 数据块最后一个周期的元素作为当前周期的实时滤波输出。

1)截止频率 10 hz、数据块长度 1000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)截止频率 10 hz、数据块长度 200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)截止频率 6 hz、数据块长度 1000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)截止频率 6 hz、数据块长度 200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从以上测试结果可以发现,不知道为什么,用这个C++库计算出来的滤波结果和 Matlab 提供的函数计算出来的结果不太一样,两者应该都没有错误,但是不知道造成两者区别的原因在于什么,如果有明白为何会这样的朋友,欢迎评论区留言指点一下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/236736
推荐阅读
相关标签
  

闽ICP备14008679号