假设你有一些数据是音调加噪声。

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就不知道是给我们正弦波还是余弦波,或者介于两者之间的东西。
当然,震级和相位与实相和虚相不是一回事,但有一个简单的公式来转换它们。不管怎样,我们用两个数字来表示每个频率。

10-04 14:45