我已经在StackOverflow上发布了这个问题。我有一个建议可以在此处寻求更好的答案。

为了使问题更简洁,我对数字滤波器的介绍很感兴趣,任何资源都很好。

但是首先,如果有人可以向我介绍解释此过滤器的一些资源(我在Android中使用),我会很满意: -base / blobs / 671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8 / services / sensorservice / SecondOrderLowPassFilter.cpp

我感兴趣的是选择过滤器参数的方式。尽管我可以不加思索地复制它,但我想我应该在使用它之前理解其基本概念/思想。

,谢谢,

尤利安语

#1 楼

您可以通过对以下模拟低通原型滤波器进行双线性变换来导出系数的表达式

$$ H(s)= \ frac {w_0 ^ 2} {s ^ 2 +(w_0 / Q)s + w_0 ^ 2} $$

其中$ w_0 $是截止频率。

您可以在Wikipedia上查找双线性变换。

Android应用程序中使用的过滤器是Butterworth过滤器,因为选择的Q值为$ 1 / \ sqrt {2} $。请注意,在构造函数中,将计算Q的倒数,并将其分配给变量iQ,该变量将在系数计算中使用。还要注意,变量K保持指定的截止频率的“频率扭曲”值。您可以在上面的链接中找到有关频率扭曲现象的更多信息。

您可以找到许多有关使用双线性变换的数字滤波器设计的示例。我找到了这个,非常接近Android示例。

评论


$ \ begingroup $
谢谢。我开始回想起我上大学时的数学;不幸的是,没有人在那里展示给我一个很好的实践例子,或者我担心其他事情。
$ \ endgroup $
–尤里安(IulianŞerbănoiu)
2011-09-16 10:49

#2 楼

https://ccrma.stanford.edu/~jos/filters/filters.html是对数字滤波器的一个非常好的,详尽的介绍。如果使用“ Biquad”对象,则将获得二阶Butterworth滤波器。如果使用“ CascadedBiquad”对象,则会得到所谓的4阶Linkwitz Riley滤波器(但不是4阶Butterworth)。
实现是相当具体的。通过更多的工作,您可以做的事情对于所有应用程序来说都更加通用。

评论


$ \ begingroup $
是的,我真的很想了解过滤器理论,以便可以控制所使用的过滤器。问题中提到的过滤器使我意识到,不仅应该了解它的工作原理,而且还应该能够根据输入来设计自己的过滤器。好的链接,谢谢!
$ \ endgroup $
–尤里安(IulianŞerbănoiu)
2011年9月16日下午13:57

#3 楼

我发现真正有用的第一个参考文献是《数字信号处理科学家和工程师指南》。我认为这是很适合的选择,因为它旨在使读者熟悉DSP的概念和术语,而又不加深数学。这种方法适合我作为软件工程师的学习风格和背景,并且只注重EE。这些天来,我总是以这种方式处理新主题,试图首先理解高级概念,然后使用更详细/大量的其他信息源来更深入地研究细节。

评论


$ \ begingroup $
这就是我开始重新阅读的内容,因为这是我所知的唯一包含此类主题的内容。谢谢!
$ \ endgroup $
–尤里安(IulianŞerbănoiu)
2011年9月19日下午5:46