scipy.signal.

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

czt

Hilfsfunktion zur schnellen Berechnung der CZT.

ZoomFFT

Klasse, die eine aufrufbare partielle FFT-Funktion erstellt.

Hinweise

Die Standardwerte sind so gewählt, dass f(x) äquivalent zu fft.fft(x) ist und, wenn m > len(x) ist, dass f(x, m) äquivalent zu fft.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 ZoomFFT besser, 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.fft verwendet 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()
../../_images/scipy-signal-CZT-1.png