Filtro Passa Baixas

Suponha que estamos querendo filtrar um ruído na faixa de 50 Hz presente no sinal desejado, uma senóide oscilando à 2 Hz. O sinal original de 2 Hz, oscila à 1 Vp, e o ruído oscila à 20% desta amplitude.

Suponha ainda que vamos amostrar o sinal à 1 KHz.

No Matlab, podemos simular este sinal sobreposto ao ruído fazendo:

E então obtemos:

FPB_Arduino_sinal_com_ruido

A idéia aqui é eliminar o ruído sobreposto ao sinal de 2 Hz.

Filtro:

Eq. do filtro passa-baixas no mundo contínuo (plano-s):

(eq.(1))

Necessitamos a função transferência no mundo discreto: , algo como:

Para então obter a eq. de diferenças, algo como:

o que neste caso pode se transfomar em algo como:

y[n]=0.969*y[n-1]+0.0155*x[n]+0.0155*x[n-1]

na eq. (1), "cutoff frequency" = freq. de corte (rad/s);

Se Hz, então: e:

No Matlab:

Transformar em depende da frequência de amostragem adotada, .

Se o sinal de entrada, for amostrado à KHz, o período de amostragem será:

segundos ou 1 ms (1 mili-segundo).

Para obter em função de podemos realizar uma transformação bi-linear, usando o método de Tustin que estabelece que:

Neste caso então:

Usando Matlab:

Pasando para o formato:

a fim de obter a eq. de diferenças tal como:

Note:

Neste caso, resulta em:

Ou finalmente, temos a eq. de diferenças:

Agora sim podemos criar um código para o Arduíno ser capaz de executar este filtro, FPB_Arduino.ino :

Este código gera na tela do "Monitor Serial" a sequência de valores calculados (pares e ):

E na tela do "Serial Plotter" deve surgir algo como:

FPB_Arduino2

Note que o sinal original é levemente atenuado e sofre um pequeno atraso (deslocamento de fase):

FPB_Arduino


Usando Python

Alguns dos cálculos anteriores podem ser feitos usando Python: Arduino_FPB.ipynb , ver abaixo:

Fim.


Referência: