用FFT滤波正弦波

时间:2016-06-22 09:18:03

标签: matlab filter signal-processing fft ifft

我正在尝试在Matlab中编写一个代码,该代码采用一个或一个由噪声强加的sinosudal波,并尝试使用以下算法对其进行过滤:

  • 首先我接受输入并将其放在矢量

  • 然后我将 fft()应用于该向量,将 abs()应用于该fft      - 例如,如果' x'是存储波的矢量然后是      - y = abs(fft(x))

  • 现在在' y'我使所有元素小于某个阈值0

  • 然后应用 ifft()函数来获取已过滤的信号,让我们说' x1'

但最后一波即使是正弦波也会出现相位(参见图表)。这是因为我将abs()应用于fft ?? 但我得到这个算法的material并没有讨论这个问题 我需要应用任何其他过滤器,以便我得到实际的波?

这是两个波的图:一个是我从上面的程序得到的,另一个是实际波,它是没有噪声的正弦波: my graph

看看我的滤波波和实际波是如何异相的?

如果你无法理解这个问题,或者有任何想问我的问题,请发表评论我将尝试解释。

1 个答案:

答案 0 :(得分:3)

您正在将FFT结果的绝对值分配给y,因此您将获得REAL值。对ifft()执行简单假定虚部为零,因此相移。