用 FFT 过滤正弦波
Filtering a sinusoidal wave with FFT
我正在尝试在 Matlab 中编写一个代码,该代码采用一个或多个带有噪声的正弦波,并尝试使用以下算法对其进行过滤:
首先我获取输入并将其放入向量中
然后我将 fft() 应用于该向量,并将 abs() 应用于该 fft
- 例如,如果 'x' 是存储 wave 的向量,则
- y= abs(fft(x))
现在'y'我让所有的元素都小于某个阈值0
然后应用 ifft() 函数来获取过滤后的信号 让我们说 'x1'
但是我得到的最后一个波即使是正弦波也是异相的(见图表)。是因为我将 abs() 应用于 fft 吗?
但是我从中得到这个算法的 material 没有讨论这个。
我是否需要应用任何其他过滤器才能获得实际的波浪?
这是两个波的图:一个是我从上面的过程中得到的,另一个是实际的波,它是一个没有噪声的正弦波:
my graph
看看我的过滤波和实际波是如何反相的如何纠正??
如果你不明白问题或有什么想问我的,请评论我会尽力解释。
您将 FFT 结果的绝对值分配给 y,因此您得到了 REAL 值。对其执行 ifft() 只是假设虚部为零,因此相移。
我正在尝试在 Matlab 中编写一个代码,该代码采用一个或多个带有噪声的正弦波,并尝试使用以下算法对其进行过滤:
首先我获取输入并将其放入向量中
然后我将 fft() 应用于该向量,并将 abs() 应用于该 fft
- 例如,如果 'x' 是存储 wave 的向量,则
- y= abs(fft(x))现在'y'我让所有的元素都小于某个阈值0
然后应用 ifft() 函数来获取过滤后的信号 让我们说 'x1'
但是我得到的最后一个波即使是正弦波也是异相的(见图表)。是因为我将 abs() 应用于 fft 吗?
但是我从中得到这个算法的 material 没有讨论这个。
我是否需要应用任何其他过滤器才能获得实际的波浪?
这是两个波的图:一个是我从上面的过程中得到的,另一个是实际的波,它是一个没有噪声的正弦波: my graph
看看我的过滤波和实际波是如何反相的如何纠正??
如果你不明白问题或有什么想问我的,请评论我会尽力解释。
您将 FFT 结果的绝对值分配给 y,因此您得到了 REAL 值。对其执行 ifft() 只是假设虚部为零,因此相移。