Table of Contents
- Média Móvel Exponencial, Wiener e Kalman aplicados ao RP2040
- 1. Introdução — Por que filtros são decisores disfarçados
- 1.1 O papel dos filtros na arquitetura embarcada moderna
- 1.2 Ordem crescente de complexidade (e poder)
- 1.3 Começando pelo mais importante: Média Móvel Exponencial (EMA)
- 1.4 Conceito intuitivo da EMA
- 1.5 EMA como filtro passa-baixa de primeira ordem
- 1.6 Implementação incremental em C (base do artigo)
- 1.7 Escolhendo o valor de α (engenharia, não tentativa)
- 1.8 Onde a EMA falha (e por quê)
- 2 — Filtro de Wiener: minimização do erro médio e separação sinal-ruído
- 2.1 A ideia central do Wiener (sem fórmulas intimidadoras)
- 2.2 Modelo estatístico assumido
- 2.3 Wiener no domínio da frequência (visão conceitual)
- 2.4 Por que isso é poderoso em sistemas embarcados?
- 2.5 Wiener simplificado para MCU (forma escalar)
- 2.6 Implementação incremental em C (forma prática)
- 2.7 Estimando variâncias em tempo real
- 2.8 Onde o Wiener falha (e quando não usar)
- 2.9 EMA vs. Wiener (comparação direta)
- 3 — Filtro de Kalman: estimação de estados, incerteza e predição
- 4 — Comparação prática entre EMA, Wiener e Kalman, diretrizes de escolha, encerramento e SEO
- 4.1 O que realmente diferencia esses filtros (além da matemática)
- 4.2 Comparação direta: quando cada filtro vence
- 4.3 Diretrizes práticas de escolha (engenharia de campo)
- 4.4 Conexão direta com os artigos anteriores da série
- 4.5 Um erro comum: tratar filtros como “pós-processamento”
- 4.6 Encerramento conceitual
Média Móvel Exponencial, Wiener e Kalman aplicados ao RP2040
1. Introdução — Por que filtros são decisores disfarçados
Ao longo desta série, trabalhamos com DSP embarcado aplicado, partindo do sinal bruto até decisões confiáveis em microcontroladores de recursos limitados. Em todos os artigos anteriores, um ponto ficou claro:
Nenhum sinal real é limpo.
Nenhuma decisão deve confiar em uma única amostra.
É exatamente nesse ponto que entram os filtros estatísticos.

Embora muitas vezes apresentados apenas como técnicas matemáticas, filtros como média móvel exponencial, Wiener e Kalman são, na prática, mecanismos de tomada de decisão temporal, capazes de separar:
- sinal de ruído,
- tendência de flutuação,
- informação de incerteza.
Neste artigo, vamos tratar esses filtros não como abstrações matemáticas, mas como ferramentas práticas de engenharia, aplicáveis diretamente a microcontroladores como o RP2040.
1.1 O papel dos filtros na arquitetura embarcada moderna
Em um sistema embarcado real, filtros aparecem em três papéis fundamentais:
- Suavização
- Reduz ruído de sensores
- Evita decisões instáveis
- Estimativa
- Inferir estados não diretamente observáveis
- Combinar modelo e medição
- Tomada de decisão
- Controlar histerese
- Definir quando um evento realmente ocorreu
Nos artigos anteriores, usamos:
- EMA implicitamente (suavização de score)
- Estatística para decisão adaptativa
Agora, vamos formalizar isso conscientemente.
1.2 Ordem crescente de complexidade (e poder)
Os filtros que abordaremos seguem uma progressão natural:
| Filtro | Ideia central | Custo | Uso típico |
|---|---|---|---|
| Média móvel exponencial | Suavizar passado | Muito baixo | Ruído rápido |
| Wiener | Minimizar erro médio | Médio | SNR conhecido |
| Kalman | Estimar estado oculto | Maior | Sistemas dinâmicos |
Importante:
👉 mais complexo não significa melhor.
Cada filtro resolve um tipo específico de problema.
1.3 Começando pelo mais importante: Média Móvel Exponencial (EMA)
A média móvel exponencial é, sem exagero, o filtro mais importante do firmware moderno.
Ela aparece em:
- sensores IoT,
- controle de ganhos,
- suavização de scores,
- debouncing avançado,
- aprendizado estatístico.
E, ainda assim, é frequentemente subestimada.
1.4 Conceito intuitivo da EMA
A EMA responde a uma pergunta simples:
Quanto do passado eu quero lembrar?
Ela combina:
- valor anterior filtrado
- nova amostra
Equação discreta:
\[
y[n] = y[n-1] + \alpha \big(x[n] – y[n-1]\big)
\]
Onde:
- \(x[n]\): amostra atual
- \(y[n]\): saída filtrada
- \(\alpha \in (0,1)\): taxa de resposta
Interpretação física:
- \(\alpha\) pequeno → memória longa
- \(\alpha\) grande → resposta rápida
1.5 EMA como filtro passa-baixa de primeira ordem
Embora simples, a EMA é um filtro IIR passa-baixa, com:
- 1 polo real
- estabilidade garantida
- custo O(1) por amostra
Ela elimina:
- ruído de alta frequência
- flutuações instantâneas
Sem introduzir:
- buffers grandes
- atrasos excessivos
1.6 Implementação incremental em C (base do artigo)
Começamos com a versão mais simples possível:
typedef struct {
float y;
} ema_filter_t;
static inline void ema_init(ema_filter_t *f, float y0)
{
f->y = y0;
}
static inline float ema_step(ema_filter_t *f, float x, float alpha)
{
f->y += alpha * (x - f->y);
return f->y;
}
Características:
- Nenhuma alocação dinâmica
- Uma multiplicação por amostra
- Ideal para ISR ou loop rápido
1.7 Escolhendo o valor de α (engenharia, não tentativa)
Uma regra prática muito usada em firmware:
| α | Comportamento |
|---|---|
| 0.01 | Muito suave, lento |
| 0.05 | Estável, robusto |
| 0.1 | Boa resposta |
| 0.3+ | Pouca filtragem |
Outra forma de pensar:
- EMA ≈ média móvel de \(N \approx \frac{2}{\alpha}\) amostras
Exemplo:
- α = 0.05 → ~40 amostras efetivas
1.8 Onde a EMA falha (e por quê)
Apesar de poderosa, a EMA tem limitações claras:
- Não modela dinâmica do sistema
- Não separa ruído de sinal estatisticamente
- Não incorpora incerteza
- Não prevê o futuro
Essas limitações nos levam naturalmente aos próximos filtros.