为什么我应该使用数字滤波器而不是简单地在频域中处理信号然后将它们恢复到时域中?

电器工程 筛选 fft 数字滤波器
2022-01-14 18:40:24

我是信号处理方面的新手,我知道这个问题可能过于宽泛。但我还是想听听专家的提示。

我被教导使用butter(设计巴特沃斯滤波器,又名最大平坦幅度滤波器)和filtfilt(零相位数字滤波)函数在 MATLAB 中离线(即完成记录后)对 EEG(脑电图)信号进行带通滤波。这样可以避免由数字滤波器(即零相位滤波)引起的不可避免的“延迟”。

然后,有人问我为什么不能用fft(快速傅里叶变换)得到信号的频域表示,然后把不需要的频率的幂设置为零,再用ifft(快速傅里叶逆变换)恢复过滤后的数据用于相同目的的时域。这种频域操作对我来说听起来更简单合理,我无法真正回答为什么。

fft/ifft使用简单的方法进行带通滤波的优缺点是什么?为什么人们更喜欢使用 FIR 或 IIR 数字滤波器?

例如,fft/ifft与已建立的数字滤波器相比,该方法是否更容易出现频谱泄漏或波纹?该方法是否也存在相位延迟?有没有办法可视化这种过滤方法的脉冲响应以进行比较?

3个回答

频域处理没有直接完成的主要原因是所涉及的延迟。例如,为了对信号进行 FFT,您必须首先记录整个时域信号,从头到尾,然后才能将其转换为频域。然后您可以进行处理,将其转换回时域并播放结果。即使两次转换和中间的信号处理实际上是瞬时的,在记录最后一个输入样本之前,您也不会得到第一个结果样本。但是如果你愿意忍受这个,你可以获得“理想的”频域结果。例如,以 44100 个样本/秒录制的 3 分钟歌曲需要您进行 800 万个点变换,但这在现代 CPU 上并不是什么大问题。

您可能很想将时域信号分解成更小的、固定大小的数据块并单独处理它们,从而将延迟减少到块的长度。但是,由于“边缘效应”,这不起作用——给定块两端的样本不会与相邻块的相应样本正确对齐,从而在结果中产生令人反感的伪影。

发生这种情况是因为在时域和频域之间转换的过程中隐含的假设(反之亦然)。例如,FFT 和 IFFT “假设”数据是循环的;换句话说,相同时域数据的块出现在正在处理的块之前和之后。由于这通常不正确,因此您会得到工件。

时域处理可能有其问题,但您可以控制延迟并且它不会产生周期性伪影这一事实使其成为大多数实时信号处理应用程序的明显赢家。

(这是我之前回答的扩展版本。)

您当然可以在频域中使用“boxcar”理想滤波器。Duality 表示这相当于与一个无限长的 sinc 函数进行卷积。为了减少与使长度有限相关的伪影,sinc 函数通常乘以一个窗口。您可能听说过 Hamming、Hanning(实际上是 von Hann)、升余弦和其他窗口技术。卷积可能在计算上比 fft/ifft 方法更简单,但答案是相同的。

每种方法都有优点和缺点。Butterworth 是 IIR,而棚车是 FIR。Butterworths 在通带中可能更平坦,但可能具有较小的陡峭滚降,具体取决于 IIR 的阶数和 FIR 的宽度。filtfilt 将更难实时实施。