IFFT比FFT多个数量级

2024-04-28 17:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用FFT方法重新采样一维信号(基本上是scipy信号). 然而,代码要花很长时间才能运行,即使我的输入信号长度是2的幂次方。看了分析之后,我找到了问题的根源。在

基本上,这种方法先进行FFT,然后去除部分傅里叶频谱,然后采用IFFT以较低的采样率将其带回时域。在

问题是IFFT的运行时间比FFT长:

ncalls tottime percall cumtime percall filename:lineno(function) 1 6263.996 6263.996 6263.996 6263.996 basic.py:272(ifft) 1 1.076 1.076 1.076 1.076 basic.py:169(fft)

我假设这和截止后的fourier点的数量有关。也就是说,这是一个难以置信的减速,所以我要确保:

A.这种行为是半合理的,不一定是一个bug。 B、 我仍然可以有效地避免这个问题。在

现在,我可以将输入信号的幂补为2,以使FFT运行得非常快,但不知道如何对反向运算做同样的事情。我甚至没有意识到这是IFFTs的问题:P


Tags: 方法代码pyfftbasic信号时间scipy
1条回答
网友
1楼 · 发布于 2024-04-28 17:21:58

如果IFFT的长度与FFT的长度不同,并且IFFT的长度不是由非常小的素数因子(2,3等)组成,那么效率会显著下降。在

因此,这种重采样方法只有在两个采样率不同的情况下才是有效的,这些比率具有较小的素数因子,如2、3和7(提示)。在

相关问题 更多 >