Gleam.br Wiki

Digital Processing and Compression | Governança

Documentação de engenharia e especificações técnicas da Gleam-BR.

The Scientist and Engineer's guide to Digital Signal Processing

https://www.dspguide.com/pdfbook.htm

Digital Processing and Compression

1. O Alicerce: Amostragem e Quantização

Tudo começa na ponte entre o analógico e o digital. O Teorema de Nyquist-Shannon é a sua "constituição" aqui.

  • *Teorema de Nyquist-Shannon:* Para reconstruir um sinal perfeitamente, a frequência de amostragem () deve ser pelo menos o dobro da maior frequência contida no sinal ().
  • *Aliasing:* Se você violar essa regra, frequências altas "se disfarçam" de frequências baixas, gerando artefatos irreversíveis. É o equivalente digital ao efeito de "rodas girando ao contrário" em filmes.
  • *Quantização:* Enquanto a amostragem discretiza o *tempo, a quantização discretiza a *amplitude*. Aqui entra a relação sinal-ruído (SNR), onde cada bit adicional de profundidade melhora a precisão em aproximadamente *6 dB**.

2. O Domínio da Frequência: A Transformada de Fourier

Se você entende o sinal apenas no domínio do tempo (como um arquivo .wav bruto), você está vendo apenas a superfície. A *Transformada Discreta de Fourier (DFT), e seu algoritmo otimizado *FFT (Fast Fourier Transform)**, são as ferramentas que decompõem um sinal em suas frequências constituintes.

  • *Conceito:* Qualquer sinal complexo pode ser representado como a soma de senos e cossenos de diferentes frequências.
  • *Aplicações em IA:* Em modelos de áudio modernos, raramente treinamos o modelo no sinal bruto. Utilizamos o *Espectrograma de Mel*, que é uma representação visual das frequências ao longo do tempo, mapeada para a percepção humana.

3. Técnicas de Compressão: Entropia e Redundância

Na compressão, dividimos o mundo em dois grandes grupos baseados na teoria da informação de Claude Shannon:

Lossless (Sem Perdas)

Baseia-se na redução da redundância estatística.

  • *Codificação de Huffman e LZW:* Algoritmos de dicionário e frequência.
  • *Aritmetica Coding:* Utilizada em padrões modernos como o CABAC (no H.264/H.265).

Lossy (Com Perdas)

Baseia-se na remoção de informação irrelevante para o sensor humano (psicoacústica ou psicovisual).

  • *Transformada Discreta de Cosseno (DCT):* É o coração do JPEG e MP3. Ela concentra a energia do sinal em poucos coeficientes, permitindo descartar as frequências que o olho ou ouvido humano não percebem.
  • *Quantização Vetorial:* Extremamente relevante para sua menção sobre "dados vetoriais". É a base para comprimir espaços latentes em redes neurais.

4. Referências Científicas e Livros de Cabeceira

Como você busca conteúdo consolidado, estes são os "padrões ouro":

  1. *Oppenheim, A. V., & Schafer, R. W. - "Discrete-Time Signal Processing":* O livro sagrado do DSP. Se você quer entender filtros digitais (FIR e IIR) e transformadas Z, este é o caminho.
  2. *Sayood, K. - "Introduction to Data Compression":* A referência mais completa sobre algoritmos de compressão, desde o básico até Wavelets e compressão de vídeo.
  3. *The Scientist and Engineer's Guide to Digital Signal Processing (Steven W. Smith):* Disponível online gratuitamente, é excelente para desenvolvedores, pois foca na aplicação prática sem perder o rigor.

Mãos a obra e entendendo o "Product Quantization"

O artigo *"Product Quantization for Nearest Neighbor Search" (PQ)* de Jégou, Douze e Schmid é um marco fundamental, pois faz a ponte exata entre o DSP clássico (quantização) e a infraestrutura moderna de bancos de dados vetoriais (como Pinecone, Milvus ou pgvector).

Para ler esse artigo com fluidez, precisamos traduzir os conceitos de processamento de sinais para a estrutura de dados. Em Gleam, isso se torna muito interessante devido à imutabilidade e ao foco em tipos, o que nos ajuda a manter a "lucidez" do sistema.

Abaixo, apresento um roteiro prático e uma implementação inicial de um *Filtro de Média Móvel (Low-pass Filter)* em Gleam para você se familiarizar com a manipulação de sinais.

1. Entendendo a Matemática para ler o Artigo de PQ

Antes do código, aqui está o "mapa mental" para o artigo:

  • *Vector Quantization (VQ):* No DSP, é o processo de mapear vetores de um espaço contínuo para um conjunto finito de vetores representativos (codebook).
  • *Product Quantization (PQ):* O "pulo do gato" do artigo é decompor um espaço vetorial de alta dimensão em subespaços menores (produtos cartesianos). Em vez de quantizar um vetor de 128 dimensões de uma vez, você o divide em 8 sub-vetores de 16 dimensões e quantiza cada um. Isso reduz drasticamente o custo computacional e de memória.

2. Prática em Gleam: O Filtro de Média Móvel

Este é o "Hello World" do DSP. Ele suaviza um sinal ruidoso, removendo altas frequências. Em sistemas sustentáveis, filtros eficientes são a primeira linha de defesa contra ruído de dados.

import gleam/list
import gleam/float
import gleam/io

pub type Signal =
  List(Float)

// Um filtro de média móvel simples
// Ele percorre o sinal e calcula a média dos 'n' vizinhos
pub fn moving_average(signal: Signal, window_size: Int) -> Signal {
  case window_size {
    w if w <= 0 -> signal
    _ -> {
      signal
      |> list.window(window_size)
      |> list.map(fn(window) {
        let sum = list.fold(window, 0.0, fn(acc, x) { acc +. x })
        sum /. int_to_float(window_size)
      })
    }
  }
}

// Helper para converter Int para Float (Gleam é rigoroso com tipos)
fn int_to_float(n: Int) -> Float {
  case n {
    0 -> 0.0
    _ -> float.from_int(n)
  }
}

pub fn main() {
  // Um sinal simulado com um "pico" de ruído (10.0)
  let noisy_signal = [1.0, 1.2, 1.1, 10.0, 1.3, 1.1, 1.2]

  let clean_signal = moving_average(noisy_signal, 3)

  io.print("Sinal Original: ")
  io.debug(noisy_signal)

  io.print("Sinal Filtrado (Suavizado): ")
  io.debug(clean_signal)
}

3. Roteiro de Estudo para "Destravar" o Artigo de PQ

Para dominar o artigo científico que você mencionou, sugiro seguir esta ordem de conceitos:

  1. *Distância Euclidiana (L2):* O artigo foca em encontrar vizinhos próximos. Em Gleam, tente implementar uma função que calcule a distância entre dois List(Float).
  2. *K-means Clustering:* O PQ usa o algoritmo K-means para gerar o codebook (o dicionário de vetores). Entender como o K-means agrupa dados é vital.
  3. *Decomposição de Espaço:* Estude como uma matriz grande pode ser fatiada em blocos menores sem perder a relação estatística global. É aqui que a "Arquitetura Sustentável" entra: processar blocos menores é energeticamente e computacionalmente mais eficiente.