2 — Filtro de Wiener: minimização do erro médio e separação sinal-ruído
Se a EMA responde à pergunta “quanto do passado eu devo lembrar?”, o Filtro de Wiener responde a outra, mais ambiciosa:
Como estimar o sinal verdadeiro quando conheço (ou estimo) o ruído?
Aqui saímos da suavização empírica e entramos em otimalidade estatística — ainda mantendo o foco em implementações viáveis em MCU.
2.1 A ideia central do Wiener (sem fórmulas intimidadoras)
O Filtro de Wiener é construído sobre um princípio simples:
Escolher o filtro que minimiza o erro quadrático médio (MSE)
entre o sinal estimado e o sinal real.
Em termos práticos, isso significa:
- Se o ruído domina certas frequências → atenuá-las mais
- Se o sinal domina outras frequências → preservá-las
Ao contrário da EMA:
- ❌ Não trata todas as frequências igualmente
- ✅ Usa informação estatística do sinal e do ruído
2.2 Modelo estatístico assumido
O Wiener parte de um modelo clássico:
\[
x[n] = s[n] + v[n]
\]
Onde:
- \(x[n]\): sinal medido
- \(s[n]\): sinal verdadeiro (desconhecido)
- \(v[n]\): ruído (estatisticamente caracterizável)
Hipóteses (importantes):
- \(s[n]) e (v[n]\) são não correlacionados
- O ruído tem estatística conhecida ou estimável
- O objetivo é minimizar o erro médio quadrático
Essas hipóteses já nos dizem algo importante:
👉 Wiener não é universal — ele funciona muito bem quando o ruído é previsível.
2.3 Wiener no domínio da frequência (visão conceitual)
No domínio da frequência, o filtro de Wiener tem a forma:
\[
H(f) = \frac{S_{ss}(f)}{S_{ss}(f) + S_{vv}(f)}
\]
Onde:
- \(S_{ss}(f)\): densidade espectral do sinal
- \(S_{vv}(f)\): densidade espectral do ruído
Interpretação direta:
- Se \(S_{vv}(f) \gg S_{ss}(f)) → (H(f) \approx 0\)
- Se \(S_{ss}(f) \gg S_{vv}(f)) → (H(f) \approx 1\)
Ou seja:
o filtro decide quanto confiar em cada frequência.
2.4 Por que isso é poderoso em sistemas embarcados?
Em muitos sistemas reais:
- O ruído é conhecido (sensor, ADC, ambiente)
- O sinal de interesse ocupa bandas específicas
Exemplos:
- Microfone com ruído branco dominante
- Sensor analógico com ruído térmico
- Leituras de corrente com ripple conhecido
- Sinais acústicos com banda estreita
Nesses casos, Wiener supera facilmente:
- EMA
- médias móveis simples
- limiares fixos
2.5 Wiener simplificado para MCU (forma escalar)
Para firmware embarcado, não usamos FFT gigante.
Usamos uma forma escalar simplificada, baseada em variâncias:
\[
\hat{s}[n] = \frac{\sigma_s^2}{\sigma_s^2 + \sigma_v^2} ; x[n]
\]
Onde:
- \(\sigma_s^2\): variância estimada do sinal
- \(\sigma_v^2\): variância estimada do ruído
Esse fator:
\[
K = \frac{\sigma_s^2}{\sigma_s^2 + \sigma_v^2}
\]
atua como um ganho adaptativo ótimo.
2.6 Implementação incremental em C (forma prática)
Vamos definir uma estrutura simples:
typedef struct {
float var_signal;
float var_noise;
} wiener_filter_t;
Inicialização típica:
static inline void wiener_init(wiener_filter_t *w,
float var_signal,
float var_noise)
{
w->var_signal = var_signal;
w->var_noise = var_noise;
}
Passo de filtragem:
static inline float wiener_step(wiener_filter_t *w, float x)
{
float K = w->var_signal / (w->var_signal + w->var_noise);
return K * x;
}
Simples, previsível e eficiente.
2.7 Estimando variâncias em tempo real
Em firmware real, variâncias podem ser estimadas com EMA:
static inline void update_variance(float *var, float x, float mean, float alpha)
{
float d = x - mean;
*var += alpha * (d*d - *var);
}
Estratégia comum:
- Ruído: estimar durante silêncio
- Sinal: estimar durante evento válido
Essa separação é crucial para o Wiener funcionar bem.
2.8 Onde o Wiener falha (e quando não usar)
Apesar de ótimo, o Wiener tem limitações claras:
- Requer estimativa confiável do ruído
- Assume estacionariedade
- Não modela dinâmica temporal
- Não prevê estados futuros
Se:
- o ruído muda rápido,
- o sistema tem dinâmica própria,
- ou o estado não é diretamente observável,
então precisamos ir além.
👉 É aqui que entra o Filtro de Kalman.
2.9 EMA vs. Wiener (comparação direta)
| Aspecto | EMA | Wiener |
|---|---|---|
| Complexidade | Muito baixa | Baixa |
| Modelo estatístico | Implícito | Explícito |
| Conhecimento do ruído | Não | Sim |
| Otimalidade | Heurística | MSE mínimo |
| Uso típico | Suavização | Separação sinal-ruído |