Continuação da série:
- Filtragem Digital, Cepstrum e Detecção Acústica em MCU
- Detecção de Assobio Humano com o Algoritmo de Goertzel no RP2040
Table of Contents
- 1. Introdução — Por que combinar Goertzel com aprendizado estatístico?
- 1.1 O papel do Goertzel nesta nova arquitetura
- 1.2 O que entendemos aqui por “aprendizado estatístico”
- 1.3 Por que limiares fixos falham em campo
- 1.4 Visão geral da nova arquitetura
- 1.5 O que você terá ao final deste artigo
- 2 — Do sinal ao vetor de características: extraindo features estatísticas a partir do Goertzel
- 2.1 Por que “features” são mais importantes que o algoritmo de decisão
- 2.2 O que NÃO usar como feature (e por quê)
- 2.3 Princípio fundamental: normalização e relações
- 2.4 Feature 1 — Energia normalizada da fundamental
- 2.5 Feature 2 — Relação do 2º harmônico
- 2.6 Feature 3 — Relação do 3º harmônico (opcional, mas valiosa)
- 2.7 Feature 4 — Estabilidade temporal da frequência
- 2.8 Montando o vetor de características
- 2.9 Feature engineering é engenharia, não tentativa
- 3 — Modelo estatístico adaptativo: média, variância e decisão probabilística (online, leve e interpretável)
- 3.1 Princípio do modelo: aprender o “normal” e medir desvio
- 3.2 Modelo estatístico por feature (independente)
- 3.3 Atualização online da média (EMA)
- 3.4 Atualização online da variância (forma estável)
- 3.5 Inicialização segura do modelo
- 3.6 Medida de desvio: Z-score por feature
- 3.7 Distância estatística simplificada (score global)
- 3.8 Regra de decisão probabilística simples
- 3.9 Aprendizado controlado (não aprender ruído)
- 3.10 O que conquistamos até aqui
- 4 — Integração completa em tempo real: Goertzel + features + modelo estatístico + LED no RP2040
- 4.1 Visão geral do fluxo em tempo real
- 4.2 Estruturas globais de estado
- 4.3 Construção do vetor de features em tempo real
- 4.4 Avaliação estatística e decisão
- 4.5 Atualização do modelo (aprendizado online controlado)
- 4.6 Acionamento do LED (sem lógica escondida)
- 4.7 Loop principal: simples, limpo e determinístico
- 4.8 O que temos agora (antes do código final)
- 5 — Código completo e funcional (Goertzel + aprendizado estatístico) para BitDogLab / RP2040
- 6 — Calibração prática, boas escolhas vs. más escolhas, comparação entre estratégias, encerramento e SEO
1. Introdução — Por que combinar Goertzel com aprendizado estatístico?
Nos dois artigos anteriores desta série, exploramos duas estratégias clássicas e complementares de processamento digital de sinais em microcontroladores:
- Séries de Taylor + Cepstrum → análise estrutural e harmônica do sinal
- Algoritmo de Goertzel → detecção espectral dirigida e altamente eficiente
Ambas funcionam muito bem, mas compartilham uma característica importante:
👉 a decisão final é baseada em limiares fixos.
Neste terceiro artigo, damos um passo conceitual além, mantendo o Goertzel como extrator de características espectrais, mas substituindo o decisor rígido por um modelo de aprendizado estatístico leve, adequado a MCUs como o RP2040.
O objetivo não é “colocar inteligência artificial por marketing”, mas sim responder a um problema real:
Como tornar a detecção mais robusta quando o ambiente muda, o usuário muda ou o ruído não é previsível?
1.1 O papel do Goertzel nesta nova arquitetura
É importante deixar claro desde o início:
- ❌ Goertzel não será substituído
- ❌ Não vamos rodar FFT gigante
- ❌ Não vamos usar redes neurais profundas
- ✅ Goertzel continua sendo o sensor espectral
Nesta arquitetura, o Goertzel atua como um extrator determinístico de características (features):
- Energia na frequência fundamental
- Relação entre harmônicos
- Estabilidade espectral ao longo do tempo
Esses valores passam a ser dados de entrada para um bloco estatístico que decide se o padrão observado se parece ou não com um assobio humano real.
1.2 O que entendemos aqui por “aprendizado estatístico”
Neste artigo, aprendizado estatístico não significa deep learning.
Vamos trabalhar com modelos:
- Interpretáveis
- Leves
- Computacionalmente previsíveis
- Treináveis com poucos dados
Exemplos que abordaremos ao longo do artigo:
- Média e variância adaptativas
- Distância estatística (z-score, Mahalanobis simplificada)
- Classificador linear simples
- Modelo incremental (online learning)
Tudo isso é:
- Executável em ponto flutuante simples
- Compatível com firmware bare-metal
- Determinístico em tempo real
1.3 Por que limiares fixos falham em campo
Nos artigos anteriores, usamos decisões do tipo:
score > S_ONscore < S_OFF
Isso funciona bem quando:
- O ambiente é estável
- O microfone é sempre o mesmo
- O usuário assobia sempre da mesma forma
Mas em campo real:
- Pessoas assobiam diferente
- Distância ao microfone muda
- Ruído de fundo varia
- Ganho analógico muda com temperatura e alimentação
Resultado:
👉 limiar bom hoje, ruim amanhã.
O aprendizado estatístico resolve exatamente isso:
- Ele aprende o padrão típico
- Ele tolera variações naturais
- Ele se adapta lentamente ao ambiente
1.4 Visão geral da nova arquitetura
A nova cadeia de processamento será:
ADC
└── DC-block
└── Frame (256 amostras)
└── Goertzel (fundamental + harmônicos)
└── Vetor de características
└── Modelo estatístico adaptativo
└── Decisão (assobio / não assobio)
└── LED / evento
Comparando com o artigo anterior:
| Artigo | Decisão |
|---|---|
| Taylor + Cepstrum | Limiar estrutural |
| Goertzel clássico | Score com limiar |
| Goertzel + Estatística | Classificação adaptativa |
1.5 O que você terá ao final deste artigo
Ao final deste terceiro artigo da série, você terá:
- Um detector de assobio adaptativo
- Baseado em Goertzel + estatística
- Código 100% em C
- Executando em tempo real no RP2040
- Sem dependência de bibliotecas externas
- Com arquitetura reutilizável para:
- Detecção de padrões acústicos
- Sensores inteligentes
- Interfaces por som
- Pré-processamento para tinyML
Mais importante:
👉 você entenderá como transformar DSP em dados e dados em decisão, de forma técnica.