主要内容

数字滤波器设计实用介绍

这个例子展示了如何设计FIR和IIR滤波器基于频率响应规范使用designfilt信号处理工具箱®产品中的功能。示例主要讨论低通滤波器,但大多数结果也适用于其他响应类型。

这个例子关注的是数字滤波器的设计,而不是它们的应用。如果您想了解有关数字滤波器应用程序的更多信息,请参见数字滤波实用介绍

FIR滤波器设计

低通滤波器规格

理想的低通滤波器是保持信号中低于指定截止频率的所有频率分量不变的滤波器, ω c ,并拒绝上述所有组件 ω c .由于实现理想低通滤波器所需的脉冲响应是无限长的,因此不可能设计出理想的FIR低通滤波器。理想脉冲响应的有限长度近似导致在通带( ω < ω c )和止水带( ω > ω c ),以及通带和阻带之间的非零过渡宽度。

当用有限脉冲响应近似时,通带/阻带波纹和过渡宽度都是不可取的,但不可避免地偏离理想低通滤波器的响应。这些偏差如下图所示:

  • 实际的FIR设计通常由具有过渡宽度和不超过允许值的最大通带和阻带波纹的滤波器组成。除了这些设计规范外,还必须选择滤波器的顺序,或者等效地,截断脉冲响应的长度。

滤波器设计中设计规范的一个有用的比喻是将每个规范视为下图所示三角形中的一个角。

三角形用于理解选择设计规范时可用的自由度。因为角度的和是固定的,所以最多可以选择两个规格的值。第三个规格将由特定的设计算法决定。此外,就像三角形中的角一样,如果我们使其中一个规格变大/变小,它将影响另一个或两个规格。

FIR滤波器非常有吸引力,因为它们本质上是稳定的,可以设计成线性相位。尽管如此,这些滤波器可能具有较长的瞬态响应,并且在某些应用中可能证明计算成本很高。

最小阶FIR设计

最小阶设计是通过指定通带和阻带频率以及通带纹波和阻带衰减来获得的。然后设计算法选择符合规范的最小滤波器长度。

设计最小阶低通FIR滤波器,其通带频率为0.37*pi rad/sample,阻带频率为0.43*pi rad/sample(因此跃迁宽度为0.06*pi rad/sample),通带纹波为1 dB,阻带衰减为30 dB。

Fpass = 0.37;Fstop = 0.43;Ap = 1;Ast = 30;D = designfilt(“lowpassfir”“PassbandFrequency”成就,...“StopbandFrequency”Fstop,“PassbandRipple”据美联社,,“StopbandAttenuation”, Ast);HFVT = fvtool(d);

图1:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含2个类型为line的对象。

方法可以查询生成的筛选器顺序filtord函数。

N = filtord(d)
N = 39

您可以使用信息函数获取有关用于设计筛选器的参数的信息

信息(d)
ans =17x44字符数组'FIR数字滤波器(实)' '------------------------- ' ' 滤波器长度:40‘稳定:是的“线性相位:是的(2型)' ' ' '设计方法信息' '设计算法:均匀纹波' ' ' '设计规范' '采样率:N/A(归一化频率)' '响应:低通' '规格:Fp,Fst,Ap,Ast ' '通带边缘:0.37 ' '通带纹波:1 dB ' '止带注意。阻带边缘:0.43
  • designfilt函数默认选择等纹波设计算法。线性相位等纹波滤波器是可取的,因为对于给定的顺序,它们与理想滤波器的最大偏差可能最小。

然而,请注意,最小阶设计也可以使用凯撒窗口获得。即使Kaiser窗口方法对于相同的规格产生更大的滤波器顺序,该算法计算成本更低,并且在设计规格非常严格时不太可能有收敛问题。如果应用程序需要非常窄的过渡宽度或非常大的阻带衰减,就可能发生这种情况。

使用凯撒窗方法设计一个与上述相同规格的滤波器,并比较其与等纹波滤波器的响应。

Dk = designfilt(“lowpassfir”“PassbandFrequency”成就,...“StopbandFrequency”Fstop,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“DesignMethod”“kaiserwin”);addfilter (hfvt dk);传奇(hfvt“Equiripple设计”“凯撒窗户设计”

图1:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含3个类型为line的对象。这些物品代表了Equiripple设计,Kaiser窗户设计。

N = filtord(dk)
N = 52

指定以赫兹为单位的频率参数

如果知道滤波器工作时的采样率,就可以指定采样率和频率(以赫兹为单位)。重新设计了采样率为2khz的最小阶等纹波滤波器。

Fpass = 370;Fstop = 430;Ap = 1;Ast = 30;Fs = 2000;D = designfilt(“lowpassfir”“PassbandFrequency”成就,...“StopbandFrequency”Fstop,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs);HFVT = fvtool(d);

图2:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含2个类型为line的对象。

固定的顺序,固定的过渡宽度

定阶设计适用于对计算负荷敏感或对滤波器系数数量有限制的应用程序。一种选择是以控制通带纹波/阻带衰减为代价来固定过渡宽度。

考虑一个30阶低通FIR滤波器,其通频带频率为370hz,阻频带频率为430hz,采样率为2khz。有两种设计方法可用于这一特定的规格集:等纹波和最小二乘。让我们为每种方法设计一个过滤器并比较结果。

N = 30;Fpass = 370;Fstop = 430;Fs = 2000;%设计方法在省略时默认为'equiripple'Deq = designfilt(“lowpassfir”“FilterOrder”N“PassbandFrequency”成就,...“StopbandFrequency”Fstop,“SampleRate”Fs);DLS = designfilt(“lowpassfir”“FilterOrder”N“PassbandFrequency”成就,...“StopbandFrequency”Fstop,“SampleRate”Fs,“DesignMethod”“ls”);HFVT = fvtool(deq,dls);传奇(hfvt“Equiripple设计”“最小二乘设计”

图3:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含3个类型为line的对象。这些对象代表了等纹波设计、最小二乘设计。

等纹波滤波器非常适合于必须满足特定公差的应用,例如设计具有给定最小阻带衰减或给定最大通带纹波的滤波器。另一方面,如果我们想要最小化通带/阻带中(理想滤波器和实际滤波器之间)误差的能量,这些设计可能是不可取的。

  • 如果你想在某个频段内尽可能地降低信号的能量,可以使用最小二乘设计。

在上面的例子中,设计的滤波器在通带和阻带中具有相同的纹波。我们可以使用权重来减少其中一个波段的纹波,同时保持滤波器顺序固定。例如,如果您希望阻带波纹是通带波纹的十分之一,则必须赋予阻带通带权重的十倍。利用这一事实重新设计等纹波滤波器。

Deqw = designfilt(“lowpassfir”“FilterOrder”N“PassbandFrequency”成就,...“StopbandFrequency”Fstop,“SampleRate”Fs,...“PassbandWeight”, 1“StopbandWeight”10);HFVT = fvtool(deq,deqw);传奇(hfvt“Equiripple设计”“带加权止水带的等波纹设计”

图4:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含3个类型为line的对象。这些物件代表等纹波设计,带加权止带的等纹波设计。

固定顺序,固定截止频率

您可以使用窗口设计方法设计具有固定滤波器顺序和截止频率的滤波器。

  • 您可以使用不同的窗口来控制阻带衰减,同时保持滤波器顺序不变。

例如,考虑一个100阶低通FIR滤波器,其截止频率为60 Hz,采样率为1 kHz。比较使用汉明窗和旁瓣衰减为90 dB的切比雪夫窗的设计结果。

Dhamming = designfilt(“lowpassfir”“FilterOrder”, 100,“CutoffFrequency”现年60岁的...“SampleRate”, 1000,“窗口”“汉明”);Dchebwin = designfilt(“lowpassfir”“FilterOrder”, 100,“CutoffFrequency”现年60岁的...“SampleRate”, 1000,“窗口”, {“chebwin”90});HFVT = fvtool(dhamming,dchebwin);传奇(hfvt“汉明窗”“切比雪夫窗口”

图5:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含3个类型为line的对象。这些物体代表汉明窗,切比雪夫窗。

还有其他方法可以用固定的顺序指定滤波器:固定的截止频率、通带纹波和阻带衰减;固定过渡宽度;固定半功率(3dB)频率。

IIR滤波器设计

FIR滤波器的一个缺点是,他们需要一个大的滤波器订单,以满足一些设计规范。如果波纹保持恒定,滤波器阶数与过渡宽度成反比增长。通过使用反馈,可以用更小的滤波器顺序满足一组设计规范。这就是IIR滤波器设计背后的思想。术语“无限脉冲响应”(IIR)源于这样一个事实,即当对滤波器施加脉冲时,输出永远不会衰减到零。

  • 当计算资源稀缺时,IIR滤波器非常有用。然而,稳定的因果IIR滤波器不能有完美的线性相位。在需要相位线性的情况下,避免IIR设计。

使用IIR滤波器的另一个重要原因是其相对于FIR滤波器的小群延迟,这导致较短的瞬态响应。

巴特沃斯滤波器

巴特沃斯滤波器是最大平面IIR滤波器。通带和阻带的平坦性导致过渡带非常宽。为了获得过渡宽度较窄的滤波器,需要大订单。

设计一个最小阶巴特沃斯滤波器,其通带频率为100 Hz,阻带频率为300 Hz,最大通带纹波为1 dB,阻带衰减为60 dB。采样率为2千赫。

Fp = 100;Fst = 300;Ap = 1;Ast = 60;Fs = 2e3;Dbutter = designfilt(“lowpassiir”“PassbandFrequency”《外交政策》,...“StopbandFrequency”置,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs,“DesignMethod”“黄油”);

切比雪夫I型滤波器

切比雪夫I型滤波器通过允许通带纹波实现比同阶巴特沃斯滤波器更小的过渡宽度。

  • 巴特沃斯和切比雪夫I型滤波器都有最大平阻带。对于给定的滤波器顺序,在通带纹波和过渡宽度之间进行权衡。

设计一个切比雪夫型I滤波器,与上面的巴特沃斯滤波器规格相同。

Dcheby1 = designfilt(“lowpassiir”“PassbandFrequency”《外交政策》,...“StopbandFrequency”置,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs,“DesignMethod”“cheby1”);

切比雪夫II型滤波器

  • 切比雪夫II型滤波器具有最大平坦通带和等纹波阻带。

由于通常不需要非常大的衰减,我们可以通过允许一些阻带纹波,以相对较小的阶数获得所需的过渡宽度。

设计一个最小阶切比雪夫II型滤波器,其规格与前面的示例相同。

Dcheby2 = designfilt(“lowpassiir”“PassbandFrequency”《外交政策》,...“StopbandFrequency”置,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs,“DesignMethod”“cheby2”);

椭圆滤波器

椭圆滤波器推广切比雪夫和巴特沃斯滤波器,允许通带和阻带的波纹。随着波纹的减小,椭圆滤波器可以近似任意接近切比雪夫或巴特沃斯滤波器的幅值和相位响应。

  • 椭圆滤波器以最小的阶数获得给定的过渡宽度。

Dellip = designfilt(“lowpassiir”“PassbandFrequency”《外交政策》,...“StopbandFrequency”置,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs,“DesignMethod”“ellip”);

比较四种IIR滤波器的响应和顺序。

  • 对于相同的规格约束,巴特沃斯方法的阶数最高,椭圆方法的阶数最小。

FilterOrders = [filtord(dbutter) filtord(dcheby1) filtord(dcheby2) filtord(dellip)]
FilterOrders =1×47 5 5 4
HFVT = fvtool(dbutter,dcheby1,dcheby2,dellip);Zoom (hfvt,[0 1e3 -80 2]);传奇(hfvt“巴特沃斯”“切比雪夫I型”...“切比雪夫II型”“椭圆”

图6:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含5个类型为line的对象。这些物体代表巴特沃斯,切比雪夫型I,切比雪夫型II,椭圆。

放大通带以查看纹波差异。

Zoom (hfvt,[0 150 -3 2]);

图6:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含5个类型为line的对象。这些物体代表巴特沃斯,切比雪夫型I,切比雪夫型II,椭圆。

完全匹配通带或止带规格

在最小阶设计中,理想的阶数需要四舍五入到下一个整数。这个额外的分数顺序允许算法实际上超出规格。

  • 使用“MatchExactly”参数约束设计算法精确匹配一个波段。另一个波段超出了它的规格。

默认情况下,Chebyshev Type I设计匹配通带,Butterworth和Chebyshev Type II设计匹配阻带,椭圆设计同时匹配通带和阻带(当超过阻带边缘频率时):

Dellip1 = designfilt(“lowpassiir”“PassbandFrequency”《外交政策》,...“StopbandFrequency”置,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs,“DesignMethod”“ellip”...“MatchExactly”“通频带”);Dellip2 = designfilt(“lowpassiir”“PassbandFrequency”《外交政策》,...“StopbandFrequency”置,“PassbandRipple”据美联社,,...“StopbandAttenuation”Ast,“SampleRate”Fs,“DesignMethod”“ellip”...“MatchExactly”阻带的);HFVT = fvtool(dellip, dellip1, dellip2);传奇(hfvt“匹配通带和阻带”“通频带匹配”...匹配的阻带的);Zoom (hfvt,[0 1e3 -80 2]);

图7:幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含4个类型为line的对象。这些对象表示匹配的通带和停止带,匹配的通带,匹配的停止带。

匹配通带和匹配两种设计在100 Hz的通带频率值处有恰好1 dB的纹波。

分组时延比较

对于IIR滤波器,我们不仅需要考虑纹波/过渡宽度的权衡,还需要考虑相位失真的程度。我们知道在整个奈奎斯特区间内线性相位是不可能的。因此,我们可能想知道相位响应离线性有多远。要做到这一点,一个好方法是观察(理想情况下是恒定的)群延迟,看看它有多平坦。

比较了上述四种IIR滤波器的群时延。

  • 如果相位是一个问题,请记住巴特沃斯和切比雪夫II型设计具有最平坦的群延迟,因此引入的失真最小。

HFVT = fvtool(dbutter,dcheby1,dcheby2,dellip,“分析”“grpdelay”);传奇(hfvt“巴特沃斯”“切比雪夫I型”...“切比雪夫II型”“椭圆”

图8:组延迟包含一个轴对象。标题为Group delay的axes对象包含4个类型为line的对象。这些物体代表巴特沃斯,切比雪夫型I,切比雪夫型II,椭圆。

结论

在本例中,您学习了如何使用designfilt获得了不同约束条件和设计方法下的各种低通FIR和IIR滤波器。designfilt也可用于获得高通、带通、带阻、任意幅度、微分器和希尔伯特设计。要了解更多可用的选项,滤清器设计廊

进一步的阅读

有关滤波器设计和分析的更多信息,请参阅信号处理工具箱®软件文档。有关过滤器应用程序的更多信息,请参阅数字滤波实用介绍

另请参阅

||