Ich wundere mich über die Korrelation zwischen der Eingangsgröße und der Anzahl der Koeffizienten, die durch eine diskrete Wavelet-Transformation gegeben sind.
Ich verwende Daubechies-Wavelets, um eine 1D-Funktion zu beschreiben, und ich verwende PyWavelets, um sie zu implementieren (analog zur MATLAB-Toolbox).
Ich begann damit, es mit Haar-Wavelets zu implementieren, was zu korrekten Ergebnissen führte und ich verstehe genau, wie es funktioniert. Angenommen, meine Eingabefunktion hat 16 Datenpunkte. Wenn ich Haar verwende, wavedec
ergibt sich aus einer mehrstufigen Zerlegung ( ) etwa Folgendes (die Anzahl der Verschiebungen in Klammern):
V1[1], W1[1], W2[2], W3[4], W4[8]
Das ist alles schön und gut. Die V1 gibt mir die Skalierungsfunktion und die W1-W5-Wavelets unterschiedlicher Skalierung und Dilatation. Mein Problem ist, wenn ich die nächsten Daubechies ( 'db2'
in der Toolbox als D4 bezeichnet ) verwende und bekomme
V1[6], W1[6], W2[9]
Ich verliere meine ganze Intuition. Ich habe keine Ahnung, woher 6, 6 und 9 kommen, und sie ändern sich abhängig von der von mir angegebenen Ebene (nicht einmal sicher, was es bedeutet, eine Ebene anzugeben) und natürlich der Eingabegröße. Wie kann ich die Anzahl der Koeffizienten vorhersagen und welche guten Ressourcen gibt es, um besser zu verstehen, warum?
Vielen Dank!
EDIT: Klarstellung zu V und W:
bezeichnet normalerweise die Spanne einer bestimmten Skalierungsfunktion, , dh , wobei die Verschiebung und die Skalierung ist. ist bis auf die Wavelet-Funktion . Ich hätte die Notation vielleicht ein wenig missbrauchen können, indem ich mich auf die Vektoren der Koeffizienten von V und W bezogen hätte.
EDIT2: Code
Hier ist der MATLAB-Code, um Folgendes zu erzeugen:
>> [C, L] = wavedec(1:16, 4, 'db1'); L
L =
1 1 2 4 8 16
>> [C, L] = wavedec(1:16, 2, 'db2'); L
L =
6 6 9 16
Ich habe tatsächlich PyWavelets verwendet, wo es so aussah:
>>> import pywt
>>> map(len, pywt.wavedec(range(16), 'db1')) # defaults to level = 4
[1, 1, 2, 4, 8]
>>> map(len, pywt.wavedec(range(16), 'db2')) # defaults to level = 2
[6, 6, 9]
V1[6], W1[6], W2[9]
Ihnen bedeuten , dass Sie eine Skalierungsfunktion der Länge 6 erhalten, und zwei Wavelet - Funktionen von Längen 6 und 9? Oder ist dies die Anzahl der Koeffizienten des unterschiedlichen Pegels Ihres transformierten Signals? MATLAB-Code, um diese zu erhalten, wäre ebenfalls sehr nützlich.
V
undW
?