【问题标题】:Filtering a sinusoidal wave with FFT用 FFT 过滤正弦波
【发布时间】:2016-06-22 09:18:02
【问题描述】:

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

  • 首先我获取输入并将其放入向量中

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

  • 现在在“y”中,我使所有元素都小于某个阈值 0

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

但即使是正弦波,我得到的最后一个波也是异相(见图)。是因为我将 abs() 应用于 fft 吗??
但是我得到这个算法的material 没有讨论这个。
我是否需要应用任何其他过滤器才能获得实际的波形?

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

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

如果你不明白这个问题或有什么想问我的,请发表评论,我会尽力解释。

【问题讨论】:

    标签: matlab filter signal-processing fft ifft


    【解决方案1】:

    您将 FFT 结果的绝对值分配给 y,因此您得到 REAL 值。对其执行 ifft() 只是假设虚部为零,因此相移。

    【讨论】:

    • FFT 的结果是一个复数,你需要相位和模块来反转它,如果你使用绝对值你会丢失信息。您可以使用绝对值来绘制它,但请注意不要将绝对值用于 IFFT。
    • 但要为过滤器设置约束,我必须使用绝对值。有没有其他方法可以使用 fft 进行过滤而不必使用绝对值?如果有,请给我来源。
    • 或者我可以通过某种方式补偿相移(不知道原始波)
    • 是的,您可以补偿。但补偿值包含在复数 FFT 结果中,而不是绝对值。所以不要把那部分扔掉。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多