Transformada de Haar
Origem: Wikipédia, a enciclopédia livre.
A Transformada de Haar é um transformada matemática discreta usada no processamento e análise de sinais, na compressão de dados e em outras aplicações de engenharia e ciência da computação. Ela foi proposta em 1909 pelo matemático húngaro Alfred Haar. A transformada de Haar é um caso particular de transformada discreta de wavelet, onde o wavelet é um pulso quadrado definido por:
Na figura vemos ilustrada a wavelet de Haar. Apesar de ter sido proposta muito antes do termo wavelet[1] ser cunhado, a wavelet de Haar é considerada como um caso particular das wavelets de Daubechies, conhecida por isso como wavelet de Daubechies D2.
A transformada de Haar pode ser usada para representar um grande número de funções f(t) como sendo o somatório:
onde φ(t) é a função de escala definida por e ck e dj,k são parâmetros a serem calculados.
Por exemplo, a função degrau definida por:
pode ser representada como . O seja os parâmetros c0 = 4 e d0,0 = 1, e cn = 0 e dn,m = 0 para . O vetor (4,1) equivale a transformada discreta de Haar da função f(t), que pode ser representada também na forma vetorial como (5,3).
Índice |
[editar] Representação matricial
Como vimos acima, a transformada de Haar em sua forma discreta pode ser expressa como uma multiplicação matricial. No exemplo citado acima temos:
(5,3)A2 = (4,1) dando a matriz A2 como sendo:
E assim a transformada inversa de Haar se torna:
Entretanto a matriz é difícil de ser calculada, mas sabemos que se a matriz A2 for ortonormal sua inversa é igual a sua transposta. Assim podemos utilizar a matriz:
para a a transformada de Haar discreta, sendo sua inversa .
Assim, a transformada discreta de Haar em sua forma matricial pode ser expressa por uma matriz AN de tamanho onde os elementos são definidos como
onde
e k = 2p + q − 1, onde N = 2n, para p = 0, e para
Assim, a matriz A2 do nosso exemplo passa a ser:
[editar] Trasformada rápida de Haar
Na prática a transformada de Haar consiste em calcular a soma e a diferença entre os elementos de um vetor dois a dois. Assim, definimos a transformada rápida de Haar de um vetor como os dois vetores e .
A transformada inversa simplesmente recalcula os valores originais a partir da média e das diferenças. A transformada inversa recebe então os vetores Mn / 2 e Dn / 2 devolve um vetor S'n = Sn:
[editar] Exemplo de Implementação
O trecho de código python abaixo exemplifica esse cálculo:
#!/usr/bin/python # coding: utf-8 import math def haar_transform(S): M = [] D = [] for i in range(0, len(S), 2): m = (S[i] + S[i+1]) / math.sqrt(2) d = (S[i] - S[i+1]) / math.sqrt(2) M = M + [m] D = D + [d] return (M, D) def haar_inverse(M, D): S = [] for i in range(0, len(M)): s1 = M[i] + D[i] s2 = M[i] - D[i] S = S + [s1, s2] return S S = [5,3] (M,D) = haar_transform(S) print M, D print haar_inverse(M, D) S = [1,0,2,9,3,8,4,7,5,6] (M,D) = haar_transform(S) print M, D print haar_inverse(M, D)
[editar] Notas e referências
- ↑ A transformada foi proposta por Alfred Haar em 1909 e o termo Wavelet só viria mais tarde. (ver en:Haar wavelet)
[editar] Bibliografia
- (en) SALOMON, David. Data Compression: The Complete Reference. 2.ed. Nova Iorque: Springer, 2000.
[editar] Ver também
- Wavelet
- Wavelet de Daubechies
- Transformada Discreta de Wavelet