scipy.fft.

prev_fast_len#

scipy.fft.prev_fast_len(target, real=False)[源代码]#

找到输入数据 fft 之前的快速大小。在FFT之前丢弃最少量的样本时很有用。

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

参数:
目标整数

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

真实bool, 可选

如果FFT涉及实数输入或输出(例如,rffthfft 但不是 fft),则为True。默认为False。

返回:
整数

小于或等于 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