CZT#
- class scipy.signal.CZT(n, m=None, w=None, a=1 + 0j)[Quelle]#
Erzeugt eine aufrufbare Chirp-Z-Transformationsfunktion.
Transformation zur Berechnung der Frequenzantwort um eine Spirale herum. Objekte dieser Klasse sind aufrufbar und können die Chirp-Z-Transformation auf ihre Eingaben anwenden. Dieses Objekt berechnet die konstanten Chirps vor, die in der gegebenen Transformation verwendet werden.
- Parameter:
- nint
Die Größe des Signals.
- mint, optional
Die Anzahl der gewünschten Ausgabepunkte. Standard ist n.
- wcomplex, optional
Das Verhältnis zwischen den Punkten in jedem Schritt. Dies muss präzise sein, da sich sonst akkumulierte Fehler am Ende der Ausgabesequenz bemerkbar machen. Standardmäßig werden gleichmäßig verteilte Punkte um den gesamten Einheitskreis herum verwendet.
- acomplex, optional
Der Startpunkt in der komplexen Ebene. Standard ist 1+0j.
Methoden
__call__(x, *[, axis])Berechnet die Chirp-Z-Transformation eines Signals.
points()Gibt die Punkte zurück, an denen die Chirp-Z-Transformation berechnet wird.
- Rückgabe:
- fCZT
Aufrufbares Objekt
f(x, axis=-1)zur Berechnung der Chirp-Z-Transformation von x.
Siehe auch
Hinweise
Die Standardwerte sind so gewählt, dass
f(x)äquivalent zufft.fft(x)ist und, wennm > len(x)ist, dassf(x, m)äquivalent zufft.fft(x, m)ist.Wenn w nicht auf dem Einheitskreis liegt, dann wird die Transformation um eine Spirale mit exponentiell zunehmendem Radius erfolgen. Unabhängig davon wird sich der Winkel linear erhöhen.
Für Transformationen, die auf dem Einheitskreis liegen, ist die Genauigkeit bei Verwendung von
ZoomFFTbesser, da sich jeder numerische Fehler in w bei langen Datenlängen anhäuft und vom Einheitskreis wegdriftet.Die Chirp-Z-Transformation kann schneller sein als eine äquivalente FFT mit Nullauffüllung. Probieren Sie es mit Ihren eigenen Array-Größen aus, um dies zu sehen.
Die Chirp-Z-Transformation ist jedoch deutlich weniger präzise als die äquivalente FFT mit Nullauffüllung.
Da diese CZT mit dem Bluestein-Algorithmus implementiert ist, kann sie große Primzahl-Längen-Fourier-Transformationen in O(N log N) Zeit berechnen, anstatt in der O(N**2) Zeit, die für die direkte DFT-Berechnung erforderlich ist. (Auch
scipy.fftverwendet den Bluestein-Algorithmus.)(Der Name "Chirp-Z-Transformation" leitet sich von der Verwendung eines Chirps im Bluestein-Algorithmus ab. Sie zerlegt Signale nicht in Chirps, wie andere Transformationen mit "Chirp" im Namen.)
Referenzen
[1]Leo I. Bluestein, "A linear filtering approach to the computation of the discrete Fourier transform", Northeast Electronics Research and Engineering Meeting Record 10, 218-219 (1968).
[2]Rabiner, Schafer und Rader, "The chirp z-transform algorithm and its application", Bell Syst. Tech. J. 48, 1249-1292 (1969).
Beispiele
Mehrere Primzahl-Längen-FFTs berechnen
>>> from scipy.signal import CZT >>> import numpy as np >>> a = np.random.rand(7) >>> b = np.random.rand(7) >>> c = np.random.rand(7) >>> czt_7 = CZT(n=7) >>> A = czt_7(a) >>> B = czt_7(b) >>> C = czt_7(c)
Anzeigen der Punkte, an denen die FFT berechnet wird
>>> czt_7.points() array([ 1.00000000+0.j , 0.62348980+0.78183148j, -0.22252093+0.97492791j, -0.90096887+0.43388374j, -0.90096887-0.43388374j, -0.22252093-0.97492791j, 0.62348980-0.78183148j]) >>> import matplotlib.pyplot as plt >>> plt.plot(czt_7.points().real, czt_7.points().imag, 'o') >>> plt.gca().add_patch(plt.Circle((0,0), radius=1, fill=False, alpha=.3)) >>> plt.axis('equal') >>> plt.show()