鉴于这些滤波器已经使用了多长时间,并且考虑到这些“弧”对应相对于s平面中的直线,可以说有人会开发出具有单个参数的实现形式,该形式能够在“运行时”(而不是“设计时”)沿弧线扫极。但是,我还没有遇到过类似的事情。
提出各种实现方式相对简单,尤其是在范围段内,并且愿意为此增加一些额外的计算。我想知道的是:
是否存在某种实现给定阶数的可调[数字]巴特沃斯滤波器的标准方法,即1)具有最佳属性(例如效率,鲁棒性)和2 )覆盖整个范围?
或者这真的是一个简单的问题,没人理会吗?如果是这样的话,它似乎会出现在“静态”设计选项旁边的滤波器设计程序中。
我确实发现了这一点:具有可变截止频率的多用途Butterworth滤波器,但是刚开始使用Google谷歌搜索时,关于其中内容的信息似乎并不多。
更新(re:答案)
更加清楚一点:
我正在寻找一个带有参数(例如[0,1]的参数)的“元设计”,该参数将自动调整从DC到Nyquist的截止(同时保持增益归一化),以用于时变系统。类似于此两极谐振器,但有Butterworth约束。想法是,与运行时通过典型的脱机设计过程相比,计算参数会更有效。
我什至不必寻找如何设计“元过滤器”(即,对变量进行数学运算)而不是数字),我想知道是否有标准[非显而易见]实现形式的选择-因为,例如,与静态情况相对应的简单方法最终在时变情况下会遇到数字问题。 br />也许没有问题,而直接的方法就是实践中使用的方法。那很好啊。我担心的是,在我查阅过的任何资料中都没有看到这个话题的明确提及,但是也许我只是错过了一些非常明显的东西,所以我要问。
在这里添加更多细节的过程中,我遇到了对参数双二阶结构的一般处理,这几乎是我要寻找的(并且有一些不错的参考)。
更新2
我寻找答案,就像我在Jason R的第二条评论中那样,如下: br />论文,处于轻敲状态的格状,因为它使用最小的乘法运算就解决了这样的边缘情况。“
可能不存在这样的情况,但我的问题是它是否可以?如果可以,它是什么?在哪里可以找到它?
头奖
根据蒂姆·韦斯科特(Tim Wescott)在Jason R的答案中的comp.dsp线程中给出的“观察者规范形式”的引用,我决定假设我可能必须开始研究控制系统文献,因此我尝试进行搜索Butterworth是“状态空间”,它提供了以下非常酷的设计/实现方法,不仅是参数化的Butterworth,而且还有Chebyshev和Elliptic过滤器:
Sophocles J. Orfanidis ,“高阶数字参数均衡器
设计”,J。音频工程师。 SOC。第53,第1026-1046页,2005年11月。
论文:http://www.ece.rutgers.edu/~orfanidi/ece348/hpeq.pdf
Matlab工具箱:http://eceweb1.rutgers.edu/~orfanidi/hpeq/
需要花费一些时间才能深入研究,但是根据到目前为止的读物,如果不是我要找的东西,我会感到非常惊讶。我将此内容提供给Jason R,作为comp.dsp参考,使我了解了Orfanidis的论文。他的回答也很好地概述了设计巴特沃思滤波器的实用方法。
#1 楼
我不确定您在寻找什么。正如您在问题中指出的那样,巴特沃思滤波器系列的传递函数已被很好地理解,并且易于分析计算。实现一个巴特沃斯滤波器结构非常简单,该结构可以通过滤波器阶数和截止频率进行调整:基于所选的滤波器阶数,截止频率和采样率,计算极点位置用于Butterworth模拟原型滤波器。由于Butterworth滤波器没有零,因此传递函数由极点位置(和DC增益)确定。
使用双线性变换,将模拟原型的极点位置映射到数字化实现中的相应位置。再次,数字滤波器由在步骤2中找到的极点位置定义。通过成对地将极点成对将滤波器分成二阶部分。
就是这样。正如我所说,使用您可能需要的任何参数以编程方式设计巴特沃斯滤波器都非常简单;实施这些操作都不是一件非常复杂的事情。
编辑:我不确定您要寻找的最终结果是什么。我想您反而对如何实现随时间变化的IIR滤波器最感兴趣,而这些IIR滤波器不一定特定于Butterworth滤波器。我假设您的目标是在更改滤波器截止频率时最大程度地减少伪影。今年早些时候在comp.dsp新闻组的讨论中对此进行了介绍。虽然我不确定您对此过滤器结构的用例或要求是什么,但是有多种方法可以完成切换。
我知道您说过,您希望滤波器具有定义截止频率的单个参数,但事实是,您的可调结构必须有一种将截止频率转换为所需系数的方法(或者在Butterworth情况下,仅极位置)。上面描述的过程I适用于根据所需的标准化采样率生成极点位置。
您可以通过分析z平面中数字滤波器极点位置的几何形状来简化极点位置计算过程。模拟巴特沃思滤波器的极点位于s平面左半部的一个半圆中。双线性变换将这个半圆映射为问题描述中所示的椭圆形图案。使用这个已知的模式到模拟巴特沃斯滤波器的极点,双线性变换的映射函数以及一些代数,您可能能够为数字滤波器的极点位置提供一个相对简单的表达式,从而为您提供外观更直接的滤波器调整动作。
#2 楼
是的,有针对Butterworth的标准实现形式,以及几乎所有其他过滤器响应。它们全部在我的开源IIR过滤器库中完全实现。这是为任意度的Butterworth滤波器生成极点/零对的代码段:void AnalogLowPass::design (int numPoles)
{
if (m_numPoles != numPoles)
{
m_numPoles = numPoles;
reset ();
const double n2 = 2 * numPoles;
const int pairs = numPoles / 2;
for (int i = 0; i < pairs; ++i)
{
complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
addPoleZeroConjugatePairs (c, infinity());
}
if (numPoles & 1)
add (-1, infinity());
}
}
如您所见,极点的位置由将s平面细分为“成对”的相等段。
为所有常见的滤波器响应类型提供了合适的代码:Chebyshev,Elliptic,Legendre,包括每个的货架版本。
https://github.com/vinniefalco/DSPFiltersDemo.git
https://github.com/vinniefalco/DSPFilters.git
评论
$ \ begingroup $
DSPFilters库可以直接解决原始问题所考虑的用例,它利用参数化方程式在运行时计算数字滤波器的极点/零对。我将修改答案,还包括源代码片段。
$ \ endgroup $
– Vinnie Falco
2012年8月24日在23:24
评论
$ \ begingroup $
杰森(Jason),我不是要如何设计给定的巴特沃思规格,而是要寻找“元设计”。我将更详细地更新问题。
$ \ endgroup $
–datageist♦
2011年8月21日在20:34
$ \ begingroup $
回复:编辑。您在上一段中描述的过程正是我将如何处理的过程-我只是想知道是否实际上已经覆盖了任何地方。换句话说,诸如“哦,是的,您想使用某某作者的论文中的参数化III-2b,以抽头状态格形式使用,因为它可以在使用最小数量的乘法的同时解决某某边缘情况。 ”
$ \ endgroup $
–datageist♦
11年8月22日在4:25
$ \ begingroup $
小挑剔的评论:在Z平面上,BW滤波器确实有零。对于低通滤波器,它们都为-1,对于高通滤波器,它们均为+1。
$ \ endgroup $
–希尔马
2012年8月26日下午5:11
$ \ begingroup $
@Hilmar:好点。您所说的零对应于在$ s $平面中以$ s \ to \ pm \ infty $出现的零(对于低通滤波器;对于$ s \ to 0 $对于高通)。
$ \ endgroup $
–Jason R
2012年8月27日13:06