使用 FFT 或简单的无限脉冲响应滤波器进行低通信号滤波

信息处理 fft 过滤器 傅里叶变换 低通滤波器
2022-02-05 12:24:45

我目前需要为 Android 应用程序过滤加速度计数据。首先,我使用了一个简单的低通滤波器(简单的无限脉冲响应滤波器)如下:

for i from 1 to n
   y[i] := y[i-1] + α * (x[i] - y[i-1])

这帮助我获得了更流畅的结果。

然后我决定玩 FFT。我使用快速傅立叶变换将信号转换为频域,然后将一些高频归零。然后使用逆傅立叶变换我重新创建了信号。这一切都很好,我知道 FFT 和 IFT 实现很好。但是,信号不如我使用简单的无限脉冲响应滤波器之前得到的信号那么平滑。我尝试将一些进一步的频率归零,但没有给我预期的结果。

这背后的原因是什么?我虽然使用 FFT 和 IFT 在技术上应该给我一个很好的平滑图。这是因为 FFT 中的采样吗?

谢谢

1个回答

您正在做的事情存在三个潜在问题:

  1. 由于吉布斯现象,将高频归零会导致振铃
  2. 您实际上是将傅里叶变换与平方函数相乘,这相当于将时域数据与平方函数的逆变换进行循环卷积,即sinc 函数除非在转换之前对数据进行零填充,否则循环卷积将导致 FFT 块末尾的数据影响开头的数据,反之亦然。
  3. 如果您正在执行多个 FFT 来处理数据流,除非您使用Overlap-AddOverlap-Save之类的技术,否则FFT 块之间的边界会出现不连续性。这个问题与#2有关。