System Identification of Closed Loop Data and Unstable Plant

60 views (last 30 days)
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.

Accepted Answer

Rajiv Singh
Rajiv Singh on 9 Jul 2020
Edited: Rajiv Singh on 31 Jul 2020
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 Comment
Jason Nicholson
Jason Nicholson on 9 Jul 2020
Thanks for the answer. It is interesting this question was still open 6 years later. :)

Sign in to comment.

More Answers (2)

Gilian van Lenthe
Gilian van Lenthe on 7 Nov 2016
Hi Jason,
Did you solve this by yourself? I have a similar situation, unfortunately.
Kind regards,
Gilian
  1 Comment
Jason Nicholson
Jason Nicholson on 7 Nov 2016
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.

Sign in to comment.


Enea Paracampo
Enea Paracampo on 30 Jun 2020
Hi Jason, I have almost the same problem. Have you solved it ?

Categories

Find more on Linear Model Identification in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!