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

时间:2013-06-08 15:12:11

标签: android filtering signal-processing fft lowpass-filter

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

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

这有助于我获得更顺畅的结果。

然后我决定玩FFT。我使用快速傅里叶变换将信号送入频域,然后将一些高频归零。然后使用逆傅里叶变换我重新创建了信号。这一切都运行良好,我知道FFT和IFT实现很好。然而,信号并不像我在使用简单的无限脉冲响应滤波器之前那样平滑。我尝试将一些其他频率归零,但没有像我预期的那样给我带来好结果。

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

由于

1 个答案:

答案 0 :(得分:0)

问题在于你将幽灵归零,它不能完全归零,它需要在频率幽灵中成为平滑曲线才能使其在时域中保持不变。您可能会听到声音之外的某种反馈,而这个时间域并不能与频率中的突然停止相关联。 从数学角度来看,你可以在wolfram中获取值1的fft中看到它。 1是时域中的无限长函数,它始终为1。 1的fft是dirac delta函数sqrt(2 * pi),并且与频带中的无限停止相同。如你所见,当频率无限短时,时域是无限长的。这就是为什么你不能在你创建的过滤器中完全停止。

如果您需要更多理论,我建议您阅读数字滤波器设计。快速解决方法是在您尝试消除的频率上接受一些db输出。类似于图片here