数字滤波器设计实践介绍——FIR 滤波器

数字滤波器设计实践介绍——FIR 滤波器

目录

数字滤波器设计实践介绍——FIR 滤波器

FIR 滤波器设计

低通滤波器设定

最小阶 FIR 设计

使用 Kaiser 窗方法设计

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

固定阶、固定过渡带宽度

固定阶、固定截止频率


此示例说明如何使用 Signal Processing Toolbox® 产品中的 designfilt 函数,根据频率响应设定设计 FIR 和 IIR 滤波器。该示例重点讲述低通滤波器,但大多数结果也适用于其他响应类型。

此示例主要介绍数字滤波器的设计,而不是其应用。如果您要了解有关数字滤波器应用的详细信息,请参阅数字滤波实践介绍

FIR 滤波器设计

低通滤波器设定

在理想情况下,低通滤波器使信号中低于指定截止频率 ωc 的所有频率分量保持不变,并拒绝高于 ωc 的所有分量。由于实现理想低通滤波器所需的冲激响应是无限长的,因此无法设计出理想的 FIR 低通滤波器。理想冲激响应的有限长度逼近会导致滤波器的通带 (ω<ωc) 和阻带 (ω>ωc) 中都出现波纹,并导致通带和阻带之间的过渡带宽度非零。

当用有限冲激响应逼近时,通带/阻带波纹和过渡带宽度都是不希望出现的,且不可避免地与理想低通滤波器存在偏差。下图说明了这些偏差:

  • 实际的 FIR 设计通常包括过渡带宽度和最大通带和阻带波纹不超过允许值的滤波器。除了这些设计设定之外,还必须选择滤波器阶数,它等效于选择截断的冲激响应的长度。

滤波器设计中的设计设定可形象地比喻为下图所示的三角形,每个设定对应其中一个角。

三角形相当于选择设计设定时可用的自由度。由于各角之和是固定值,因此最多只能选择两个设定的值。第三个设定将由特定设计算法确定。此外,就像三角形中的各角一样,如果我们使一个设定更大/更小,它将影响其他一个或两个设定。

FIR 滤波器广受欢迎,因为它们非常稳定,并可以设计成具有线性相位的滤波器。尽管如此,这些滤波器仍可能有长瞬时响应,在某些应用中的计算成本可能很高。

最小阶 FIR 设计

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

设计最小阶低通 FIR 滤波器,其通带频率为 0.37*pi 弧度/采样点,阻带频率为 0.43*pi 弧度/采样点(因此过渡带宽度等于 0.06*pi 弧度/采样点),通带波纹为 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 = fvtool(d);

% 可以使用 filtord 函数查询生成的滤波器阶数。
N = filtord(d);
disp(N);
% 可以使用 info 函数获取用于设计滤波器的参数的有关信息
info(d)

默认情况下,designfilt 函数会选择一个等波纹设计算法。线性相位等波纹滤波器是令人满意的,因为对于给定阶数,这种滤波器与理想滤波器的最大可能偏差最小。 

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

使用 Kaiser 窗方法设计

使用 Kaiser 窗方法设计与上述设定相同的滤波器,并将其响应与等波纹滤波器进行比较。

dk = designfilt('lowpassfir','PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast, 'DesignMethod', 'kaiserwin');

addfilter(hfvt,dk);
legend(hfvt,'Equiripple design', 'Kaiser window design')

N = filtord(dk)

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

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

Fpass = 370;
Fstop = 430;
Ap = 1;
Ast = 30;
Fs = 2000; 

d = designfilt('lowpassfir','PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs);
  
hfvt = fvtool(d);

固定阶、固定过渡带宽度

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

假设一个 30 阶低通 FIR 滤波器,其通带频率为 370 Hz,阻带频率为 430 Hz,采样率为 2 kHz。对于这组特定设定,可使用两种设计方法:等波纹法和最小二乘法。下面我们为每种方法设计一个滤波器,并比较结果。

N = 30;
Fpass = 370;
Fstop = 430;
Fs = 2000; 

% Design method defaults to 'equiripple' when omitted
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);
legend(hfvt,'Equiripple design', 'Least-squares design')

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

  • 如果您要尽可能降低某个频带内信号的能量,请使用最小二乘设计。

在上述示例中,设计的滤波器在通带和阻带中具有相同的波纹。我们可以使用权重来减少其中一个频带内的波纹,同时保持滤波器阶数固定。例如,如果您希望阻带波纹是通带波纹的十分之一,则为阻带赋予的权重必须是通带权重的十倍。根据上述情况重新设计等波纹滤波器。

deqw = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'SampleRate',Fs,...
  'PassbandWeight',1,'StopbandWeight',10);

hfvt = fvtool(deq,deqw);
legend(hfvt,'Equiripple design', 'Equiripple design with weighted stopband')

固定阶、固定截止频率

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

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

例如,假设有截止频率为 60 Hz、采样率为 1 kHz 的 100 阶低通 FIR 滤波器。比较使用汉明窗和使用旁瓣衰减为 90 dB 的切比雪夫窗产生的设计。

dhamming = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...
  'SampleRate',1000,'Window','hamming');

dchebwin = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...
  'SampleRate',1000,'Window',{'chebwin',90});

hfvt = fvtool(dhamming,dchebwin);
legend(hfvt,'Hamming window', 'Chebyshev window')

您可以通过其他方式指定具有固定阶数的滤波器:固定截止频率、通带波纹和阻带衰减;固定过渡带宽度;以及固定半功率 (3dB) 频率。

【我是小蜜蜂,知识的搬运工!】

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kaiser窗设计方法和MATLAB中的filterdesigner工具都是用于设计FIR滤波器的方法。它们的主要区别在于使用的方式和实现的复杂度。 Kaiser窗设计方法使用Kaiser窗函数来加权信号的频域响应,以达到要求的滤波器特性。这个方法需要计算Kaiser窗函数的系数,以及信号的频域响应,然后将它们相乘得到最终的滤波器系数。这种方法相对较为繁琐,需要对Kaiser窗函数有一定的了解和掌握。 MATLAB中的filterdesigner工具则提供了图形化界面,用户可以根据自己的需要选择不同的滤波器类型、截止频率等参数,然后直接生成对应的滤波器系数。这种方法不需要用户自行计算系数,只需要通过简单的图形化操作即可实现滤波器设计。 从使用的角度来看,filterdesigner工具更为方便快捷。而从理论实现的复杂度来看,使用Kaiser窗设计方法需要了解滤波器设计的原理和Kaiser窗函数的性质。两种方法各有优点和局限,根据个人需求选择适合的方法进行滤波器设计即可。 ### 回答2: 用Kaiser窗设计公式和Matlab的filterdesigner设计FIR滤波器两者之间有一些明显的区别和优缺点。 首先,Kaiser窗设计公式的优点在于,其具有更好的精度和灵活性,能够根据实际的滤波需求和特殊条件进行调节,从而得到更加合适的滤波器。此外,Kaiser窗设计公式的计算速度也比较快,适合对于简单的滤波需求进行处理,无需复杂系统的支持。 另一方面,Matlab的filterdesigner设计FIR滤波器则更加适用于需要同时进行多种操作的情况,能够更好的完成滤波的多重复杂要求。其具有的滤波器特性可视化和信号处理工具也使其更加直观和易用,特别是对于频率特性的视图和分析。 在实践中,通过比较两种方法,需要根据具体的实际需求和使用场景而定,可以选择更加适合的方式对信号进行滤波处理。同时,可以通过结合两种方法的优点和特点,也可以在一定程度上提高滤波的精度和效果。 ### 回答3: Kaiser窗设计公式和Matlab的filterdesigner设计FIR滤波器都是常用的数字信号处理方法。它们都可以实现数字信号的滤波,但在一些方面存在差异。 首先,Kaiser窗设计公式是一种手动计算的方法。需要用户提供滤波器规格,包括截止频率、通带和阻带波纹等参数,然后通过Kaiser窗设计公式计算出窗口函数参数,从而得到FIR滤波器的系数。相比之下,Matlab的filterdesigner是一种交互式工具,使用滑动条可以直观地改变各种参数,从而设计FIR滤波器。 其次,两者的实现效果可能略有不同。Kaiser窗设计公式是一种经典的FIR设计方法,已经得到广泛应用和验证。但是使用该方法需要手动计算,可能存在计算错误的问题。而Matlab的filterdesigner利用了Matlab的数值计算能力和算法库,设计出的FIR滤波器可能更加精确和可靠。 总之,两种方法各有优缺点,根据具体的需求和情况选择合适的方法。Kaiser窗设计公式适合需要手动计算或者使用其他软件设计FIR滤波器的情况。而Matlab的filterdesigner则更适合交互式调试和快速设计实验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值