Seja: y(t)=dtdu(t), sua aproximação numérica pode ser realizada simplesmente como:
y(t)=dtdu(t)≅Δtu[k]−u[k−1]
no nosso caso, Δt=T (período de amostragem).
A equação acima leva à:
Y(z)=TU(z)−z−1⋅U(z)⋅z1z1=T⋅zU(z)(⋅z−1)
ou:
U(z)Y(z)=T1⋅z(z−1)
que rende: zero em z=1 (e um pólo na origem em z=0).
No plano-z este controlador pode ser visualizado como:
O problema é que um ação derivativa pura leva à:
D(s)=s
que resulta no seguinte diagrama de Bode:
>> bode([10], 1)
Ou seja, repare que o ganho só aumenta (e tende à ∞) à medidade que a frequência aumenta (ou seja, onde está o ruído). Note também que esta última função transferência é irealizável.
Amplificador Derivador
Na prática, um circuito derivador puro se poderia tentar realizar através do seguinte circuito usando amplificador operacional:
Em frequencias baixas a impedância do capacitor é praticametne ∞ e então o ganho é mínimo (−∞). Mas à medida que a frequencia aumenta, Xc≈0 e então o ganho tende à +∞ e neste caso o amp.op. não funciona mais porque atura e entra em oscilação.
Note na eq. anteriror que o ruído ocorre na frequência da rede elétrica e corresponde à apenas 1% da amplitude do sinal esperado -- o que significa que a princípio ele é praticamente negligenciável (imperceptível) -- veja gráfico à seguir:
Um "zoom" sobre o sinal anterior permite visualizar o erro:
>> ezplot( 'sin(2*pi*t)+(1/100)*sin(2*pi*100*t)',[0.20.4] ) % zoom sobre o sinal anterior
>> grid
Note porém que derivada deste sinal rende:
y(t)=dtdx(t)=cos(2πt)+Derivada do Ruıˊdo1001⋅60⋅cos(2π60t)
Note agora que a amplitude do sinal derivado, amplificou (ressaltou) o ruído presente no sinal. A amplitudade do ruído que antes estava na faixa de 0,01 Vp agora passou para 0,6 Vp (ou seja, aumentou 60×).
Um "zoom" sobre a figura anterior permite "contemplar" melhor o efeito da derivada sobre um sinal ruidoso:
>> t=0.4:0.001:0.6; % zoom sobre a parte interessada
>> x=sin(2*pi.*t)+(1/100)*sin(2*pi*100.*t); % sinal + ruido
>> y=cos(2*pi.*t)+(60/100)*cos(2*pi*100.*t); % derivada do sinal com ruido
>> y2=cos(2*pi.*t); % derivada apenas do sinal esperado
>> figure;
>> plot(t,y,'b-', t,y2,'m--')
>> legend('d\dt Sinal com ruído', 'd/dt Sinal sem ruído')
Conforme esperado, o próprio diagrama de Bode um um derivador puro indica que a amplitude de sinais de alta frequência será elevada proporcionalmente à sua frequência.
Derivador Puro Numérico
Mesmo usando um algoritmo digital para implementar a derivada, resulta em:
y[k]≈Kd⋅Tx[k]−x[k−1]
onde Kd corresponderia ao ganho derivativo.
Simulando sobre o sinal anterior, resulta em:
T=8E-4; % período de amostragem - Note que 1/(20*60) = 0.0008333
t=0:T:1; % zoom sobre a parte interessada
x=sin(2*pi.*t)+(1/100)*sin(2*pi*100.*t); % sinal + ruido
y=cos(2*pi.*t)+(60/100)*cos(2*pi*100.*t); % derivada do sinal com ruido
y2=cos(2*pi.*t); % derivada apenas do sinal esperado% Simulando uma derivada numerica no vetor y3
u=length(t); % retorna qtdade de pontos do vetor t (amostras)
y3=zeros(1,u); % inicializando vetor da derivada numericafori = 2:u
y3(i) = ( x(i) - x(i-1) ) / T;
endfigure;
plot(t,y,'b-', t,y2,'m--', t,y3,'go-')
legend('d\dt Sinal com ruído', 'd/dt Sinal sem ruído',...
'Derivada Numerica')
Um "zoom" sobre a figura anterior rende:
O resultado está londe do esperado. E piora se considerarmos que sobre o resutlado do gráfico falta aplicar o ganho Derivativo Kd.Note a baixa precisão nesta aproximação numérica para uma derivada.
Solução: ?
Uso de Filtro Passa Baixas
Notamos que não é interessante derivar a parte de frequencias elevadas (ruído) de um sinal. Então a solução é aplicar um Filtro Passa Baixas, antes de derivar o sinal desejado.
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.
Na prática sugere-se τF<0,1⋅τmaˊx (ou seja, com frequencia de corte uma década abaixo); τmaˊx corresponde à constante de tempo dominante (maior) do sistema.
Note que o emprego de FPB numa malha de controle, inevitavelmente implica na introdução de um significativo atraso dinâmico (no tempo).
A função transferência do filtro seria:
G(jω)=τFjω+11
ou como s=jω:
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 os seguintes diagramas de Bode:
>> figure; bode(1, [11]); grid
Por exemplo:
>> 20*log10(0.1)
ans =
-20
>>
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.
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!
>> 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 soobre 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.
Problema Sugerido
Os 3 filtros anteriores poderiam ser aplicados sobre este tipo de sinal:
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.
Simular alguns casos:
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:
% Problema sugerido - controladores ação derivativa% 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