System Identification of Closed Loop Data and Unstable Plant

조회 수: 42 (최근 30일)
Jason Nicholson
Jason Nicholson 2014년 6월 15일
편집: Rajiv Singh 2020년 7월 31일
I ran an experiment with the following block diagram
I have 4 measured inputs, u, and 4 measured outputs, y. I perforned 55 experiments all with different input combinations. My sample rate was 1000 Hz but sometimes 2000 Hz. We can assume that sample rate was the same for all tests and I can resample to 1000Hz. Each test was about 600 sec. This means each test contains about about 600,000 data samples.
I would like to identify a state space model of the unstable plant for use in controller design. It is okay to think of each output as a part of Multiple Input Single Output (MISO) system. Multiple Input Multiple Output (MIMO) is okay too.
The unstable plant is nonlinear but can be estimated locally as a linear system.
I understand from reading the listed references [1] and [2] that I must estimate a Disturbance Model to get good results with closed loop data. However, I have only recently studied System Identification therefore my understanding of the subject is a novice at best and my understanding of the reading material isn't great.
Some data is attached:
  • u - inputs
  • y - outputs
  • Ts - sample time
  • t - time vector
Example Code:
load('System ID Data')
data = iddata(double(y), double(u), Ts);
optionsStateSpace = ssestOptions('Display', 'On');
numberOfStates = 4;
modelFirstOutput = ssest(data(:,1,:), numberOfStates, optionsStateSpace, ...
'DisturbanceModel', 'estimate', 'Feedthrough', 1);
Questions:
  1. Should I use a MISO or MIMO approach to system identification?
  2. How can I best identify the unstable plant and verify the model using the system identification toolbox?
  3. When the plant is unstable, how do I simulate the model and compare to verification data sets?
  4. Other helpful hints for system identification?
References:
  • [1] System Identification — Theory For the User, Lennart Ljung, Section 13.4-13.5, 2nd ed, PTR Prentice Hall, Upper Saddle River, N.J., 1999.
  • [2] U. Forssell and L. Ljung. Closed-loop identification revisited. Automatica, 35(7): 1215-1241, Jul 1999.

채택된 답변

Rajiv Singh
Rajiv Singh 2020년 7월 9일
편집: Rajiv Singh 2020년 7월 31일
The first reference:
[1] System Identification — Theory For the User, Lennart Ljung, Section 13.4-13.5, 2nd ed, PTR Prentice Hall, Upper Saddle River, N.J., 1999.
explains the identification in closed loop quite well. That is the basic perspective taken in System Identification Toolbox. To answer the questions raised by OP:
Should I use a MISO or MIMO approach to system identification?
It does not matter. As in the case of open-loop identification, it is sometimes advisable to split a multi-output estimation into several single output-estimations. This reduces the number of parameters seen by the nonlinear least squares optimizer and therefore reduces the chances of getting stuck in a local minima. The main thing with closed-loop id is to use a structure that has a rich noise structure; ssest , bj, armax commands are some options.
How can I best identify the unstable plant and verify the model using the system identification toolbox?
Unstable id is fundamentally hard since any small errors owing to noise on wrong structure are amplified. Direct estimation of unstable plant using time-domain data rarely works well. Some tips:
  1. If you must use time-domain data, use focus = 'prediction' option (which is the default anyway) on a model structure with non-trivial noise components (e.g., SS, BJ, ARMAX). It can happen sometimes that the estimation is able to find a stable predictor for an unstable model (abs(eig(A))>1 but abs(eig(A-K*C))<1 in a state-space realization). If this happens you have found your unstable model by time-domain identification.
  2. Another approach is to perform sine-wave experiments in closed-loop (measuring u and y as before) and use it to build a frequency response of the model. If the original model is in Simulink, you can use the frestimate command of Simulink Control Design Toolbox (with sine-stream inputs). Then use the estimated frequency response (packaged as FRD object) to perform a frequency-domain identification. In frequency-domain, identification of unstable models works out significantly more easily. Somehting like:
g = frestimate(model, inputs,...); % see frstimate command, or build FR manually using sine waves
m = ssest(g, nx); % m would automatically be unstable if g is.
When the plant is unstable, how do I simulate the model and compare to verification data sets?
Unstable simulations is inadvisable. Your best bet is to compare responses in frequency-domain. Either use the FRD object or use FFT(time_domain_data) as reference data in COMPARE command.
figure
compare(g, m)
figure
compare(fft(data), m)
HTH.
  댓글 수: 1
Jason Nicholson
Jason Nicholson 2020년 7월 9일
Thanks for the answer. It is interesting this question was still open 6 years later. :)

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Gilian van Lenthe
Gilian van Lenthe 2016년 11월 7일
Hi Jason,
Did you solve this by yourself? I have a similar situation, unfortunately.
Kind regards,
Gilian
  댓글 수: 1
Jason Nicholson
Jason Nicholson 2016년 11월 7일
No I have not found an answer yet. I don't know enough about system identification to know what is really going on. Sorry, I can't really help. You may want to call Mathworks. They were helpful in helping me identify that my dataset is hard to deal with and it wasn't just my ignorance of System Identification.

댓글을 달려면 로그인하십시오.


Enea Paracampo
Enea Paracampo 2020년 6월 30일
Hi Jason, I have almost the same problem. Have you solved it ?

카테고리

Help CenterFile Exchange에서 Linear Model Identification에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by