2016-06-22 59 views
0

我试图写在Matlab代码这需要与噪音征收sinosudal波的一个或总和,并尝试使用下面的算法中对其进行过滤正弦波:首先我拿过滤与FFT

  • 输入和到向量和ABS()将其放置在载体中

  • 然后我申请FFT()到FFT
    - 例如,如果“x”为在其中波被存储,则矢量
    - Y = ABS(FFT(X))

  • 现在

    在 'Y' 我让大于某一阈值0

  • 则所有更少的元件施加IFFT()函数来得到滤波后的信号可以说,“X1”

但最后一波,我得到即使正弦波是出于阶段(见图表)。就是因为IAM应用ABS()到FFT?
但我得到这个算法的material没有讨论这个。
我是否需要应用任何其他过滤器,以便获得实际的波形?

这里是两个波的情节:一个我从上面的程序得到了和其他实际波是正弦波,无噪音: my graph

看到我的过滤波和实际波如何如何纠正它?

如果你不明白的问题或有任何你想问我请评论我会尽力解释它。

回答

3

您正在将FFT结果的绝对值赋值给y,因此您将得到REAL值。做ifft()就简单地假设虚部为零,因此是相移。

+3

FFT的结果是一个复数,如果使用绝对值,则需要相位和模块对其进行反转。 您可以使用绝对值来绘制它,但要小心不要使用IFFT的绝对值。 – Niles

+0

但设置过滤器的限制,我必须使用绝对值。有没有其他方式我可以使用FFT来过滤,而不必使用绝对值?如果是的话,请给我来源。 –

+0

或者我可以补偿相移一些如何(不知道原始波) –