Número de coeficientes de Daubechies

8

Me pregunto sobre la correlación entre el tamaño de entrada y el número de coeficientes dados por una transformada wavelet discreta.

Estoy usando las wavelets de Daubechies para describir una función 1D y estoy usando PyWavelets para implementarla (que es análogo a la caja de herramientas MATLAB).

Comencé por implementarlo usando las wavelets de Haar, que dieron resultados correctos y entiendo exactamente cómo funciona. Digamos que mi función de entrada tiene 16 puntos de datos, si uso Haar, lo que obtengo de una descomposición multinivel ( wavedec) es algo como esto (el número de cambios entre paréntesis):

V1[1], W1[1], W2[2], W3[4], W4[8]

Todo esto está muy bien. El V1 me da la función de escala y las wavelets W1-W5 de diferente escala y dilatación. Mi problema es cuando uso los próximos Daubechies (referidos como 'db2'en la caja de herramientas, que se llama D4 ), y obtengo

V1[6], W1[6], W2[9]

Pierdo toda mi intuición. No tengo idea de dónde provienen 6, 6 y 9, y cambian según el nivel que especifique (ni siquiera estoy seguro de lo que significa especificar un nivel) y, por supuesto, el tamaño de entrada. ¿Cómo puedo predecir la cantidad de coeficientes y cuáles son algunos buenos recursos para comprender mejor por qué?

¡Gracias!

EDITAR: Aclaración sobre V y W:

Vn generalmente denota el lapso de una determinada función de escala, , es decir, , donde es el desplazamiento la escala. es igual excepto por la función wavelet, . Sin embargo, podría haber abusado un poco de la notación al referirme a los vectores de coeficientes de V y W.ϕ{ϕn,k}knWnψ

EDIT2: Código

Aquí está el código MATLAB para producir lo anterior:

>> [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

De hecho, usé PyWavelets, donde se veía así:

>>> 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
fuente
1
¿Qué son Vy W?
Phonon
@Phonon Agregué una aclaración en la pregunta.
Gustav Larsson
Entonces, V1[6], W1[6], W2[9]¿quiere decir que obtiene una función de escala de longitud 6 y dos funciones wavelet de longitud 6 y 9? ¿O son estos los números de coeficientes de los diferentes niveles de su señal transformada? El código MATLAB para obtenerlos también sería muy útil.
Phonon
@Phonon El último. Comprueba el código que agregué. ¡Gracias!
Gustav Larsson
Sí, esto es útil. Cavaré en documentos de MATLAB.
Phonon

Respuestas:

4

De acuerdo con la documentación de MATLAB sobre wavedec,

La longitud de cada filtro es igual a . Si , las señales y son de longitud y los coeficientes y son de longitud2Nn = length(s)FGn+2N1cA1cD1

floor(n12)+N

Aquí, es la longitud de su señal, y es el número de Daubechies.n=16N=2

Poniendo todo eso junto, sus coeficientes de detalle en el segundo nivel deben ser largos

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

En el segundo nivel, sus coeficientes deben ser largos

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

Si se pregunta por qué este debe ser el caso, imagine el procedimiento de filtrado-diezmado. La función de escalado y wavelet para wavelets tiene una longitud de . Cuando convoluciona la señal de longitud con la señal de longitud , obtienes una señal de longitud . Si toma cada segunda muestra de esta señal resultante, obtiene algo de longitud . Por supuesto, si es impar ( es par), entonces no podemos dividir la señal exactamente en dos partesdbm2mn2ml0=n+2m1l1=n+2m12=l02l0n. Con una matemática inteligente a la que no me referiré aquí, puede demostrar que este último coeficiente no emparejado es redundante de todos modos (no contiene información que aún no conocemos), por lo que puede omitirlo. Por lo tanto, siempre tendremos la señal de longitud diezmada resultante

l1=floor(l02)=floor(n+2N12)=floor(n12)+N.
Phonon
fuente
Exactamente el tipo de derivación que estaba buscando. ¡Muchas gracias!
Gustav Larsson
¿Puede explicar que son las señales F y G?
Weam