Matlab数字滤波器设计实践——FIR
1低通滤波器设置
理想情况下,低通滤波器保持额定截止频率 c以下的所有频率成分不变,拒绝c以上的所有成分,因为实现理想低通滤波器所需的脉冲响应是无限的,所以不可能设计出理想的FIR低通滤波器。理想冲激响应的有限长度近似会导致滤波器通带( 《c) 和阻带 (》 c)出现纹波,通带和阻带之间的过渡带宽度会非零。
当有限脉冲响应用于近似时,通带/阻带纹波和过渡带宽是不期望的,并且不可避免地偏离理想的低通滤波器。下图说明了这些偏差:
实际的FIR设计通常包括一个过渡带宽、最大通带和阻带纹波不超过允许值的滤波器。除了这些设计设置,还必须选择滤波器阶数,它相当于截断脉冲响应的长度。
滤镜设计中的设计设置可以形象地比喻为下图所示的三角形,每个设置对应其中一个角。
三角形相当于选择设计设置时可用的自由度。由于角度之和是一个固定值,所以最多只能选择两个设定值。第三个设置将由特定的设计算法决定。另外,就像三角形中的角一样,如果我们把一个设置变大/变小,就会影响到另外一个或两个设置。
FIR滤波器很受欢迎,因为它们非常稳定,可以设计成线性相位滤波器。然而,这些滤波器可能仍然具有长的瞬态响应,并且在某些应用中计算成本可能很高。
最小阶FIR设计
通过指定通带和阻带频率、通带纹波和阻带衰减,可以获得最低阶设计。然后,设计算法将选择满足设置的最小滤波器长度。
设计了最低阶低通FIR滤波器,其通带频率为0.37弧度/采样点,阻带频率为0.43弧度/采样点(因此过渡带宽度等于0.06 *弧度/采样点),通带纹波为1 dB,阻带衰减为30 dB。
Fpass=0.37
Fstop=0.43
AP=1;
Ast=30
d=designfilt('lowpassfir '' PassbandFrequency 'Fpass .
StopbandFrequency 'Fstop,' PassbandRipple 'Ap,' StopbandAttenuation 'Ast);
hfvt=Fv tool(d);
您可以使用filtord函数来查询生成的过滤器顺序。
您可以使用filtord函数来查询生成的过滤器顺序。
N=滤波器d
N=39
您可以使用info函数来获取有关用于设计过滤器的参数的信息。
信息(d)
默认情况下,designfilt功能选择等纹波设计算法。线性等纹波滤波器令人满意,因为对于给定的阶数,该滤波器与理想滤波器的偏差最小。
但是,请注意,最小阶数设计也可以使用Kaiser窗口获得。即使凯泽窗法对同样的设置产生了更大的滤波器阶数,但在设计设置非常严格的情况下,这种算法的计算成本更低,不太可能出现收敛问题。如果应用需要非常窄的过渡带宽度或非常大的阻带衰减,这种情况可能会发生。
使用Kaiser窗方法设计具有与上述相同设置的滤波器,并将其响应与等波纹滤波器的响应进行比较。
dk=designfilt('lowpassfir '' PassbandFrequency 'Fpass,
StopbandFrequency 'Fstop,' PassbandRipple 'Ap .
StopbandAttenuation 'Ast 'DesignMethod '' Kaiser win ');
addfilter(hfvt,dk);
图例(hfvt,“等波纹设计”,“凯泽窗设计”)
N=滤波器d(dk)
N=52
以3赫兹为单位指定频率参数。
如果知道滤波器的采样速率,可以指定采样速率和频率(单位为赫兹)。重新设计采样速率为2 kHz的最小阶等纹波滤波器。
Fpass=370
Fstop=430
AP=1;
Ast=30
Fs=2000
d=designfilt('lowpassfir '' PassbandFrequency 'Fpass .
StopbandFrequency 'Fstop,' PassbandRipple 'Ap .
“阻带衰减”,Ast,“采样率”,Fs);
hfvt=Fv tool(d);
4阶固定过渡带宽
固定阶数设计适合对计算负载敏感或滤波器系数数量有限的应用。一种选择是以控制通带纹波/阻带衰减为代价来固定过渡带的宽度。
假设一个30阶低通FIR滤波器,通带频率为370 Hz,阻带频率为430 Hz,采样速率为2 kHz。对于这组具体设置,可以采用两种设计方法:等纹波法和最小二乘法。让为每种方法设计一个过滤器,并比较结果。
N=30
Fpass=370
Fstop=430
Fs=2000
省略时,%设计方法默认为“等波纹”
deq=designfilt('lowpassfir '' FilterOrder 'N,' PassbandFrequency 'Fpass,
StopbandFrequency 'Fstop,' SampleRate 'Fs);
dls=designfilt('lowpassfir '' FilterOrder 'N,' PassbandFrequency 'Fpass,
StopbandFrequency 'Fstop,' SampleRate 'Fs,' DesignMethod '' ls ');
hfvt=fvtool(deq,DLS);
图例(hfvt,“等波纹设计”,“最小二乘设计”)
等纹波滤波器非常适合必须满足特定容差的应用,例如设计具有给定最小阻带衰减或给定最大通带纹波的滤波器。另一方面,如果我们希望使通带/阻带(理想滤波器和实际滤波器之间)的误差能量最小,这些设计可能并不理想。
如果想尽可能降低某个频段信号的能量,请使用最小二乘设计。
在上面的例子中,设计的滤波器在通带和阻带具有相同的纹波。我们可以使用权重来减少其中一个频带中的纹波,同时保持滤波器阶数固定。例如,如果希望阻带纹波是通带纹波的十分之一,那么阻带的权重必须是通带的十倍。根据以上情况重新设计等纹波滤波器。
dekw=design filt(' lowpassfir '' FilterOrder 'N,' PassbandFrequency 'Fpass,
StopbandFrequency 'Fstop,' SampleRate 'Fs,
PassbandWeight '1,' StopbandWeight '10);
hfvt=fvtool(deq,dekw);
图例(hfvt,“等波纹设计”,“带加权阻带的等波纹设计”)
固定订单,固定截止频率
您可以使用窗口设计方法来设计具有固定滤波器阶数和截止频率的滤波器。
不同的窗口可用于控制阻带衰减,同时保持滤波器阶数不变。
例如,假设有一个截止频率为60 Hz、采样速率为1 kHz的100阶低通FIR滤波器。比较汉明窗和切比雪夫窗产生的旁瓣衰减为90 dB的设计。
dhamming=design filt(' lowpassfir '' FilterOrder '100,' CutoffFrequency '60,
' SampleRate '1000,' Window '' hamming ');
dchebwin=design filt(' lowpassfir '' FilterOrder '100,' CutoffFrequency '60,
SampleRate '1000,' Window '{'chebwin '90 });
hfvt=fvtool(dhamming,dchebwin);
图例(hfvt,“汉明窗”,“切比雪夫窗”)
固定阶数的滤波器可以用其他方式指定:固定截止频率、通带纹波和阻带衰减;固定过渡区宽度;和固定的半功率(3dB)频率。
标签:滤波器设计阻带