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:
τF⋅dtdy(t)+y(t)=x(t)
onde τF corresponde à constante de tempo do filtro. Então:
fc=2πτF1(Hz)
Para τ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=2πRC1
A frequência do filtro deveria esta na faixa: ωmaˊx<ωF<ωN; onde: ωF=1/τF, ωmaˊx=1/τmaˊx e onde τmaˊx corresponde a mair constante de tempo (a dominante) do processo e ωN corresponde à frequência do ruído (rad/s). É esperado que ωF<ωN.
Na prática sugere-se τF<0,1⋅τmaˊ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 corresponde à constante de tempo dominante (maior) do sistema.
A função transferência do filtro seria:
G(jω)=τFjω+11
Como s=jω, teremos:
G(s)=τFs+11
A amplitude fica caracterizada por:
∣G(jω)∣=(ω2τF2+11)2+(ω2τF2+1−ωτF)2
∣G(jω)∣=(ω2τF2+1)(1+ω2τF2)
∣G(jω)∣=ω2τF2+11
e a fase é caracterizada por:
ϕ=∠G(jω)=tan−1(−ωτF)=−tan−1(ωτF)
Se τF=1,0 (segundo), então: ωF=1/τF=1,0 (rad/s). A função transferência deste filtro ficaria como:
G(s)=s+11
O que rende o seguinte diagrama de Bode:
>> figure; bode(1, [11]); grid
Note que uma redução de 20dB (−20 dB) corresponde a uma atenuação de 1/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:
dtdy(t)≈Δty[n]−y[n−1]
Note que se aproxima da equação do filtro analógico de 1a-ordem:
τF⋅dtdy(t)+y(t)=x(t)
Que resultaria neste caso em:
τF⋅Δt(y[n]−y[n−1])+y[n]=x[n]
Trabalhando a equação anterior à fim de isolar y[n] (FPB sobre o sinal x[k]), teremos:
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 γ=α.
Este filtro resulta em algo semelhante à:
G(s)=(s+1)21
Cujo diagrama de Bode resulta:
>> figure; bode(1, conv( [11], [11] ) ); grid
Note: corte de 40 db/déc (uma atenuação de 1/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]=J1∑i=n−J+1nx[i]
que representa a média dos últimos J pontos sobre o sinal de entrada x[n]
Esta equação pode ser reescrita como:
y[n−1]=J1∑i=n−Jn−1x[i]
mesclando as 2 últimas equações obtemos:
y[n]=y[n−1]+J1(x[n]−x[n−J])
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/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:
Filtro analógico de 1a-ordem com τF=0,1 minutos;
Filtro analógico de 1a-ordem com τF=0,4 minutos;
Filtro digital exponencial de 1a-ordem com τF=0,1 minutos; e usando período de amostragem T=0,05 minutos;
Filtro digital exponencial de 1a-ordem com τF=0,1 minutos; e usando período de amostragem T=0,1 minutos;
Filtro de média móvel com J=3 (ainda se deve perceber ruído);
Filtro de média móvel com J=7 (o ruído praticamente some).
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 fdisp('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);
fori=1:u
t = k( i ); % calculando tempo real em segundosif ( t > T_square/2 )&&( t < T_square)
square(1, i) = 1;
endif ( t > (T_square + T_square/2) )&&( t < 2*T_square)
square(1, i) = 1;
endend% Sobrepondo a senoide (ruido) de 0,25 Vp, freq = 9 Hz
f_N = 9;
T_N = 1/f_N;
fori=1:u
t = k( i );
noise( i ) = 0.25*sin(2*pi*f_N*t);
signal( i ) = square( i ) + noise( i );
endplot(k, signal,'m-', k, square)
legend('Sinal com ruido','Sinal sem ruido')
grid