尽管我在设计音频引擎等方面具有扎实的经验,但是我对数字滤波器设计领域(尤其是IIR和FIR滤波器)还是比较陌生的。换句话说,我正在尝试学习尽可能多的关于如何设计滤波器和导出它们的差分方程的知识。我是从基础开始的,所以请像我说的那样忍受,我正在尝试学习。

这里是我的问题:

说我想设计一个具有特定截止频率(例如300 Hz)的低通滤波器。数学上推导传递函数,然后推导特定差分方程以直接形式I和直接形式II(或现在仅是DF-1 ...)实现滤波器的最佳方法是什么?

我对传递函数以及传递函数与网络上某些优秀材料中的差分方程之间的关系有一些了解,但不幸的是,其中一些假设具有很多先验知识,因此在解决问题上比起帮助更容易混淆我的追求。因此,我想我需要一个更详细的分步示例,该示例将帮助我联系各个方面。

所以我基本上是在寻找一种方法的细分方面的帮助,从选择截止频率开始

任何帮助将不胜感激。我熟悉许多概念-脉冲响应,DFT,其背后的数学原理,我想我需要更多帮助的是z变换的概念以及使用极点/零点来设计滤波器的传递函数,然后截止频率如何。发挥所有作用最终得出差分方程。

由于我倾向于从示例中学习得最好,所以我想在这里问。
非常感谢有时间的人帮帮我。

评论

过滤器设计方法很多。这里有一些术语可以帮助您入门:窗口设计方法,最小二乘滤波器设计和等波纹滤波器设计(通常使用Parks-McClellan算法)。这些主要限于FIR滤波器设计。设计IIR滤波器的一种常用方法是将模拟原型(如Butterworth滤波器)映射到相应的数字滤波器近似值。例如,可以使用双线性变换或脉冲不变性方法来完成。

#1 楼

数字滤波器设计是一个非常大且成熟的主题,并且-正如您在问题中提到的那样-有很多可用的材料。我想在这里尝试的是让您入门,并使现有材料更易于访问。实际上,我应该讨论离散时间滤波器,而不是数字滤波器,因为在这里我不会考虑系数和信号量化。您已经了解了FIR和IIR滤波器,并且还了解了一些滤波器结构,例如DF I和II。不过,让我从一些基础知识开始:

非递归线性时不变(LTI)滤波器可以通过以下差分方程来描述。 )= h_0x(n)+ h_1x(n-1)+ \ ldots + h_ {N-1} x(n-N + 1)= \ sum_ {k = 0} ^ {N-1} h_kx(nk)\ tag {1} $$

其中$ y(n)$是输出序列,$ x(n)$是输入序列,$ n $是时间索引,$ h_k $是滤波器系数,$ N $是滤波器长度(抽头数)。滤波器抽头$ h_k $也是滤波器的脉冲响应,因为如果输入信号是脉冲,即$ x(n)= \ delta(n)$,则$ y(n)= h_n $(如果滤波器的内存已用零初始化)。公式(1)描述了线性时不变有限冲激响应(FIR)系统。 (1)的右侧的和是卷积和,即,通过将输入信号与脉冲响应进行卷积来获得输出信号。这始终是正确的,但对于IIR滤波器,由于脉冲响应无限长,即无限多个系数$ h_k $,因此我们无法显式计算卷积和。 FIR滤波器的一个重要优点是它们始终稳定,即对于有界输入序列,输出序列总是有界的。另一个优点是FIR滤波器始终可以实现完全线性的相位,即,除了纯延迟之外,它们不会增加任何相位失真。此外,设计问题通常更容易解决,我们将在后面看到。

递归LTI滤波器由以下差分方程式描述:

$$ y(n)= b_0x(n)+ b_1x(n-1)+ \ ldots + b_Mx(nM)-\\
-a_1y(n-1)-\ ldots-a_Ny(nN)\ tag {2} $$

等式(2)显示输出不仅由加权输入和延迟输入组成样本,也可以加权过去的输出样本。通常,这种系统的脉冲响应是无限长的,即,对应的系统是IIR系统。但是,在某些特殊情况下,递归滤波器具有有限的脉冲响应。注意,脉冲响应不再像FIR滤波器那样由系数$ b_k $或$ a_k $给出。 IIR滤波器的一个优点是,与FIR相比,具有高阻带衰减的陡峭滤波器可以实现的系数(和延迟)要少得多,也就是说,它们的计算效率更高。但是,在选择系数$ a_k $时需要小心,因为IIR滤波器可能不稳定,即,即使输入序列有界,IIR滤波器的输出序列也可能是无界的。

可以设计滤波器根据规范(时域(样本)或频域),或两者兼而有之。既然您在问题中提到了截止频率,所以我想您对频域的规范更感兴趣。在这种情况下,您需要查看FIR和IIR系统的频率响应。假设系统存在,系统的频率响应就是其脉冲响应的傅里叶变换(稳定系统就是这种情况)。 FIR滤波器的频率响应为

$$ H(e ^ {j \ theta})= \ sum_ {k = 0} ^ {N-1} h_ke ^ {-jk \ theta} \ tag {3} $$

其中$ \ theta $是离散频率变量:

$$ \ theta = \ frac {2 \ pi f} { f_s} $$

具有实际频率$ f $和采样频率$ f_s $。从(3)中可以看出,用FIR系统逼近所需的频率响应基本上是多项式逼近的问题。对于递归系统,我们有

$$ H(e ^ {j \ theta})= \ frac {\ sum_ {k = 0} ^ Mb_ke ^ {-j \ theta}} {1+ \ sum_ {k = 1} ^ Na_ke ^ {-j \ theta}} \ tag {4} $$

,您会得到一个有理逼近问题,通常比多项式逼近问题要困难得多对于FIR滤波器。从(3)和(4)中可以看出,FIR滤波器的频率响应当然只是系数为$ a_k = 0 $,$ k = 1,\ dots,N的递归滤波器响应的特例。 $。

现在让我们快速了解一下滤波器的设计方法。对于FIR滤波器,您可以对所需的频率响应进行傅立叶逆变换,以获得滤波器的脉冲响应,该脉冲响应直接对应于滤波器系数。由于您通过有限长度的脉冲响应来近似期望的响应,因此您应该对所获得的脉冲响应应用一个平滑的窗口,以最大程度地减少由于吉布斯现象引起的实际频率响应中的振荡。这种方法称为频率采样方法。

对于简单的标准滤波器,例如理想的低通,高通,带通或带阻滤波器(以及其他一些滤波器),您甚至可以通过以下方法来分析计算精确的脉冲响应:理想期望响应的傅立叶逆变换:

$$ h_k = \ frac {1} {2 \ pi} \ int _ {-\ pi} ^ {\ pi} H(e ^ {j \ theta})e ^ {jk \ theta} d \ theta $$

与理想的频率选择滤波器一样,该积分易于评估分段恒定的期望响应。这将为您提供无限长的非因果的脉冲响应,需要对其进行加窗和平移以使其有限和因果。此方法称为窗口设计。

当然,还有许多其他的FIR滤波器设计方法。一种重要的数值方法是著名的Parks-McClellan交换算法,该算法设计了具有恒定通带和阻带波动的最佳滤波器。这是一种数值逼近方法,并且有许多可用的软件实现方式,例如

用于频率选择滤波器的最常见的IIR设计方法是双线性变换方法。此方法仅使用分析公式来设计最佳模拟滤波器(例如Butterworth,Chebyshev,Cauer /椭圆和Bessel滤波器),然后通过对复变量$ s $应用双线性变换将其转换为离散时域。 (模拟域),它将复数$ s $平面的(虚数)频率轴映射到复数$ z $平面中的单位圆(离散时间域)。如果您对模拟或离散时域中的复杂传递函数了解不多,请不要担心,因为双线性变换方法有很好的实现方式,例如在Matlab或Octave中。

当然,还有许多更有趣和有用的方法,具体取决于您所拥有的规范类型,但是我希望这可以帮助您入门,并能使您学到的任何材料更容易理解。一本很好(免费)的书涵盖了一些基本的滤波器设计方法(以及更多),这是Orfanidis撰写的《信号处理入门》。您可以在那里找到几个设计示例。另一本经典的经典著作是Parks和Burrus的《数字滤波器设计》。

评论


$ \ begingroup $
哇,马特,非常感谢您详尽而周到的回答。我一定会深入研究,并真正感谢您的时间。谢谢!
$ \ endgroup $
–按位
2013年6月11日14:47

$ \ begingroup $
有没有好的小波滤波器设计教科书?我对这样的话题感到好奇:dsp.stackexchange.com/questions/29090/…。谢谢!
$ \ endgroup $
–LCFactorization
16-3-4在3:59



$ \ begingroup $
一个很好的介绍,可以激励您在信号处理领域做点什么
$ \ endgroup $
– jomegaA
20-2-3在7:29