scipy.fft.

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. Wenn n > x.shape[axis], wird x mit Nullen aufgefüllt. Die Standardeinstellung ergibt n = 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 unter fft.

orthogonalizebool, optional

Ob die orthogonalisierte DST-Variante verwendet werden soll (siehe Hinweise). Standard ist True, wenn norm="ortho" ist, und False andernfalls.

Hinzugefügt in Version 1.8.0.

Rückgabe:
dstndarray von reellen Zahlen

Das transformierte Eingabearray.

Siehe auch

idst

Inverse DST

Hinweise

Warnung

Für type in {2, 3} bricht norm="ortho" die direkte Korrespondenz mit der direkten Fourier-Transformation. Um diese wiederherzustellen, müssen Sie orthogonalize=False angeben.

Für norm="ortho" werden sowohl die dst als auch die idst mit 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 der dst und die idst wird mit 1/N skaliert, wobei N die "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.

orthogonalize hat hier keine Auswirkung, da die DST-I-Matrix bis auf einen Skalierungsfaktor von 2N bereits 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=True ist, wird y[-1] durch \(\sqrt{2}\) geteilt, was in Kombination mit norm="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=True ist, wird x[-1] mit \(\sqrt{2}\) multipliziert, was in Kombination mit norm="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)\]

orthogonalize hat hier keine Auswirkung, da die DST-IV-Matrix bis auf einen Skalierungsfaktor von 2N bereits 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.