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:
geralmente denota o período de uma determinada função de escala, , ie , Onde é a mudança e a escala. é 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]
V
eW
?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.Respostas:
De acordo com MATLAB documentação on
wavedec
,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
No segundo nível, seus coeficientes devem ter comprimento
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+2m−1 . Se você coletar cada segunda amostra desse sinal resultante, receberá algo de comprimentol1=n+2m−12=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
fonte