Você está na página 1de 21

Controle de processos industriais - 2023/2

Nome: Alan Wiener, Lucas Santana, Weverson Meireles

Trabalho 3: Identificação de sistemas

Para essas atividade, use as notas de aula e suas referências. Também use o documento com os comandos
básicos do MATLAB, disponibilizados junto com o Trabalho 1.

IMPORTANTE: sempre use o commando figure antes do plot, para evitar plotar um gráfico em uma figura
anterior.

I=1;
[dat1,dat2,dat2_test,dat4,dat5,dat5_test] = init_t3(I);
datetime('now')

ans = datetime
14-Oct-2023 07:11:28

1. Comandos úteis para identificação de sistemas

1.1 Definição de sistemas e sinais:

g=tf(5,[1 6 5]); definição de uma função de transferência

Ts=0.1; escolha do tempo de amostragem;

gd=c2d(g,Ts); discretização de g(s) com tempo de amostragem Ts

u0=ones(100,1);u=[u0;u0+2;u0+4;u0+3;u0]; gera uma sequência de degraus usados como entrada para


simular o comportamento do sistema

t=(0:1:(length(u)-1))*Ts; gera um vetor tempo t com tamanho igual a entrada u, e com intervalo de tempo igual a
Ts

y=lsim(g,u,t); simula g para uma entrada u

dat=iddata(y,u,Ts); cria um objeto de dados que encapsula os dados de entrada e saída e o tempo de
amostragem Ts.

1.2 Identificação de sistemas

m=arx(dat,[na nb nk]); Computa a estimativa de mínimos quadrados para modelos arx.

m=armax(dat,[na nb nc nk]); Computa a estimativa de mínimos quadrados para modelos armax.

1
m=oe(dat,[nb nf nk]); Computa a estimativa de mínimos quadrados para modelos oe.

m=bj(dat,[nb nc nd nf nk]); Computa a estimativa de mínimos quadrados para modelos bj.

m.Report.Fit.FitPercent ; fit do modelo m

1.3 Validação do modelo

compare(dat,m); compara a resposta do sistema do modelo m em relação aos dados medidos

compare(dat,m1,m2,m3); compara os modelos m1,m2,m3 usando os dados em dat.

resid(dat,m); computa e testa os resíduos associados ao modelo identificado m usando os dados em dat

step(m); para testar o modelo m com um degrau

Os testes ocorrem em malha aberta e em malha fechada.

Testes em malha aberta: degraus são aplicados em e coletados em sem o uso do controlador .

Testes em malha fechada: Mudanças de referência em degrau são aplicados em , enquanto e


são coletados.

O sinal não é usado nesses testes.

Para identificação de sistemas em malha aberta e malha fechada, são os sinais para serem usados
nesse trabalho.

Below is an overview of the data collected in the open loop tests that will be used.

load('datama2000.mat')
figure;
plot(data);

2
In this case, the input (u1) PWM signal varies in steps, from 80 to 95, while the motor speed (y1) varies from
2000 to 2300RPM approximately.

Abaixo, tem-se um panorama geral dos dados coletados em um teste de malha fechada. Eles serão
utilizados nesse trabalho.

load('datamf2000.mat')
figure;
subplot(211);plot([Y R]);title('Reference and output
');legend('Y(z)','R(z)','Location','southeast')
subplot(212);plot(U);title('Control signal applied by a PI
controller');legend('U(z)','Location','southeast')
xlabel('Time(seconds)');

3
Atividade 1: Identificação de modelos utilizando dados simulados

1.1 Obtenha e valide os modelos: arx, armax, oe, bj para o conjunto de dados dat1. Use a mesma ordem do
modelo para todos os modelos e compare o fit.

dat1=init_t3(1);
figure;
plot(dat1);

4
% coloque aqui os comandos para estimar e comparar os modelos
na=2

na = 2

nb=2

nb = 2

nk=1

nk = 1

nc=1

nc = 1

nf=2

nf = 2

nd=1

nd = 1

arx_model= arx(dat1,[na nb nk])

arx_model =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
A(z) = 1 - 0.5738 z^-1 - 0.3832 z^-2

5
B(z) = 0.00601 z^-1 + 0.08227 z^-2

Sample time: 0.1 seconds

Parameterization:
Polynomial orders: na=2 nb=2 nk=1
Number of free coefficients: 4
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using ARX on time domain data "dat1".
Fit to estimation data: 97.05% (prediction focus)
FPE: 0.005301, MSE: 0.005144

Model Properties

armax_model = armax(dat1,[na nb nc nk])

armax_model =
Discrete-time ARMAX model: A(z)y(t) = B(z)u(t) + C(z)e(t)
A(z) = 1 - 1.366 z^-1 + 0.3873 z^-2

B(z) = -0.05505 z^-1 + 0.09872 z^-2

C(z) = 1 - 0.8563 z^-1

Sample time: 0.1 seconds

Parameterization:
Polynomial orders: na=2 nb=2 nc=1 nk=1
Number of free coefficients: 5
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using ARMAX on time domain data "dat1".
Fit to estimation data: 97.23% (prediction focus)
FPE: 0.004675, MSE: 0.00456

Model Properties

oe_model = oe(dat1,[nb nf nk])

oe_model =
Discrete-time OE model: y(t) = [B(z)/F(z)]u(t) + e(t)
B(z) = 0.05164 z^-1 + 0.05144 z^-2

F(z) = 1 + 0.03023 z^-1 - 0.9698 z^-2

Sample time: 0.1 seconds

Parameterization:
Polynomial orders: nb=2 nf=2 nk=1
Number of free coefficients: 4
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using OE on time domain data "dat1".
Fit to estimation data: 63.15%
FPE: 0.8206, MSE: 0.8043

Model Properties

6
bj_model = bj(dat1,[nb nc nd nf nk])

bj_model =
Discrete-time BJ model: y(t) = [B(z)/F(z)]u(t) + [C(z)/D(z)]e(t)
B(z) = 0.004345 z^-1 + 0.01111 z^-2

C(z) = 1 - 0.9001 z^-1

D(z) = 1 - 0.9994 z^-1

F(z) = 1 - 1.771 z^-1 + 0.779 z^-2

Sample time: 0.1 seconds

Parameterization:
Polynomial orders: nb=2 nc=1 nd=1 nf=2 nk=1
Number of free coefficients: 6
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using BJ on time domain data "dat1".
Fit to estimation data: 97.52% (prediction focus)
FPE: 0.003758, MSE: 0.003647

Model Properties

dat1_val = dat1

dat1_val =

Time domain data set with 400 samples.


Sample time: 0.1 seconds

Outputs Unit (if specified)


y1

Inputs Unit (if specified)


u1

arx_val_output = sim(arx_model, dat1_val.u)

arx_val_output = 400×1
0
0.0060
0.0917
0.1432
0.2056
0.2612
0.3170
0.3702
0.4222
0.4724

armax_val_output = sim(armax_model, dat1_val.u)

armax_val_output = 400×1
0

7
-0.0550
-0.0315
0.0219
0.0858
0.1524
0.2186
0.2832
0.3459
0.4064

oe_val_output = sim(oe_model, dat1_val.u)

oe_val_output = 400×1
0
0.0516
0.1015
0.1501
0.1970
0.2427
0.2868
0.3298
0.3712
0.4117

bj_val_output = sim(bj_model, dat1_val.u)

bj_val_output = 400×1
0
0.0043
0.0232
0.0531
0.0914
0.1361
0.1853
0.2376
0.2920
0.3476

mse_arx = mean((dat1_val.y - arx_val_output).^2)

mse_arx = 0.0274

mse_armax = mean((dat1_val.y - armax_val_output).^2)

mse_armax = 0.0088

mse_oe = mean((dat1_val.y - oe_val_output).^2)

mse_oe = 0.8043

mse_bj = mean((dat1_val.y - bj_val_output).^2)

mse_bj = 0.0117

fprintf('MSE ARX: %.4f\n', mse_arx)

8
MSE ARX: 0.0274

fprintf('MSE ARMAX: %.4f\n', mse_armax)

MSE ARMAX: 0.0088

fprintf('MSE OE: %.4f\n', mse_oe)

MSE OE: 0.8043

fprintf('MSE BJ: %.4f\n', mse_bj)

MSE BJ: 0.0117

Atividade 2: Identificação de modelos para um motor DC

A entrada é um sinal PWM que varia de 0 a 255 (sinal PWM de 8 bits). A saída é a velocidade de rotação do
motor, em RPM (0-4000).

O objeto dat2 contém os dados do teste aplicado nesse motor.

2.1 Use os dados contidos em dat2 para obter um modelo utilizando a função arx e também a função procest,
comparando os resultados utilizando o comando compare.

% coloque aqui os comandos para estimar e comparar os modelos


arx_ordem = [2 1 3]

arx_ordem = 1×3
2 1 3

arx_modelo = arx(dat2, arx_ordem)

arx_modelo =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
A(z) = 1 - 0.936 z^-1 + 0.07648 z^-2

9
B(z) = 0.887 z^-3

Sample time: 0.02 seconds

Parameterization:
Polynomial orders: na=2 nb=1 nk=3
Number of free coefficients: 3
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using ARX on time domain data "dat2".
Fit to estimation data: 89.29% (prediction focus)
FPE: 1.294, MSE: 1.171

Model Properties

procest_modelo = procest(dat2, 'p2')

procest_modelo =

Process model with transfer function:


Kp
G(s) = -----------------
(1+Tp1*s)(1+Tp2*s)

Kp = 6.3201
Tp1 = 0.07705
Tp2 = 0.07705

Parameterization:
{'P2'}
Number of free coefficients: 3
Use "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using PROCEST on time domain data "dat2".
Fit to estimation data: 87.99%
FPE: 1.627, MSE: 1.474

Model Properties

compare(dat2, arx_modelo, procest_modelo)

10
2.2 Realize uma simulação ao degrau para ambos os modelos comparando as respostas durante o regime
transitório e o estado estacionário.

figure;
step(arx_modelo,procest_modelo); % arx e procest

11
Atividade 3. Validação de modelo utilizando dados de teste e análise residual.

O objeto dat2_test contpem dados de um teste realizados nesse motor para testar o modelo obtido na atividade
2.

3.1 Use o comando compare para testar os modelos obtidos na atividade 2 usando dat2_test, comparando com
os resultados da atividade 2.

compare (dat2_test,arx_modelo,procest_modelo)

12
% coloque aqui os comandos para validar os modelos utilizando dat2_test

3.2 Realize uma análise residual (comando resid) utilizando os dados em dat2 e dat2_test, checando se o
resíduo é descorrelacionado e a entrada é descorrelacionada dos resíduos,

% coloque aqui os comandos


resid(dat2,arx_modelo)

13
resid(dat2,procest_modelo)

14
resid(dat2_test,arx_modelo)

resid(dat2_test,procest_modelo)

15
Atividade 4: Identificação de modelos de sistemas com delays

4.1 O objeto dat4 contém dados com tempo morto (delay). Estima um modelo e mostre que o delay foi
corretamente estimado.

% coloque aqui os comandos


estimatedDelay = delayest(dat4);
na = 2;
nb = 2;
nk = estimatedDelay; % atraso

m_arx_with_delay = arx(dat4,[na nb nk]);

figure;
compare(dat4, m_arx_with_delay);

16
Atividade 5. Identificação de sistemas utilizando dados de malha fechada de um motor DC.

O objeto dat5 contém dados de um teste realizado no motor DC em malha fechada usando um controlador PI.

5.1 Estime o modelo em malha aberta utilizando esses dados (entrada U e saída Y)

% coloque aqui os comandos


na = 1;
nb = 2;
nk = 1;

m_fechada = arx(dat5, [na nb nk])

m_fechada =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
A(z) = 1 - 0.9831 z^-1

B(z) = 0.6894 z^-1 - 0.5129 z^-2

Sample time: 0.02 seconds

Parameterization:
Polynomial orders: na=1 nb=2 nk=1
Number of free coefficients: 3

17
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using ARX on time domain data "dat5".
Fit to estimation data: 94.19% (prediction focus)
FPE: 2.871, MSE: 2.732

Model Properties

load datama2000.mat
na = 2

na = 2

nb = 1

nb = 1

nk = 1

nk = 1

m_aberta = arx(data, [na nb nk])

m_aberta =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
A(z) = 1 - 0.8566 z^-1 - 0.07981 z^-2

B(z) = 1.577 z^-1

Sample time: 0.02 seconds

Parameterization:
Polynomial orders: na=2 nb=1 nk=1
Number of free coefficients: 3
Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:
Estimated using ARX on time domain data "data".
Fit to estimation data: 97.18% (prediction focus)
FPE: 10.12, MSE: 9.998

Model Properties

compare(dat5, m_aberta, m_fechada)

18
5.2 Compare, utilizando os comandos step e compare, os modelos em malha aberta e malha fechada obtidos.

figure;
% comando compare
figure;
% comando step

figure;
compare(dat5, m_aberta, m_fechada);

19
step(m_aberta)

20
step(m_fechada)

21

Você também pode gostar