Você está na página 1de 16

Nome: Plácido Capp Campos RA: 157024

Exercício 3 – Métodos de Identificação


Propondo os parâmetros do sistema:
4
• Função de transferência a ser identificada: 𝐺𝑢 = 𝑠2 +2𝑠+4
3𝑠+2200
• Filtro do ruído: 𝐺𝑟 = 𝑠2 +330𝑠+2200
• O ruído é branco e possui potência 0.05
• Para o sinal de entrada do problema foi utilizado uma entrada pseudorrandômica
com frequência 10 e tensões variando de 5 a -5.
O modelo utilizado para simulação no simulink segue os padrões estabelecidos nos slides:

Figura 1: Entradas e saídas do modelo no simulink

Figura 2: Submodelo do simulink


Figura 3: O sinal utilizado é o 3, ele contém frequência de 10, com picos em 5 e -5, e
duração de 200 segundos (para caso de aumentarmos o tempo de simulação)

a)
Para todos os métodos implementados a inicialização foi a mesma e segue abaixo:
clear all;
close all;
clc

%% Chama o problema no matlab

num=[3 2200];%Variável recebida pelo Simulink


den=[1 330 2200];%Variável recebida pelo Simulink
num1=[4];%Variável recebida pelo Simulink
den1=[1 2 4];%Variável recebida pelo Simulink
num2=[1];%Variável recebida pelo Simulink
den2=[1];%Variável recebida pelo Simulink

%Função de transferência a ser identificada


Gu=tf(conv(num1, num2), conv(den1, den2)) % Sistema Continuo a ser
Identificado

%Parâmetros do simulink
Tsim=90; % tempo total de simulação
Ts=0.07; % periodo de amostragem
pr1=0.05; % potencia do sinal gaussiano de faixa limitada
sim('SimulacaoSubsistem.slx')

% Obtendo valores de entrada e saida amostrados


tdisc=yout(:,1); % vetor do tempos utilizados pela rotina de
integração
tadi=[tdisc; tdisc(max(size(tdisc)))];
tatr=[0;tdisc];
ind=find(tadi>tatr);
tdisc=tdisc(ind); % vetor do tempos contendo amostras espaçadas de Ts

% definição dos sinais amostrados espaçados de Ts


udisc=yout(ind,2);
ydisc=yout(ind,3);

Os códigos foram baseados nos slides da disciplina, esse pedaço de código apenas
inicializa as variáveis para a simulação do simulink e em seguida recebe os valores da
simulação

Método da Convolução finita


Nesse método iremos utilizar os mínimos quadrados para minimizar a diferença dos
valores medidos para uma valor de Uh, em que U é uma matriz gerada pelas entradas do
sistema e h a nossa variável a ser estimada, então para achar uma solução nós truncaremos
a convolução em um valor J para poder calcular uma aproximação de h.
%% Método da Convolução finita

%%Pre-processamento dos dados (Nomalização)


udisc=udisc-mean(udisc);
ydisc=ydisc-mean(ydisc);

%Identifica a primeira amostra para a qual a entrada não é nula


tini=min(find(udisc(:,1)~=0));
tfin=max(size(tdisc)); % define o último valor de interesse da amostra

U=[]; % inicializa¸cao da matriz de entradas


J=60; % numero total de amostras a ser consideradas na
% identificação da resposta ao impulso (= J+1)
% ciclos de construção da matriz U a partir da definição das linhas
taux=tini;

while taux<=tfin && (taux-J)<1


U=[U; [udisc(taux:-1:1)' zeros(1,-taux+J+1)]];
taux=taux+1;
end

while taux<=tfin
U=[U; udisc(taux:-1:(taux-J))'];
taux=taux+1;
end

% gera a estimativa da resposta ao impulso


mask=tini:(taux-1);
h1=U\ydisc(mask);

figure, stem(0:Ts:(Ts*J),h1/Ts), hold on, impulse(Gu,'-r')


title('Método da convolução finita');

Com J = 60 obtive o resultado:


Figura 4: Método da Convolução finita
Podemos ver que o resultado se aproxima bastante do resultado real, poderemos melhorar
mais essa aproximação no final do exercício acertando alguns parâmetros, mas podemos
ver que os principais erros foram o pico mais alto ser pouco mais baixo que o real, o J
poderia ter sido maior para completar a curva h e ainda uma pequena quantidade de
medidas que foram para baixo no final de h quando na verdade elas deveriam tender a 0
pelo lado positivo do eixo y.

Método das Correlações


Nesse método iremos encontrar as funções de auto-correlação (a correlação da entrada
com ela mesma) e correlação cruzada (a entrada com a saída), dessa forma poderemos
obter uma conta analítica para calcular h. Note que h ainda será uma estimativa apenas
pelo fato de que as correlações serão estimadas e não as reais, se fosse possível conhecer
as correlações reais, conheceríamos o h real. O código utilizado está abaixo:
%% Método das Correlações

% Define uma estruta de dados com entradas u e saídas y


dat1 = iddata(ydisc,udisc,Ts);
datm1 = detrend(dat1,1); % Desloca a média para zero
set(datm1,'InputName','Entrada de acionamento','OutputName','Torque em
Nm');
J = 80;
R1 = covf(datm1,J+1); % Auto-covariância e covariâncias cruzadas
figure, plot(R1');
title('\fontsize{12} Funções de auto-correlação e correlação
cruzada');
legend('r_{yy}','r_{uy}','r_{yu}','r_{uu}');

Ruy1 = R1(2,:); % Função de correlação cruzada entre u e y


Ru1 = R1(4,:); % Função de autocorrelação de u
MRu1 = toeplitz(Ru1); % Produz a matriz de autocorrelação de u

h2 = MRu1\Ruy1'; % Estima a resposta ao impulso h1 com J+1 amostras

%Plote do resultado
figure;
stem(0:Ts:(Ts*J),h2/Ts), hold, impulse(Gu,'-r');
title('Método das covariâncias');

Podemos ver a estimativa das correlações:

Figura 5: Estimativa das correlações do sistema


E finalmente calculando h com base nessas correlações:
Figura 6: Estimativa de h pelo método das covariâncias
Percebemos que como antes os um erro é o maior pico, que acaba tendo menor amplitude
nas estimativas que no valor real, além disso alguns pequenos erros em alguns pontos mas
a tendência geral parece correta. Mais uma vez também precisamos de J maior para
estimar mais precisamente esse h.
c) Agora vamos trabalhar com as estimativas baseadas em conjuntos de funções
ortogonais, a ideia aqui será aproximar h pela soma de polos escolhidos a priori de tal
forma que a combinação deles deve gerar uma boa aproximação para o problema. Esses
métodos exigem que os sistemas sendo estimados sejam bem representados por funções
de transferência de grau pequeno, além disso Laguerre e Kautz se diferem apenas por que
Laguerre utiliza polos simples e Kautz polos complexos conjugados (de forma a manter
a ortogonalidade entre as funções). Perceba que a escolha de polos interfere
consideravelmente na solução obtida, então deve ser feita uma busca com alguns valores
diferentes se possível.
O código utilizado:
%% Método de Laguerre e Kautz

J = 60;

%FBO de Laguerre
p = 0.45; % valor do polo
N1 = 6; % número de elementos da base
[v1,h1] = funct_laguerre(N1,p,J,Ts);
% FBO de Kautz
sigma = 0.45; omega = 0.5; %valor do polo sigma + omega * i
N2 = 12; % número de elementos da base (6)
[v2,h2] = funct_kautz(N2,sigma,omega,J,Ts);

% Geração das matrizes Uf (matrizes de regressão)


Uf1 = []; Uf2 = [];

for j = 1 : N1
Uf1 = [Uf1 lsim(v1{j},udisc)]; % ciclo Laguerre
end
for j = 1 : N2
Uf2 = [Uf2 lsim(v2{j},udisc)]; % ciclo Kautz
end

% encontra a 1a. amostra não-nula da entrada


tini = find(udisc(:,1)~=0, 1 );
% elimina-se as 10 primeiras amostras de transitório
Uf1(1:(tini+10),:) = []; Uf2(1:(tini+10),:) = [];
ydisc(1:(tini+10),:) = [];
alfa1 = Uf1\ydisc; % coeficientes da FBO Laguerre
alfa2 = Uf2\ydisc; % coeficientes da FBO Kautz

% gera a resposta ao impulso


[h,t] = impulse(Gu,Ts*J);
% gera as estimativas
H = []; for j = 1 : N1, H = [H h1{j}]; end
hlague = H * alfa1; % estimativa de Laguerre

H = []; for j = 1 : N2, H = [H h2{j}]; end


hkautz = H * alfa2; % estimativa de Kautz

figure;
stem(0:Ts:(Ts*J),hlague), hold on, plot(t,h,'-r')
title('Método de Laguerre');
figure;
stem(0:Ts:(Ts*J),hkautz), hold on, plot(t,h,'-r')
% legend('Aprox. de Laguerre','Aprox. de Kautz');
title('Método de Kautz');

Utilizando polos 0.45 ± 0.5𝑗 para Kautz e 0.45 para Laguerre, obtive:
Figura 7: Método de Laguerre

Figura 8: Método de Kautz


Podemos notar que Kautz se baseia em polos conjugados, ou seja uma oscilação enquanto
Laguerre com polos simples apenas decai, como o sistema utilizado consiste de 2 polos
complexos conjugados seria esperada uma melhor aproximação por Kautz mas isso não
ocorre pois como mencionado a escolha do polo é muito importante, veremos a diferença
de uma escolha de polos mais adequada quando estivermos variando parâmetros. Na
prática como estaremos lidando com sistemas que oscilam ou não será razoavelmente
simples escolher qual dos dois se encaixa melhor. Ainda sim ambos tiveram soluções não
tão boas quanto os métodos da letra a, diferente de antes o valor do pico se torna mais
adequado que antes, entretanto as medidas após o 1 pico foram bem menos adequadas
pois em Laguerre o sistema decai a 0 e ignora as curvas finais de h enquanto Kautz está
com a frequência incorreta devido aos valores escolhidos para os polos.

d) Esse exercício foi feito ao mesmo tempo que se apresentavam os métodos.


e) Finalmente vamos variar alguns parâmetros e analisar as soluções, esperamos melhorar
as estimativas de h.

Método da Convolução finita


Nesse método temos apenas alguns parâmetros que podem ser variados, esses seriam J, o
sinal de entrada, o tempo de simulação e o tempo de amostragem.
Se ajustamos J = 90, obtemos uma resposta mais completa:

Figura 9: Ajuste de J = 90 para o método da convolução finita


Se aumentamos o tempo se simulação percebemos que não há melhora perceptível, isso
ocorre pois o tempo já está grande o suficiente para extrair informação do sistema:

Figura 10: Ajuste de Tempo de simulação = 180 para o método da convolução finita
Agora se variamos o sinal de entrada do problema podemos ver grandes variações:
Figura 11: Ajuste de frequência do sinal de entrada para 2 no método da convolução
finita
Figura 12: Ajuste de frequência do sinal de entrada para 30 no método da convolução
finita

Figura 13: Ajuste de frequência do sinal de entrada para 5 no método da convolução


finita
Podemos notar que variando a frequência do sinal de entrada teremos soluções mais
adequadas se a frequência gira em torno de 5, o problema do pico se corrige, entretanto
se a frequência de entrada cresce ainda mais a estimativa fica pior pois falha em estimar
os picos de h. Isso acontece provavelmente porque o sistema não responde a tempo se a
frequência for alta demais, isso limita as amplitudes da oscilação durante o experimento
e como consequência durante a estimação. Por último variei a amostragem:
Figura 14: Ajuste da amostragem para Ts = 0.01 e J = 7*90 no método da convolução
Podemos notar que se aumentamos a taxa de amostragem, obtemos valores muito
confusos e com bastante interferência do ruído, ainda sim a tendência da curva parece
mais correta que antes, então talvez filtrando esse sinal de h encontremos valores ainda
melhores para h.

Método das Correlações


Agora levando em conta o que percebemos que funciona anteriormente podemos
encontrar novos valores para o método das correlações:
Figura 15: Ajustando J = 90, a entrada para a frequência de 5 e tempo de simulação de
100 segundos, obtemos um resultado consideravelmente melhor para o método da
correlações
O método parece agora bem mais preciso, e muito parecido com o primeiro após as
melhorias, possivelmente também temos um resultado pouco melhor que o primeiro.

Métodos de Laguerre e Kautz


Variando para ambos os métodos o J para 90 assim como para os outros, e a entrada para
a frequência de 5, fiz uma varredura de valores para alguns polos diferentes e obtive:
Figura 16: Ajustando o polo para p = 0.6

Figura 16: Ajustando o polo para p = 0.6 ± 0.1


Podemos ver então o que foi comentado anteriormente, que a escolha do polo faz toda a
diferença, na prática poderemos aplicar esses métodos se por meio de outras medidas já
tivermos uma boa noção de onde estão os polos mais lentos do sistema ou se ficarmos
comparando diferentes valores de polos com os valores obtidos experimentalmente, mas
essa etapa de escolha e validação é muito importante e pode ser vista comparando os
resultados acima com os originais para os mesmos métodos.

Você também pode gostar