Anzahl der Daubechies-Koeffizienten

8

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, wavedecergibt 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:

Vn 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.ϕ{ϕn,k}knWnψ

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]
Gustav Larsson
quelle
1
Was sind Vund W?
Phonon
@Phonon Ich habe der Frage eine Klarstellung hinzugefügt.
Gustav Larsson
Also von 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.
Phonon
@Phonon Letzteres. Überprüfen Sie den Code, den ich hinzugefügt habe. Vielen Dank!
Gustav Larsson
Ja, das ist hilfreich. Ich werde mich in MATLAB-Dokumenten umsehen.
Phonon

Antworten:

4

Laut MATLAB- Dokumentation am wavedec,

Die Länge jedes Filters ist gleich 2N. Wenn n = length(s), die SignaleF und G sind von Länge n+2N1 und die Koeffizienten cA1 und cD1 sind von Länge

floor(n12)+N

Hier, n=16 ist die Länge Ihres Signals und N=2 ist die Daubechies-Nummer.

Zusammengenommen sollten Ihre Detailkoeffizienten auf der zweiten Ebene lang sein

floor(1612)+2=7+2=9.

Auf der zweiten Ebene sollten Ihre Koeffizienten lang sein

floor(912)+2=4+2=6.

Wenn Sie sich fragen, warum dies der Fall sein muss, stellen Sie sich das Filter-Dezimierungs-Verfahren vor. Skalierungs- und Wavelet-Funktion fürdbm Wavelets sind von Länge 2m. Wenn Sie Länge faltenn Signal mit Länge 2m Signal erhalten Sie ein Signal der Länge zurück l0=n+2m1. Wenn Sie jede zweite Probe dieses resultierenden Signals nehmen, erhalten Sie etwas von Länge zurückl1=n+2m12=l02. Natürlich, wennl0 ist ungerade (nist gerade), dann können wir das Signal nicht genau in zwei Teile teilen . Mit cleverer Mathematik, auf die ich hier nicht näher eingehen werde, können Sie zeigen, dass dieser letzte nicht gepaarte Koeffizient ohnehin redundant ist (enthält keine Informationen, die wir noch nicht kennen), sodass Sie ihn einfach weglassen können. Daher haben wir immer das resultierende dezimierte Längensignal

l1=floor(l02)=floor(n+2N12)=floor(n12)+N.
Phonon
quelle
Genau die Art von Ableitung, nach der ich gesucht habe. Vielen Dank!
Gustav Larsson
Können Sie bitte erklären, was F- und G-Signale sind?
Weam