我正在尝试使用FFT方法重新采样1-D信号(基本上是来自scipy.signal的信号)。但是,即使我的输入信号长度为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)
我认为这与截止后剩余的傅里叶点数量有关。也就是说,这是一个令人难以置信的放缓,所以我想确保:
一个。这种行为是半合理的,并不一定是个bug。 B.我可以做些什么来避免这个问题,并且仍然可以有效地进行下采样。</ p>
现在我可以将输入信号填充为2的幂,以便使FFT快速运行,但不确定如何为反向操作执行相同类型的操作。我甚至没有意识到这对IFFT来说是一个问题:P
答案 0 :(得分:1)
如果您的IFFT的长度与FFT的长度不同,并且IFFT的长度不仅仅由非常小的素数因子(2,3等)组成,那么效率可以显着下降。
因此,这种重采样方法只有在两个采样率与具有小素数因子的比率不同时才有效,例如2,3和7(提示)。