Número de coeficientes de Daubechies

8

Eu estou pensando sobre a correlação entre o tamanho da entrada e o número de coeficientes fornecidos por uma transformada de wavelet discreta.

Estou usando wavelets de Daubechies para descrever uma função 1D e estou usando PyWavelets para implementá-la (que é análoga à caixa de ferramentas MATLAB).

Comecei implementando-o usando wavelets Haar, que deram os resultados corretos e entendo exatamente como ele funciona. Digamos que minha função de entrada tenha 16 pontos de dados, se eu usar o Haar, o que recebo de uma decomposição multinível ( wavedec) é algo como isto (o número de mudanças entre parênteses):

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

Está tudo bem e bom. O V1 me fornece a função de escala e as wavelets W1-W5 de diferentes escalas e dilatações. Meu problema é quando uso os próximos Daubechies (mencionados 'db2'na caixa de ferramentas, chamada D4 ), e recebo

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

Eu perco toda a minha intuição. Eu não tenho ideia de onde vêm 6, 6 e 9, e eles mudam dependendo do nível especificado (nem tenho certeza do que significa especificar um nível) e, claro, do tamanho da entrada. Como posso prever o número de coeficientes e quais são alguns bons recursos para entender melhor o porquê?

Obrigado!

EDIT: Esclarecimento sobre V e W:

Vn geralmente denota o período de uma determinada função de escala, ϕ, ie {ϕn,k}, Onde k é a mudança e n a escala. Wn é o mesmo, exceto para a função wavelet, ψ. Eu poderia ter abusado um pouco da notação ao me referir aos vetores de coeficientes de V e W.

EDIT2: Código

Aqui está o código MATLAB para produzir o acima:

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

Na verdade, eu usei o PyWavelets, que fica assim:

>>> 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
fonte
11
O que são Ve W?
Phonon
@Phonon Adicionei um esclarecimento na pergunta.
18170 Gustav Larsson
Então, V1[6], W1[6], W2[9]você quer dizer que obtém uma função de escala de comprimento 6 e duas funções de wavelet de comprimento 6 e 9? Ou esses são os números de coeficientes dos diferentes níveis do seu sinal transformado? O código MATLAB para obtê-los também seria muito útil.
Phonon
@Phonon Este último. Verifique o código que adicionei. Obrigado!
18140 Gustav Larsson
Sim, isso é útil. Vou procurar nos documentos do MATLAB.
Phonon

Respostas:

4

De acordo com MATLAB documentação on wavedec,

O comprimento de cada filtro é igual a 2N. Se n = length(s)os sinaisF e G são de comprimento n+2N1 e os coeficientes cA1 e cD1 são de comprimento

floor(n12)+N

Aqui, n=16 é a duração do seu sinal e N=2 é o número de Daubechies.

Juntando tudo isso, seus coeficientes de detalhes no segundo nível devem ser longos

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

No segundo nível, seus coeficientes devem ter comprimento

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

Se você está se perguntando por que esse deve ser o caso, imagine o procedimento de filtragem e dizimação. Função de escala e wavelet paradbm wavelets são de comprimento 2m. Quando você envolve comprimenton sinal com comprimento 2m sinal, você recebe um sinal de comprimento l0=n+2m1. Se você coletar cada segunda amostra desse sinal resultante, receberá algo de comprimentol1=n+2m12=l02. Claro sel0 é estranho (né par), então não podemos dividir o sinal exatamente em duas partes . Com a matemática inteligente que não abordarei aqui, você pode mostrar que esse último coeficiente não emparelhado é redundante de qualquer maneira (carrega nenhuma informação que ainda não sabemos), então você pode simplesmente omiti-lo. Portanto, sempre teremos o sinal dizimado resultante do comprimento

l1=floor(l02)=floor(n+2N12)=floor(n12)+N.
Phonon
fonte
Exatamente o tipo de derivação que eu estava procurando. Muito obrigado!
Gustav Larsson
Você pode explicar o que são sinais F e G?
Weam 23/02