假设您有一些数据是音调加噪声。
t=0:0.01:10;
y=sin(t) + rand(1,length(t));
我正在尝试降低 fft 中的音调峰值,以便进行 ifft 时只会得到噪声数据。我的算法是一个 for 循环,它循环访问 abs(fft) 的每个索引以查找峰值。如果存在峰值,我会用噪声数据点代替该峰值。
问题是,在完成fft之后,为了可视化数据,通常我会使用plot(abs(fft))。然而,要做ifft,还需要虚数数据。因此,我不确定我到底要如何“降低峰值”或摆脱它,以便我可以使用 ifft 函数。我想我必须使用虚数。
有什么建议吗? :X
感谢您的帮助。
最佳答案
您将不得不使用虚数,但我不明白为什么这是一个问题。您仍然可以使用幅度 (abs
) 表示法来查找峰值,但是当您“将它们击倒”时,您将放置另一个复数值。这取决于您想要如何确定该值应该是什么 - 您可以将其设置为零,插入本地频率,插入随机数...
编辑回复:您的评论:
不要让虚数让您感到困惑。无论如何,它们并不是真正的“想象”!只是为了表示给定频率的正弦波,您需要两个值:幅度和相位。幅度是您习惯看到的,它决定了给定频率的多少。相位决定了相对于某个点(例如 t = 0)的偏移,这也非常重要。举例来说,对具有相同频率的信号(例如正弦波和余弦波)进行 FFT - 幅度看起来相同,但相位会不同!如果我们没有相位,IFFT 将不知道是否给我们一个正弦波或余弦波,或者介于两者之间的波。
当然,幅度和相位与实部和虚部不是一回事,但是有一个简单的公式可以将它们转换。无论哪种方式,我们都使用两个数字来表示每个频率。
关于algorithm - 更改 FFT 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528463/