我正在尝试在Matlab中编写一个代码,该代码采用一个或一个由噪声强加的sinosudal波,并尝试使用以下算法对其进行过滤:
首先我接受输入并将其放在矢量
然后我将 fft()应用于该向量,将 abs()应用于该fft - 例如,如果' x'是存储波的矢量然后是 - y = abs(fft(x))
现在在' y'我使所有元素小于某个阈值0
然后应用 ifft()函数来获取已过滤的信号,让我们说' x1'
但最后一波即使是正弦波也会出现相位(参见图表)。这是因为我将abs()应用于fft ?? 但我得到这个算法的material并没有讨论这个问题 我需要应用任何其他过滤器,以便我得到实际的波?
这是两个波的图:一个是我从上面的程序得到的,另一个是实际波,它是没有噪声的正弦波: my graph
看看我的滤波波和实际波是如何异相的?
如果你无法理解这个问题,或者有任何想问我的问题,请发表评论我将尝试解释。
答案 0 :(得分:3)
您正在将FFT结果的绝对值分配给y,因此您将获得REAL值。对ifft()执行简单假定虚部为零,因此相移。