scipy.fft.

prev_fast_len#

scipy.fft.prev_fast_len(target, real=False)#

查找输入数据到 fft 的上一个快速大小。对在 FFT 之前丢弃最少的样本很有用。

SciPy 的 FFT 算法通过递归分治策略获得速度。这依赖于对输入长度的小素数因子的有效函数。因此,当使用 FFT 实现处理的素数因子的复合数时,变换速度最快。如果存在所有基数 <= n 的有效函数,则结果将是一个数 x <= target,并且只有 <= n 的素数因子。 (也称为 n-光滑数)

参数:
targetint

要搜索的的最大长度。必须是正整数。

realbool, 可选

如果 FFT 包含实数输入或输出(例如,rffthfft,但不是 fft)。默认值为 False。

返回值:
outint

小于或等于 target 的最大快速长度。

备注

由于性能考虑因素的变化,该函数的结果可能会在将来发生变化,例如,如果添加了新的素数因子。

使用 fftifft 进行实数输入数据调用将在内部执行 'R2C' 变换。

在当前实现中,prev_fast_len 假设复数 FFT 的基数为 2、3、5、7、11,而实数 FFT 的基数为 2、3、5。

示例

在特定机器上,素数长度的 FFT 耗时 16.2 毫秒

>>> from scipy import fft
>>> import numpy as np
>>> rng = np.random.default_rng()
>>> max_len = 93059  # prime length is worst case for speed
>>> a = rng.standard_normal(max_len)
>>> b = fft.fft(a)

对小于 max_len 的最大快速长度执行 FFT 将计算时间减少到 1.5 毫秒,速度提高了 10.5 倍

>>> fft.prev_fast_len(max_len, real=True)
92160
>>> c = fft.fft(a[:92160]) # discard last 899 samples