scipy.fft.

prev_fast_len#

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

Findet die vorherige schnelle Größe der Eingabedaten für fft. Nützlich zum Verwerfen einer minimalen Anzahl von Samples vor der FFT.

SciPy's FFT-Algorithmen erzielen ihre Geschwindigkeit durch eine rekursive Divide-and-Conquer-Strategie. Dies beruht auf effizienten Funktionen für kleine Primfaktoren der Eingabelänge. Daher sind die Transformationen am schnellsten, wenn Zusammensetzungen der von der FFT-Implementierung unterstützten Primfaktoren verwendet werden. Wenn für alle Radizes <= n effiziente Funktionen vorhanden sind, dann ist das Ergebnis eine Zahl x <= target mit nur Primfaktoren <= n. (Auch bekannt als n-glatte Zahlen)

Parameter:
targetint

Maximale Länge, bis zu der gesucht werden soll. Muss eine positive ganze Zahl sein.

realbool, optional

True, wenn die FFT eine reale Eingabe oder Ausgabe beinhaltet (z.B. rfft oder hfft, aber nicht fft). Standardmäßig False.

Rückgabe:
outint

Die größte schnelle Länge kleiner oder gleich target.

Hinweise

Das Ergebnis dieser Funktion kann sich in Zukunft ändern, wenn sich Leistungsaspekte ändern, z.B. wenn neue Primfaktoren hinzugefügt werden.

Das Aufrufen von fft oder ifft mit reellen Eingabedaten führt intern eine 'R2C'-Transformation durch.

In der aktuellen Implementierung nimmt prev_fast_len Radizes von 2,3,5,7,11 für komplexe FFT und 2,3,5 für reelle FFT an.

Beispiele

Auf einem bestimmten Rechner dauert eine FFT mit Primlänge 16,2 ms

>>> 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)

Die Durchführung einer FFT auf der maximalen schnellen Länge, die kleiner als max_len ist, reduziert die Rechenzeit auf 1,5 ms, eine Beschleunigung um das 10,5-fache

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