dst#
- scipy.fft.dst(x, type=2, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, orthogonalize=None)[Quelle]#
Gibt die Diskrete Sinustransformation (DST) der beliebigen Typenfolge x zurück.
- Parameter:
- xarray_like
Das Eingabearray.
- type{1, 2, 3, 4}, optional
Typ der DST (siehe Hinweise). Der Standardtyp ist 2.
- nint, optional
Länge der Transformation. Wenn
n < x.shape[axis], wird x abgeschnitten. Wennn > x.shape[axis], wird x mit Nullen aufgefüllt. Die Standardeinstellung ergibtn = x.shape[axis].- axisint, optional
Achse, entlang derer die DST berechnet wird; die Standardeinstellung ist die letzte Achse (d.h.
axis=-1).- norm{“backward”, “ortho”, “forward”}, optional
Normalisierungsmodus (siehe Hinweise). Standard ist "backward".
- overwrite_xbool, optional
Wenn True, kann der Inhalt von x zerstört werden; die Standardeinstellung ist False.
- workersint, optional
Maximale Anzahl von Workern, die für die parallele Berechnung verwendet werden sollen. Wenn negativ, wickelt sich der Wert von
os.cpu_count()ab. Weitere Einzelheiten finden Sie unterfft.- orthogonalizebool, optional
Ob die orthogonalisierte DST-Variante verwendet werden soll (siehe Hinweise). Standard ist
True, wennnorm="ortho"ist, undFalseandernfalls.Hinzugefügt in Version 1.8.0.
- Rückgabe:
- dstndarray von reellen Zahlen
Das transformierte Eingabearray.
Siehe auch
idstInverse DST
Hinweise
Warnung
Für
type in {2, 3}brichtnorm="ortho"die direkte Korrespondenz mit der direkten Fourier-Transformation. Um diese wiederherzustellen, müssen Sieorthogonalize=Falseangeben.Für
norm="ortho"werden sowohl diedstals auch dieidstmit demselben Gesamtfaktor in beide Richtungen skaliert. Standardmäßig wird die Transformation auch orthogonalisiert, was für die Typen 2 und 3 bedeutet, dass die Transformationsdefinition modifiziert wird, um die Orthogonalität der DST-Matrix zu gewährleisten (siehe unten).Für
norm="backward"erfolgt keine Skalierung auf derdstund dieidstwird mit1/Nskaliert, wobeiNdie "logische" Größe der DST ist.Theoretisch gibt es 8 Arten von DSTs für verschiedene Kombinationen von geraden/ungeraden Randbedingungen und Randverschiebungen [1], nur die ersten 4 Typen sind in SciPy implementiert.
Typ I
Es gibt mehrere Definitionen der DST-I; wir verwenden die folgende für
norm="backward". DST-I nimmt an, dass die Eingabe ungerade um \(n=-1\) und \(n=N\) ist.\[y_k = 2 \sum_{n=0}^{N-1} x_n \sin\left(\frac{\pi(k+1)(n+1)}{N+1}\right)\]Beachten Sie, dass die DST-I nur für Eingabegrößen > 1 unterstützt wird. Die (unnormierte) DST-I ist ihre eigene Inverse, bis auf einen Faktor \(2(N+1)\). Die orthonormalisierte DST-I ist exakt ihre eigene Inverse.
orthogonalizehat hier keine Auswirkung, da die DST-I-Matrix bis auf einen Skalierungsfaktor von2Nbereits orthogonal ist.Typ II
Es gibt mehrere Definitionen der DST-II; wir verwenden die folgende für
norm="backward". DST-II nimmt an, dass die Eingabe ungerade um \(n=-1/2\) und \(n=N-1/2\) ist; die Ausgabe ist ungerade um \(k=-1\) und gerade um \(k=N-1\)\[y_k = 2 \sum_{n=0}^{N-1} x_n \sin\left(\frac{\pi(k+1)(2n+1)}{2N}\right)\]Wenn
orthogonalize=Trueist, wirdy[-1]durch \(\sqrt{2}\) geteilt, was in Kombination mitnorm="ortho"dazu führt, dass die entsprechende Matrix der Koeffizienten orthonormal ist (O @ O.T = np.eye(N)).Typ III
Es gibt mehrere Definitionen der DST-III, wir verwenden die folgende (für
norm="backward"). DST-III nimmt an, dass die Eingabe ungerade um \(n=-1\) und gerade um \(n=N-1\) ist\[y_k = (-1)^k x_{N-1} + 2 \sum_{n=0}^{N-2} x_n \sin\left( \frac{\pi(2k+1)(n+1)}{2N}\right)\]Wenn
orthogonalize=Trueist, wirdx[-1]mit \(\sqrt{2}\) multipliziert, was in Kombination mitnorm="ortho"dazu führt, dass die entsprechende Matrix der Koeffizienten orthonormal ist (O @ O.T = np.eye(N)).Die (unnormierte) DST-III ist die Inverse der (unnormierten) DST-II, bis auf einen Faktor \(2N\). Die orthonormalisierte DST-III ist exakt die Inverse der orthonormalisierten DST-II.
Typ IV
Es gibt mehrere Definitionen der DST-IV, wir verwenden die folgende (für
norm="backward"). DST-IV nimmt an, dass die Eingabe ungerade um \(n=-0.5\) und gerade um \(n=N-0.5\) ist\[y_k = 2 \sum_{n=0}^{N-1} x_n \sin\left(\frac{\pi(2k+1)(2n+1)}{4N}\right)\]orthogonalizehat hier keine Auswirkung, da die DST-IV-Matrix bis auf einen Skalierungsfaktor von2Nbereits orthogonal ist.Die (unnormierte) DST-IV ist ihre eigene Inverse, bis auf einen Faktor \(2N\). Die orthonormalisierte DST-IV ist exakt ihre eigene Inverse.
Referenzen
[1]Wikipedia, „Discrete sine transform“, https://en.wikipedia.org/wiki/Discrete_sine_transform
Beispiele
Berechnen Sie die DST eines einfachen 1D-Arrays
>>> import numpy as np >>> from scipy.fft import dst >>> x = np.array([1, -1, 1, -1]) >>> dst(x, type=2) array([0., 0., 0., 8.])
Dies berechnet die Diskrete Sinustransformation (DST) vom Typ II für das Eingabearray. Die Ausgabe enthält die transformierten Werte, die der gegebenen Eingabesequenz entsprechen.