关于设计数字滤波器

信息处理 过滤器 过滤器设计 低通滤波器
2022-02-03 17:13:50

我目前正在使用 MATLAB 的 fdatool 进行滤波器设计。使用该工具,我可以轻松设计不同类型的过滤器。例如,让我们采用具有 10-40 Hz 通带、5-10 Hz 和 40-45 Hz 过渡带的带通 FIR 滤波器。通常,我使用选择“最小二乘法”来设计滤波器,如果我理解正确,它会使用上述方法根据滤波器规范找到最佳脉冲响应。为了实际过滤信号,我使用命令filtfilt进行零相位 FIR 过滤。

现在,实现滤波器的另一种方法是对我的信号进行 FFT,将 10-40 Hz 范围之外的频率设置为零,然后进行 IDFT。

这两种方法之间是否有任何实际/理论差异?频率响应(幅度和相位)是否相同?

2个回答

可以在频域中进行滤波,这实际上是一种非常有效的技术(很可能,Matlab 在内部执行此操作)。但是,对于非常长的信号,它不像“采用 FFT 并应用频率响应”那么简单。您可以阅读重叠添加过滤,这是一种在频域中过滤的可能性。但是,这样做主要是因为它可以更快。

但是,这个问题与过滤器设计无关,这是完全不同的事情。每个 FIR 滤波器都有相应的频率响应,无论您是在时域卷积还是在频域应用频率响应都没有关系。因此,您的方法变成了过滤器设计及其后果的问题。

只需将不需要的频率设置为零可能会完全消除这些频率,但它通常以时域中的显着振铃为代价,这通常是不需要的(关于振铃的维基百科)。所以事实上,你提出的只是设计过滤器的一种方法,坦率地说,在大多数情况下不是一个好的方法。

通过允许频率响应可以逐渐从通带变为阻带的过渡带,获得了可用于改善所得滤波器的其他特性(例如消除振铃或获得更短的脉冲响应)的自由度。这就是为什么 Matlab 实现了这么多不同的滤波器类型,它们都有不同的属性,选择最适合的滤波器实际上是设计信号处理系统的一部分。

这个话题实际上相当复杂,我建议阅读滤波器设计。整本书都可以装满这个。

关于您进行 FFT 的想法,将不需要的频率分量归零,然后进行逆 FFT。

实际上,对于大多数应用程序来说,这将需要不切实际的计算量。实时信号可以扩展超过一百万个样本。很少有应用程序能负担得起对这么多数据执行两次 fft。

然而,除此之外,您还需要了解过滤的一个重要方面。将频率分量归零与实施砖墙滤波器基本相同。砖墙滤波器可能听起来很棒,但这只是因为您不了解这些滤波器对信号的影响。

砖墙滤波器可以使信号无用。例如,用砖墙低通滤波方波会在方波中引入严重的振铃。砖墙滤波器(或将频率分量归零)的唯一良好用途是将噪声从正弦波中滤除。

滤波器设计的关键是既要知道你想从信号中去除什么,又要知道你需要在信号中保留什么。保持信号的完整性至关重要;否则你还不如完全丢弃它。

了解砖墙滤波器有害影响的最佳方法是让您的信号通过 15 极椭圆或类似的东西。http://www.iowahills.com上有一些免费的 FIR 和 IIR 滤波器设计程序,可以很容易地做到这一点。

除非您正在处理一些非常简单的信号,否则您不太可能能够容忍砖墙滤波器,或者等效地,将频率分量归零。