Die schnelle Fourier - Transformation nimmt Operationen, während die schnelle Wavelet - Transformation nimmt . Aber was genau berechnet die FWT?O ( N )
Obwohl sie oft verglichen werden, scheinen FFT und FWT Äpfel und Orangen zu sein. Soweit ich weiß, ist es sinnvoller, die STFT (FFTs von kleinen Brocken über die Zeit) mit der komplexen Morlet-WT zu vergleichen , da es sich um Zeit-Frequenz-Darstellungen handelt, die auf komplexen Sinuskurven basieren (bitte korrigieren Sie mich, wenn ich mich irre.) ). Dies wird häufig mit einem Diagramm wie dem folgenden gezeigt:
Die linke Abbildung zeigt, wie die STFT eine Reihe von FFTs ist , die im Laufe der Zeit übereinander gestapelt sind (diese Darstellung ist der Ursprung des Spektrogramms ), während die rechte Abbildung die dyadische WT zeigt, die bei hohen Frequenzen eine bessere Zeitauflösung und eine bessere Frequenz aufweist Auflösung bei niedrigen Frequenzen (diese Darstellung wird Skalogramm genannt ). In diesem Beispiel ist für die STFT die Anzahl der vertikalen Spalten (6), und eine einzelne -FFT-Operation berechnet eine einzelne Reihe von Koeffizienten aus Abtastwerten. Die Gesamtsumme beträgt 8 FFTs mit jeweils 6 Punkten oder 48 Abtastungen im Zeitbereich.O ( N log N ) N N
Was ich nicht verstehe:
Wie viele Koeffizienten berechnet eine einzelne FWT-Operation und wo befinden sie sich in der obigen Zeit-Frequenz-Tabelle?
Welche Rechtecke werden durch eine einzelne Berechnung ausgefüllt?
Wenn wir mit beiden einen flächengleichen Block von Zeit-Frequenz-Koeffizienten berechnen, erhalten wir dann die gleiche Datenmenge?
Ist die FWT noch effizienter als die FFT?
Konkretes Beispiel mit PyWavelets :
In [2]: dwt([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[2]:
(array([ 0.70710678, 0. , 0. , 0. ]),
array([ 0.70710678, 0. , 0. , 0. ]))
Es werden zwei Sätze mit 4 Koeffizienten erstellt, sodass dies der Anzahl der Abtastwerte im Originalsignal entspricht. Aber in welcher Beziehung stehen diese 8 Koeffizienten zu den Kacheln im Diagramm?
Aktualisieren:
Eigentlich habe ich das wahrscheinlich falsch gemacht und sollte verwenden wavedec()
, was eine mehrstufige DWT-Zerlegung bewirkt:
In [4]: wavedec([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[4]:
[array([ 0.35355339]),
array([ 0.35355339]),
array([ 0.5, 0. ]),
array([ 0.70710678, 0. , 0. , 0. ])]