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. ])]
Antworten:
Sie haben Recht, dass die FWT eher als "Cousin" der STFT denn als die FT angesehen wird. Tatsächlich ist die FWT nur eine diskrete Abtastung der CWT (kontinuierliche Wavelet-Transformation), da die FFT / DFT eine diskrete Abtastung der Fourier-Transformation ist. Dies mag wie ein subtiler Punkt erscheinen, ist jedoch relevant, wenn Sie festlegen, wie Sie die Transformation diskretisieren möchten.
Die CWT und die STFT sind beide redundante Analysen eines Signals. Mit anderen Worten, Sie haben mehr "Koeffizienten" (im diskreten Fall), als Sie zur vollständigen Darstellung eines Signals benötigen. Eine Fourier-Transformation (oder sagen wir eine Wavelet-Transformation mit nur einer Skala) integriert jedoch ein Signal von -unendlich bis + unendlich. Dies ist für Signale der realen Welt nicht sehr nützlich, daher kürzen wir die Transformationen (dh das Fenster) auf kürzere Längen. Das Fenstern eines Signals verändert die Transformation - Sie multiplizieren mit dem Fenster in Zeit / Raum, so dass Sie im Transformationsraum die Faltung der Transformation des Fensters mit der Transformation des Signals haben.
Im Fall der STFT haben die Fenster (normalerweise) zu jeder Zeit die gleiche Länge (Ausdehnung ungleich Null) und sind frequenzunabhängig (Sie fenster ein 10-Hz-Signal mit der gleichen Breite wie ein 10-kHz-Signal). So erhalten Sie das rechteckige Gitterspektrogramm, wie Sie es gezeichnet haben.
Die CWT hat dieses Fenster eingebaut durch die Tatsache, dass die Wavelets kürzer werden (zeitlich oder räumlich), wenn der Maßstab abnimmt (wie bei höheren Frequenzen). Für höhere Frequenzen ist das effektive Fenster daher kürzer und Sie erhalten ein Skalogramm, das so aussieht, wie Sie es für die FWT gezeichnet haben.
Wie Sie das CWT diskretisieren, liegt etwas bei Ihnen, obwohl ich denke, dass es minimale Abtastwerte sowohl in der Verschiebung als auch in der Skala gibt, um ein Signal vollständig darzustellen. In der Regel (zumindest wie ich sie verwendet habe) werden Sie für die niedrigste Skala (höchste Frequenz) an allen Schichtpositionen (Zeit / Raum) Samples erstellen. Je höher die Skalierung ist (je niedriger die Frequenz), desto seltener können Sie Samples erstellen. Das Grundprinzip ist, dass sich niedrige Frequenzen nicht so schnell ändern (denken Sie an einen Beckencrash im Vergleich zu einer Bassgitarre - der Beckencrash hat sehr kurze Einschwingzeiten, während der Wechsel der Bassgitarre länger dauern würde). Tatsächlich haben Sie auf der kürzesten Skala (sofern Sie an allen Schichtpositionen abtasten) die vollständige Darstellung eines Signals (Sie können es nur mit den Koeffizienten auf dieser Skala rekonstruieren). Ich bin mir nicht so sicher, warum ich die Skala abtasten soll. ICH' Ich habe dies als logarithmisch empfunden, mit (glaube ich) engerem Abstand zwischen kürzeren Skalen. Ich denke, das liegt daran, dass die Wavelets in längeren Maßstäben eine breitere Fourier-Transformation haben (daher "nehmen" sie mehr Frequenzen auf).
Ich gebe zu, dass ich die FWT nicht vollständig verstehe. Meine Vermutung ist, dass es sich tatsächlich um die minimale Stichprobe in Schicht / Maßstab handelt und keine redundante Darstellung ist. Aber dann glaube ich, dass Sie die Fähigkeit verlieren, ein Signal in kurzer Zeit zu analysieren (und damit herumzuspielen), ohne unerwünschte Artefakte einzuführen. Ich werde mehr darüber lesen und, wenn ich etwas Nützliches erfahre, berichten. Hoffentlich werden andere gerne kommentieren.
quelle
Betrachten Sie den Haar-Wavelet-Fall. Die schnelle Wavelet-Transformation unterteilt Ihr Signal rekursiv und berechnet jedes Mal die Summe und Differenz der beiden Hälften. Die Differenz ist die Größe der Transformation für das aktuelle Wavelet und die Summe wird für den Aufrufer zurückgegeben, um die Größe der Transformation für ein dilatiertes Wavelet mit der halben Frequenz zu berechnen. Somit deckt die FWT die Zeit-Frequenz-Ebene mit dem in dem von Ihnen angegebenen Diagramm beschriebenen Muster ab.
Beachten Sie, dass das von Ihnen angegebene Diagramm etwas irreführend ist. Was sie Ihnen wirklich sagen wollen, ist, dass Sie einen Abtastwert mit der niedrigsten Frequenz, zwei Abtastwerte mit der doppelten Frequenz, vier Abtastwerte mit der vierfachen Frequenz und so weiter erhalten. Die Zeit-Frequenz-Eigenschaften jedes Wavelets sind nicht so, dass sie die Kachel bedecken. In der Praxis wird jedes Wavelet einen unendlichen Bereich abdecken, da es eine kompakte Unterstützung hat und daher hinsichtlich der Frequenz vollständig delokalisiert werden muss. Denken Sie also nur an die Zentren dieser Fliesen.
Darüber hinaus erfordert die FWT ein diskretes Wavelet, das sich an ein weitaus restriktiveres Zulässigkeitskriterium halten muss als kontinuierliche Wavelets für die CWT. Folglich sind die Zeit-Frequenz-Eigenschaften diskreter Wavelets im Allgemeinen schrecklich (z. B. sind die Daubechies-Wavelets entweder voll von scharfen Merkmalen oder haben sich ändernde Frequenzen), und die Nützlichkeit der Zeit-Frequenz-Ebene ist im Kontext der FWT stark verringert. Kontinuierliche Wavelets werden jedoch verwendet, um Zeit-Frequenz-Darstellungen von Signalen zu berechnen.
quelle
Ihre Referenz hat es:
Für mehr mögen Sie vielleicht die DWT-Seite . Dort werden Haar Wavelets, Daubechies Wavelets und andere vorgestellt. Es zeigt auf, wie
Wenn Sie statt diskreter Wavelets nun kontinuierliche Wavelets oder komplexe Wavelets verwenden möchten, beginnen Sie möglicherweise mit Wavelet-Reihen .
Jenseits von Wikipedia könnten ein Lehrbuch und ein Kurs für Sie von Vorteil sein.
quelle
Beginnen Sie mit der generischen Fenster-STFT (Endlosformular). Wenn Sie ein unendliches Fenster mit Einheitshöhe einstecken, stellen Sie die Fourier-Transformation als Sonderfall wieder her. Was Sie diskretisieren können (und die DFT bekommen) und es schnell machen können (und die FFT bekommen).
Beginnen Sie mit einem CWT (Endlosformular). Die kontinuierliche CWT lässt eine unglaubliche Menge möglicher Wavelet-Formen zu. Sie können nur mit Stichprobenmustern (nach Zeit oder Maßstab) diskretisiert werden, die eine gewisse "Heisenberg" -Ungleichung berücksichtigen: eine Stichprobe pro Flächeneinheit. Diese Muster hängen vom Wavelet ab. In den meisten Fällen machen die Muster eine diskretisierte CWT überflüssig und ergeben einen Wavelet-Frame.
Einige wollten es nicht redundant, mit einer dyadischen Skala (DWT). Nur sehr wenige Wavelets (immer noch eine unendliche Zahl, aber Sie können sie nicht zufällig finden) lassen dies zu. Unter den ersten waren die Haar-, Franklin- und Meyer-Wavelets. Wenn Sie dann die Wavelet-Unterstützung als endlich festlegen, war Haar lange Zeit die einzige. Es ist fast unmöglich, ein orthogonales Wavelet aus "natürlichen kontinuierlichen Wavelets" zu erhalten. Deshalb wurden Daubechies ' Wavelets und später Symmlets und Coiflets gebaut . Diese seltsam geformten Wavelets haben keine schönen und einfachen Formeln wie das Morlet-Wavelet.
DWT (oder FWT) ist genau wie die DFT / FFT. Die meisten anderen diskretisierten CWT (mit einem beliebigen Wavelet) sind genau so (ohne großen Schaden, wenn Sie über eine ausreichende Redundanz verfügen).
So:
Die folgenden Bilder zeigen, wie eine kontinuierliche Version des Haar-Wavelets aussieht
kann in ein orthogonales, diskretes Wavelet abgetastet werden:
Beachten Sie, dass einige diskrete Wavelets, insbesondere die langen (wie Splines), manchmal mit einer FFT berechnet werden :)
quelle