Filtro Digital Exponencial


Filtro Passa Baixas

Em várias aplicações é necessário reduzir o impacto do ruído num sinal sendo processado, eliminando componentes de alta frequência (não previstas no espectro original do sinal):

A equação diferencial de um filtro passa-baixas (FPB) de 1a-ordem é dada por:

τFdy(t)dt+y(t)=x(t) \tau_F \cdot \dfrac{\text{d}y(t)}{\text{d}t} + y(t) = x(t)

onde τF\tau_F corresponde à constante de tempo do filtro. Então:

fc=12π  τF(Hz) f_c = \dfrac{1}{2\pi \; \tau_F} \quad \text{(Hz)}

Para τF<3\tau_F < 3 segundos, o filtro pode ser passivo, constituído por um simples circuito RC.

Filtro Passa-Baixas RC

Um simples filtro passa-baixas RC é mostrado na próxima figura:

Para este circuito:

fc=12π  R  C f_c = \dfrac{1}{2\pi \; R \; C}

A frequência do filtro deveria esta na faixa: ωmaˊx<ωF<ωN\omega_{\text{máx}} < \omega_F < \omega_N; onde: ωF=1/τF\omega_F=1 / \tau_F, ωmaˊx=1/τmaˊx\omega_{\text{máx}}=1/\tau_{\text{máx}} e onde τmaˊx\tau_{\text{máx}} corresponde a mair constante de tempo (a dominante) do processo e ωN\omega_N corresponde à frequência do ruído (rad/s). É esperado que ωF<ωN\omega_F < \omega_N.

Na prática sugere-se τF<0,1τmaˊx\tau_F < 0,1 \cdot \tau_{\text{máx}} (ou seja, a frequência de corte do filtro fique localizado uma década abaixo da freq. máxima permitida para o sinal de entrada); τmaˊx\tau_\text{máx} corresponde à constante de tempo dominante (maior) do sistema.

A função transferência do filtro seria:

G(jω)=1τF  jω+1 G(j\omega) = \dfrac{1}{\tau_F \; j \omega + 1}

Como s=jωs=j\omega, teremos:

G(s)=1τF  s+1 G(s)=\dfrac{1}{\tau_F \; s + 1}

A amplitude fica caracterizada por:

G(jω)=(1ω2  τF2+1)2+(ω  τFω2  τF2+1)2 |G(j\omega)|=\sqrt{ \left( \dfrac{1}{\omega^2 \; \tau_F^2 +1} \right)^2 + \left( \dfrac{-\omega \; \tau_F}{\omega^2 \; \tau_F^2+1}\right)^2}

G(jω)=(1+ω2  τF2)(ω2  τF2+1) |G(j\omega)|=\sqrt{ \dfrac{( 1+\omega^2\; \tau_F^2)}{(\omega^2 \; \tau_F^2+1 )} }

G(jω)=1ω2  τF2+1 |G(j\omega)|=\dfrac{1}{ \sqrt{\omega^2 \; \tau_F^2 + 1} }

e a fase é caracterizada por:

ϕ=G(jω)=tan1(ω  τF)=tan1(ω  τF) \phi=\angle{G(j\omega)}=\tan^{-1}{(-\omega \; \tau_F)} = - \tan^{-1}{(\omega \; \tau_F)}

Se τF=1,0\tau_F=1,0 (segundo), então: ωF=1/τF=1,0\omega_F = 1 / \tau_F = 1,0 (rad/s). A função transferência deste filtro ficaria como:

G(s)=1s+1 G(s)=\dfrac{1}{s+1}

O que rende o seguinte diagrama de Bode:

>> figure; bode(1, [1 1]); grid

Note que uma redução de 20dB (20-20 dB) corresponde a uma atenuação de 1/10=0,11/10=0,1 na amplitude original do sinal:

>> 20*log10(0.1)
ans =
   -20
>> 

Filtro Exponencial Digital

Seja um filtro do tipo:

Uma derivada numérica simples se consegue através de:

dy(t)dty[n]y[n1]Δt \dfrac{\text{d}y(t)}{\text{d}t} \approx \dfrac{y[n]-y[n-1]}{\Delta t}

Note que se aproxima da equação do filtro analógico de 1a-ordem:

τFdy(t)dt+y(t)=x(t) \tau_F \cdot \dfrac{\text{d}y(t)}{\text{d}t} + y(t) = x(t)

Que resultaria neste caso em:

τF(y[n]y[n1])Δt+y[n]=x[n] \tau_F \cdot \dfrac{(y[n]-y[n-1])}{\Delta t} + y[n] = x[n]

Trabalhando a equação anterior à fim de isolar y[n]y[n] (FPB sobre o sinal x[k]x[k]), teremos:

τF  y[n]ΔtτF  y[n1]Δt+y[n]=x[n]y[n](1+τFΔt)=x[n]+τF  y[n1]Δty[n]=x[n]11+τfΔt+τF  y[n1]Δt1+τFΔty[n]=x[n]11+Δt+τFΔt+τF  y[n1]ΔtΔt+τFΔty[n]=(ΔtτF+Δt)x[n]+(τFτF+Δt)y[n1] \begin{array}{rcl} \dfrac{\tau_F \; y[n]}{\Delta t} - \dfrac{\tau_F \; y[n-1]}{\Delta t} + y[n] & = & x[n] \\ & & \\ y[n] \left( 1+\dfrac{\tau_F}{\Delta t} \right) &=& x[n] + \dfrac{\tau_F \; y[n-1]}{\Delta t} \\ & & \\ y[n] & = & \dfrac{ \dfrac{x[n]}{1} }{ 1 + \dfrac{\tau_f}{\Delta t} } + \dfrac{ \dfrac{\tau_F \; y[n-1]}{\Delta t} }{ 1 + \dfrac{\tau_F}{\Delta t} }\\ & & \\ y[n] & = & \dfrac{ \dfrac{x[n]}{1} }{ 1 + \dfrac{\Delta t + \tau_F}{\Delta t} } + \dfrac{ \dfrac{\tau_F \; y[n-1]}{\Delta t} }{ \dfrac{\Delta t + \tau_F}{\Delta t}} \\ & & \\ y[n] & = & \left( \dfrac{\Delta t}{\tau_F + \Delta t} \right) \cdot x[n] + \left( \dfrac{\tau_F}{\tau_F + \Delta t} \right) \cdot y[n-1] \\ \end{array}

Podemos criar a variável α\alpha tal que:

α=ΔtτF+Δt=1τFΔt+1 \alpha = \dfrac{\Delta t}{\tau_F + \Delta t} = \dfrac{1}{ \dfrac{\tau_F}{\Delta t} + 1}

e então:

(1α)=11τFΔt+1=τFτF+Δt (1-\alpha) = 1 - \dfrac{1}{ \dfrac{\tau_F}{\Delta t} + 1 } = \dfrac{\tau_F}{\tau_F + \Delta t}

E assim chegamos a um formato mais simples de equação para o filtro digital exponencial de 1a-ordem:

y[n]=α  x[n]+(1α)  y[n1] y[n] = \alpha \; x[n] + (1 - \alpha) \; y[n-1]

onde: 0<α<10 < \alpha < 1. Tipicamente é empregado o valor α=0,1\alpha = 0,1.

Note que:
Se α=1\alpha = 1 \rightarrow não existe filtragem y[n]=x[n]\rightarrow \quad y[n] = x[n].
Se α=0\alpha = 0 \rightarrow Sinal original é ignorado y[n]=0\rightarrow \quad y[n] = 0.

Filtro exponencial duplo (ou de 2a-ordem)

Pode ser formado pelo cascateamento de 2 filtros de 1a-ordem:

Derivando as equações, teremos:

yˉ[n]=γ  y[n]+(1γ)  yˉ[n1]yˉ[n]=γ  α  x[n]+γ(1α)y[n1]+(1γ)  yˉ[n1]yˉ[n1]=γ  y[n1]+(1γ)  y[n2]y[n1]=1γ  yˉ[n1](1γ)γ  yˉ[n2]yˉ[n]=γ  α  x[n]+(2γα)  yˉ[n1](1α)(1γ)  yˉ[n2] \begin{array}{rcl} \bar{y}[n] & = & \gamma \; y[n] + (1 - \gamma) \; \bar{y}[n-1] \\ & & \\ \bar{y}[n] & = & \gamma \; \alpha \; x[n] + \gamma (1 - \alpha) y[n-1] + (1 - \gamma) \; \bar{y}[n-1] \\ & & \\ \bar{y}[n-1] & = & \gamma \; y[n-1] + (1 - \gamma) \; y[n-2] \\ & & \\ y[n-1] & = & \dfrac{1}{\gamma} \; \bar{y}[n-1] - \dfrac{(1 - \gamma)}{\gamma} \; \bar{y}[n-2]\\ & & \\ \bar{y}[n] & = & \gamma \; \alpha \; x[n] + (2 - \gamma - \alpha) \; \bar{y}[n-1] - (1-\alpha)(1-\gamma)\; \bar{y}[n-2] \end{array}

Se γ=α\gamma = \alpha, este filtro resulta em:

yˉ[n]=α2  x[n]+2(1α)  yˉ[n1](1α)2  yˉ[n2] \bar{y}[n] = \alpha^2 \; x[n] + 2(1-\alpha)\; \bar{y}[n-1] - (1-\alpha)^2 \; \bar{y}[n-2]

Note que existe uma vantagem deste filtro sobre o anterior de 1a-ordem: este filtro atenua mais fortemente ruídos de alta frequencia, especialmetne se γ=α\gamma = \alpha.

Este filtro resulta em algo semelhante à:

G(s)=1(s+1)2 G(s) = \dfrac{1}{(s+1)^2}

Cujo diagrama de Bode resulta:

>> figure; bode(1, conv( [1 1], [1 1] ) ); grid

Note: corte de 40 db/déc (uma atenuação de 1/1001/100 sobre o sinal de entrada)!

>> 20*log10(0.01/1)
ans =
   -40


Filtro de Média Móvel

Neste caso se aplica simplesmente a equação:

y[n]=1J  i=nJ+1nx[i] y[n] = \dfrac{1}{J} \; \sum_{i=n-J+1}^{n}{x[i]}

que representa a média dos últimos JJ pontos sobre o sinal de entrada x[n]x[n]

Esta equação pode ser reescrita como:

y[n1]=1J  i=nJn1x[i] y[n-1] = \dfrac{1}{J} \; \sum_{i=n-J}^{n-1}{}x[i]

mesclando as 2 últimas equações obtemos:

y[n]=y[n1]+1J  (x[n]x[nJ]) y[n] = y[n-1] + \dfrac{1}{J} \; \left( x[n] - x[n-J] \right) que resulta num comportamento semelhante à um filtro passa-baixas, servindo também para eliminar componentes (ruídos) de alto frequência.


Exemplo de Aplicação

Os 3 filtros anteriores poderiam ser aplicados sobre este tipo de sinal:

Trata-se de uma onda quadrada (sinal esperado) oscilando entre 0,0 e 1,0 Volts à frequência de f=1/3f=1/3, acompanhado de um ruído (senoide) oscilando na frequência de 9 Hz com amplitude de 0,25 Vp.

Segue simulação da aplicação de alguns filtros sobre este sinal:

Alguns resultados que poderiam ser obtidos:

Ref.: Process Dynamics and Control 4th Edição, por Dale E. Seborg (Author), Thomas F. Edgar (Author), Duncan A. Mellichamp (Author), Francis J. Doyle III (Author), Wiley; 4ª edição (13 setembro 2016), 512 páginas, ISBN-10: 1119285917, ISBN-13 : 978-1119285915.

Segue script adotado no MATLAB que gerou figura com ruido:

% Onda quadrada ruidosa
% Fernando Passold, 24/04/2018
T1=1/(0.05*60) % 1o-periodo de amostragem
T2=1/(0.1*60)   % 2o-periodo de amostragem
% Simulando os primeiros 2 ciclos de uma onda
% quadrada, f = 1/3 (Hz)
% amostrar este sinal 20 x f
disp('Onda quadrada oscilando à:')
f = 1/3
fs = 20*20;
T_square = 1/f;
T = 1/fs;
k=0:T:2*T_square;
u=length(k); % qtadade de amostras geradas
square=zeros(1, u);
for i=1:u
    t = k( i );    % calculando tempo real em segundos
    if ( t > T_square/2 )&&( t < T_square)
        square(1, i) = 1;
    end
    if ( t > (T_square + T_square/2) )&&( t < 2*T_square)
        square(1, i) = 1;
    end
end
% Sobrepondo a senoide (ruido) de 0,25 Vp, freq = 9 Hz
f_N = 9;
T_N = 1/f_N;
for i=1:u
    t = k( i );
    noise( i ) = 0.25*sin(2*pi*f_N*t);
    signal( i ) = square( i ) + noise( i );
end
plot(k, signal,'m-', k, square)
legend('Sinal com ruido','Sinal sem ruido')
grid

Fernando Passold, Abril/2018