Você está na página 1de 4

% Identificao de Sistemas

% Trabalho 1 - Parte 3

% Aluno: Fbio Oliveira de Paula


% Matricula: 201626154
%% PARTE 3. Identificao de Modelos Discretos
clc;
clear all;
close all;

dadosPRBS = load('saidaPRBS.txt');

figure('position', [0, 0, 500, 250])


plot(dadosPRBS(:,1),dadosPRBS(:,3),'k')
title('Entrada PRBS')
xlabel('Tempo [s]')
ylabel('Amplitude [V]')
grid on
saveas(1,'26. Saida PRBS.png')

% 1. Modelo discreto no tempo ARX, com entrada PRB

% 1.a. Funao de Auto Correlao


% Obs.: primeiro minimo deve estar entre 10 e 20 segundos
figure('position', [0, 0, 500, 250])
autocorr(dadosPRBS(:,3),30);
title('Auto Correlao');
grid on
saveas(2,'27. Funo de Auto Correlao.png')

% 1. b. Funo de Correlao Cruzada


figure('position', [0, 0, 500, 250])
crosscorr(dadosPRBS(:,2),dadosPRBS(:,3),30);
title('Correlao Cruzada');
grid on
saveas(3,'28. Funo de Correlao Cruzada.png')

% 1.c. Resposta ao impulso do sistema utilizando a equao de Wiener-Hopf


Ruu = autocorr(dadosPRBS(:,2),size(dadosPRBS,1)-1)*var(dadosPRBS(:,2));
Ruy = crosscorr(dadosPRBS(:,2),dadosPRBS(:,3),size(dadosPRBS,1)-1);
Ruu = toeplitz(Ruu);
Imp = inv(Ruu)*Ruy(size(dadosPRBS,1):end);

figure('position', [0, 0, 500, 250])


plot(Imp(1:30),'ro--')
title('Resposta ao Impulso por Wiener-Hopf');
xlabel('Tempo [s]')
ylabel('Amplitude [V]')
grid on
saveas(4,'29. Resposta ao Impulso pela equao de Wiener-Hopf.png')

% d. Critrio de Akaike:
U = dadosPRBS(:,2); % entrada
Y = dadosPRBS(:,3); % saida

% Com 2 parmetros
for i= 2:length(Y)
Fi2(i-1,:) = [Y(i-1) U(i-1)];
end
Teta2 = pinv(Fi2)*Y(2:end);
Er = Y(2:end) - Fi2*Teta2; % vetor de resduos
Aic(1) = length(Y)*log(var(Er).^2) + 2*2;

% Com 3 parmetros
for i= 3:length(Y)
Fi3(i-2,:) = [Y(i-1) Y(i-2) U(i-1)];
end

Teta3 = pinv(Fi3)*Y(3:end);
Er = Y(3:end) - Fi3*Teta3;
Aic(2) = length(Y)*log(var(Er).^2) +2*3;

% Com 4 parmetros
for i= 3:length(Y)
Fi4(i-2,:) = [Y(i-1) Y(i-2) U(i-1) U(i-2)];
end

Teta4 = pinv(Fi4)*Y(3:end);
Er = Y(3:end) - Fi4*Teta4;
Aic(3) = length(Y)*log(var(Er).^2) +2*4;

% Com 5 parmetros
for i= 4:length(Y)
Fi5(i-3,:) = [Y(i-1) Y(i-2) Y(i-3) U(i-1) U(i-2)];
end

Teta5 = pinv(Fi5)*Y(4:end);
Er = Y(4:end) - Fi5*Teta5;
Aic(4) = length(Y)*log(var(Er).^2) +2*5;

% Com 6 parmetros
for i= 4:length(Y)
Fi6(i-3,:) = [Y(i-1) Y(i-2) Y(i-3) U(i-1) U(i-2) U(i-3)];
end

Teta6 = pinv(Fi6)*Y(4:end);
Er = Y(4:end) - Fi6*Teta6;
Aic(5) = length(Y)*log(var(Er).^2) +2*6;

% Com 7 parmetros
for i= 5:length(Y)
Fi7(i-4,:) = [Y(i-1) Y(i-2) Y(i-3) Y(i-4) U(i-1) U(i-2) U(i-3)];
end

Teta7 = pinv(Fi7)*Y(5:end);
Er = Y(5:end) - Fi7*Teta7;
Aic(6) = length(Y)*log(var(Er).^2) +2*7;

% Com 8 parmetros
for i= 5:length(Y)
Fi8(i-4,:) = [Y(i-1) Y(i-2) Y(i-3) Y(i-4) U(i-1) U(i-2) U(i-3) U(i-4)];
end

Teta8 = pinv(Fi8)*Y(5:end);
Er = Y(5:end) - Fi8*Teta8;
Aic(7) = length(Y)*log(var(Er).^2) + 2*8;
% Com 9 parmetros
for i= 6:length(Y)
Fi9(i-5,:) = [Y(i-1) Y(i-2) Y(i-3) Y(i-4) Y(i-5) U(i-1) U(i-2) U(i-3) U(i-4)];
end

Teta9 = pinv(Fi9)*Y(6:end);
Er = Y(6:end) - Fi9*Teta9;
Aic(8) = length(Y)*log(var(Er).^2) + 2*9;

% Com 10 parmetros
for i= 6:length(Y)
Fi10(i-5,:) = [Y(i-1) Y(i-2) Y(i-3) Y(i-4) Y(i-5) U(i-1) U(i-2) U(i-3) U(i-4)
U(i-5)];
end

Teta10 = pinv(Fi10)*Y(6:end);
Er = Y(6:end) - Fi10*Teta10;
Aic(9) = length(Y)*log(var(Er).^2) + 2*10;

% Plotando o grfico do Akaike


figure('position', [0, 0, 500, 250])
plot([2 3 4 5 6 7 8 9 10],Aic,'r','linewidth',2);
title('Critrio de Akaike');
xlabel('Nmero de Parmetros');
ylabel('AIC');
grid on
saveas(5,'30. Critrio de Akaike.png')

Y4 = zeros(1,length(Y));

% Gera conjunto de restries


for i=3:length(Y)
Y4(i) = Teta4(1)*Y4(i-1)+Teta4(2)*Y4(i-2)+Teta4(3)*U(i-1)+Teta4(4)*U(i-2);
end

figure('position', [0, 0, 500, 250])


plot(Y,'k');
hold on
plot(Y4','r');
%plot(yS','b');
title('Resposta do modelo estimado pelo Mtodo dos Mnimos Quadrados');
legend('Sinal original','Modelo estimado',4, 'Location','southeast');
xlabel('Tempo [s]')
ylabel('Amplitude [V]')
grid on
saveas(6,'31. Resposta do modelo estimado pelo Mtodo dos MQ.png')

MSE_MMQ = mean((Y-Y4').^2)

%% 2. Mnimos Quadrados Estendidos - ARMAX

% Passo 1)
% Pressupe estrutura do modelo j escolhida e os dados de entrada selecionados

U = dadosPRBS(:,2); % entrada
Y = dadosPRBS(:,3); % saida
N = 50; % numero de iteraes
N = 10; % numero de iteraes

% Com 4 parmetros - definido pelo Critrio de Akaike


for i= 4:length(Y)
Fi(i-3,:) = [Y(i-1) Y(i-2) U(i-3) U(i-1) U(i-2)];
end

teta = pinv(Fi)*U(4:end);
Er = U(4:end) - (Fi*teta);

[linEr,~]=size(Er);

for k = 1:linEr
if k==1
Fie(k,:) = [Fi(k,:) 0];
else
Fie(k,:) = [Fi(k,:) Er(k-1)];
end
end

for i = 1:N
teta = pinv(Fie)*Y(4:end);
Er = Y(4:end) - (Fie*teta); % Vetor de resduos
for k = 1:linEr
if k==1
Fie(k,:) = [Fi(k,:) 0];
else
Fie(k,:) = [Fi(k,:) Er(k-1)];
end
end
erro(i) = mean(Er.^2);
end

figure('position', [0, 0, 500, 250])


plot(Y,'k');
hold on
plot(Fie*teta,'r');
title('Resposta do modelo estimado pelo Mtodo dos MQ Estendido');
legend('Sinal original','Modelo estimado',4, 'Location','southeast');
xlabel('Tempo [s]')
ylabel('Amplitude [V]')
grid on
saveas(7,'32. Resposta do modelo estimado pelo Mtodo dos MQ Estendido.png')

figure('position', [0, 0, 500, 250])


plot(erro);
title('Evoluo do Erro ao longo das iteraes');
xlabel('Iteraes')
ylabel('Erro')
grid on
saveas(8,'33. Evoluo do Erro ao longo das iteraes.png')

Você também pode gostar