Trabalho 3
Trabalho 3
Trabalho 3
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
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
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
m=oe(dat,[nb nf nk]); Computa a estimativa de mínimos quadrados para modelos oe.
resid(dat,m); computa e testa os resíduos associados ao modelo identificado m usando os dados em dat
Testes em malha aberta: degraus são aplicados em e coletados em sem o uso do controlador .
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 =
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
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 =
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
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 =
Discrete-time OE model: y(t) = [B(z)/F(z)]u(t) + e(t)
B(z) = 0.05164 z^-1 + 0.05144 z^-2
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
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 =
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 = 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 = 400×1
0
0.0516
0.1015
0.1501
0.1970
0.2427
0.2868
0.3298
0.3712
0.4117
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 = 0.0274
mse_armax = 0.0088
mse_oe = 0.8043
mse_bj = 0.0117
8
MSE ARX: 0.0274
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).
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.
arx_ordem = 1×3
2 1 3
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
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 =
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
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,
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.
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)
m_fechada =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
A(z) = 1 - 0.9831 z^-1
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 =
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
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
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