scipy.fft.

prev_fast_len#

scipy.fft.prev_fast_len(цель, вещественный=False)#

Найти предыдущий быстрый размер входных данных для fft. Полезно для отбрасывания минимального количества выборок перед БПФ.

Алгоритмы БПФ SciPy достигают скорости благодаря рекурсивной стратегии "разделяй и властвуй". Это зависит от эффективных функций для малых простых множителей длины входных данных. Таким образом, преобразования быстрее всего при использовании составных чисел из простых множителей, обрабатываемых реализацией fft. Если есть эффективные функции для всех оснований <= n, тогда результатом будет число x <= target только с простыми множителями <= n. (Также известный как n-гладкие числа)

Параметры:
цельint

Максимальная длина для поиска. Должно быть положительным целым числом.

вещественныйbool, необязательно

True, если БПФ включает вещественный вход или выход (например, rfft или hfft но не fft). По умолчанию False.

Возвращает:
выходint

Наибольшая быстрая длина, меньшая или равная target.

Примечания

Результат этой функции может измениться в будущем из-за изменений в производительности, например, если будут добавлены новые простые множители.

Вызов fft или ifft с вещественными входными данными выполняет 'R2C' преобразование внутренне.

В текущей реализации prev_fast_len предполагает основания 2,3,5,7,11 для комплексного БПФ и 2,3,5 для действительного БПФ.

Примеры

На конкретной машине БПФ простой длины занимает 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, сокращает время вычисления до 1.5 мс, ускорение в 10.5 раз:

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