Table of Contents
- 1 — Motivação, Visão Geral do Problema e Arquitetura da Solução
- 2 — Características do Assobio Humano e Modelagem do Sinal
- 3 — Construção do Filtro Digital usando Séries de Taylor (Teoria + Primeira Implementação)
- 3.1 Ideia central: Taylor como operador espectral
- 3.2 Derivadas discretas (diferenças finitas)
- 3.3 Filtro passa-faixa baseado em Taylor (modelo)
- 3.4 Estrutura do código (incremental)
- 3.5 Implementação do filtro em C (primeira versão)
- 3.6 Integração inicial com o ADC (BitDogLab)
- 3.7 Primeiro loop funcional (sem cepstrum ainda)
- 3.8 Validação prática (o que observar)
- 4 — Cepstrum para detectar o assobio (conceito + coleta de frames + log via Taylor)
- 5 — FFT + log-magnitude (com Taylor) + IFFT ⇒ Cepstrum e detecção do assobio (já aciona LED)
- 5.1 Estruturas complexas e utilitários mínimos
- 5.2 FFT radix-2 iterativa (in-place) para N=256
- 5.3 Montando o espectro: |X[k]| e log(|X[k]|) usando ln_approx (Taylor)
- 5.4 Cepstrum: IFFT do log-magnitude e busca do pico de quefrência
- 5.5 Decisão e acionamento do LED com histerese
- 5.6 Integração com o que já temos: processar frame quando encher
- 5.7 O que você já consegue testar agora
- 6 — Robustez “de produção”: janela (Hann), gate de silêncio, suavização temporal e integração de periféricos no RP2040
- 6.1 Janela Hann (por que e como)
- 6.2 Gate de silêncio por energia RMS (para cortar falsos positivos)
- 6.3 Suavização temporal (EMA) do “peak” do cepstrum
- 6.4 Amostragem estável no RP2040 (sem “sleep torto”)
- 6.5 Inicialização do ADC e do LED (Pico SDK)
- 6.6 Inicialização “DSP”: twiddles, janela e buffers
- 6.7 Main “quase final”: timer coleta, loop processa frames
- 7 — Código completo e funcional (BitDogLab / RP2040) — filtro Taylor + cepstrum + LED
- 8 — Calibração prática, boas escolhas vs. más escolhas, encerramento e SEO
1 — Motivação, Visão Geral do Problema e Arquitetura da Solução
1.1 Motivação técnica
Assobios humanos possuem uma característica muito interessante do ponto de vista de processamento digital de sinais (DSP): eles apresentam uma frequência fundamental bem definida, normalmente entre 800 Hz e 3 kHz, acompanhada por harmônicas que decrescem em amplitude. Isso os torna excelentes candidatos para estudo de extração de pitch, separação espectral e detecção robusta de eventos acústicos em sistemas embarcados.
No contexto de microcontroladores como o RP2040, o desafio é duplo:
- Executar algoritmos matematicamente consistentes com baixo custo computacional.
- Evitar bibliotecas pesadas de DSP, favorecendo implementações determinísticas, explicáveis e portáveis.
Este artigo foi desenhado exatamente com esse espírito: mostrar que é possível construir um pipeline de detecção de assobio usando apenas matemática clássica, séries de Taylor e algoritmos fundamentais de DSP, sem FFTs complexas ou frameworks externos.

1.2 Problema a ser resolvido
O problema central pode ser descrito em três níveis:
- Separação espectral
O sinal do microfone contém:- Ruído ambiente
- Voz humana
- Sons impulsivos
- O assobio propriamente dito
- Identificação confiável do assobio
Apenas detectar energia em uma faixa de frequência não é suficiente, pois outros sons podem cair nessa banda.
Precisamos identificar periodicidade — aqui entra o cepstrum, que trabalha no domínio da quefrência. - Ação física
Após a detecção confiável:- Acender um LED quando um assobio é detectado
- Apagar o LED quando o assobio desaparece
Tudo isso deve funcionar em tempo real, em um RP2040, usando a BitDogLab como plataforma de referência.
1.3 Arquitetura geral do sistema
O pipeline completo que iremos construir ao longo do artigo é o seguinte:
Microfone (ADC)
↓
Pré-processamento (remoção de DC)
↓
Filtro Digital por Séries de Taylor
(separação da fundamental e harmônicas)
↓
Cálculo do Cepstrum
(log + autocorrelação simplificada)
↓
Detecção de Pitch (assobio)
↓
Controle do LED (GPIO)
Cada bloco será implementado incrementalmente, de forma que:
- O código compile e funcione a cada etapa
- Possamos validar o comportamento do sistema progressivamente
- Ao final, teremos um firmware completo, funcional e didático
1.4 Por que Séries de Taylor em filtros digitais?
Normalmente, filtros digitais são apresentados como:
- IIR (Butterworth, Chebyshev, etc.)
- FIR por convolução
- FFT + máscara espectral
Aqui escolhemos Séries de Taylor por três razões estratégicas:
- Controle matemático total
Um filtro baseado em Taylor é, na prática, uma aproximação explícita de operadores diferenciais, o que permite entender exatamente o que está sendo implementado. - Eficiência em microcontroladores
Séries truncadas resultam em:- Poucas multiplicações
- Nenhuma função transcendental cara em tempo real
- Valor didático elevado
Esse método conecta:- Cálculo diferencial
- Sistemas lineares
- DSP clássico
Em um único algoritmo executável em hardware real.
Mais adiante, mostraremos como aproximar respostas passa-faixa usando expansões de Taylor aplicadas a operadores discretos.
1.5 O papel do Cepstrum na detecção do assobio
Mesmo após filtrar o sinal, ainda temos um problema:
harmônicas também são periódicas, e ruídos podem enganar um detector simples.
O cepstrum resolve isso explorando uma ideia elegante:
A periodicidade no domínio do tempo vira um pico no domínio da quefrência.
Em termos práticos:
- Um assobio gera um pico claro no cepstrum
- Voz humana tende a gerar padrões mais espalhados
- Ruído branco praticamente não gera picos estáveis
Isso torna o cepstrum extremamente robusto para identificar assobios reais, mesmo em ambientes ruidosos.