Math ClubMath Club
v1 · padrão canônico

Wavelets — Análise Multirresolução

Wavelet de Haar, condição de admissibilidade, análise multirresolução (MRA), wavelets de Daubechies, transformada wavelet contínua e discreta, e aplicações em compressão e denoising.

Used in: engenharia

Choose your door

Real scenarios with market data and step-by-step calculations

Wavelets em Compressão e Denoising

Compressão de Imagem (JPEG 2000)

JPEG 2000 usa a wavelet biortogonal CDF 9/7 (Cohen-Daubechies-Feauveau) para compressão com e sem perda. Vantagens sobre JPEG:

  • Sem artefatos de bloco em taxas baixas
  • Escalabilidade: resolução progressiva
  • Melhor qualidade visual para mesma taxa de compressão

Denoising por Limiarização de Coeficientes

O denoising wavelet de Donoho-Johnstone:

  1. Calcular DWT de y=f+σεy = f + \sigma\varepsilon
  2. Limiarizar: d~j,k=Sλ(dj,k)\tilde{d}_{j,k} = S_\lambda(d_{j,k})
  3. Reconstruir via IDWT

onde SλS_\lambda é soft-thresholding e o limiar universal é λ=σ2lnN\lambda = \sigma\sqrt{2\ln N}.

Optimalidade: O estimador é ótimo (minimax) sobre classes de funções Lipschitz e Sobolev.

Código Python — DWT com PyWavelets

import numpy as np
import pywt  # pip install PyWavelets

# Sinal de teste: seno + ruído
np.random.seed(42)
N = 1024
t = np.linspace(0, 1, N)
sigma = 0.3
f_true = np.sin(2*np.pi*5*t) + 0.5*np.sin(2*np.pi*20*t)
y = f_true + sigma * np.random.randn(N)

# DWT multinível (Daubechies 4)
wavelet = pywt.Wavelet('db4')
coeffs = pywt.wavedec(y, wavelet, level=6)

# Denoising: limiar universal
threshold = sigma * np.sqrt(2 * np.log(N))
denoised_coeffs = [coeffs[0]] + [
    pywt.threshold(c, threshold, mode='soft') for c in coeffs[1:]
]

# Reconstrução
f_est = pywt.waverec(denoised_coeffs, wavelet)[:N]

snr_before = 10*np.log10(np.var(f_true)/np.var(y - f_true))
snr_after  = 10*np.log10(np.var(f_true)/np.var(f_est - f_true))
print(f"SNR antes:  {snr_before:.1f} dB")
print(f"SNR depois: {snr_after:.1f} dB")

# Comparar energia dos coeficientes (compressão)
d_all = np.concatenate([c.ravel() for c in coeffs[1:]])
idx_sorted = np.argsort(np.abs(d_all))[::-1]
for pct in [10, 5, 1]:
    k = int(pct/100 * len(d_all))
    energy_kept = np.sum(d_all[idx_sorted[:k]]**2) / np.sum(d_all**2) * 100
    print(f"Top {pct}% coef. → {energy_kept:.1f}% da energia de detalhe")

Referência: Daubechies, Ten Lectures on Wavelets (1992), Cap. 1–5; Mallat, A Wavelet Tour of Signal Processing, Cap. 6–7.

To continue

Referências Bibliográficas

  • Daubechies, I. Ten Lectures on Wavelets. SIAM, 1992. (Obra fundamental — construção rigorosa de wavelets, MRA, Daubechies wavelets.) Referência principal.
  • Mallat, S. A Wavelet Tour of Signal Processing, 3ª ed. Academic Press, 2008. (Abordagem de processamento de sinais — MRA, DWT, banco de filtros, denoising.) Referência complementar essencial.
  • Meyer, Y. Wavelets and Operators. Cambridge Univ. Press, 1992. (Perspectiva de análise harmônica — frames, bases incondicionais.)
  • Donoho, D.L.; Johnstone, I.M. "Ideal Spatial Adaptation by Wavelet Shrinkage." Biometrika, 81(3):425–455, 1994. (Denoising ótimo — referência clássica.)
  • Strang, G.; Nguyen, T. Wavelets and Filter Banks. Wellesley-Cambridge Press, 1996. (Perspectiva de engenharia e álgebra linear.)
  • Chui, C.K. An Introduction to Wavelets. Academic Press, 1992. (Introdução acessível.)

Updated on 2026-05-28 · Author(s): Clube da Matemática

Found an error? Open an issue on GitHub or submit a PR — open source forever.