- 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.
- 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:
System Identification of Closed Loop Data and Unstable Plant
42 views (last 30 days)
Show older comments
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:
- Should I use a MISO or MIMO approach to system identification?
- How can I best identify the unstable plant and verify the model using the system identification toolbox?
- When the plant is unstable, how do I simulate the model and compare to verification data sets?
- 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.
0 Comments
Accepted Answer
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:
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.
More Answers (2)
Gilian van Lenthe
on 7 Nov 2016
Hi Jason,
Did you solve this by yourself? I have a similar situation, unfortunately.
Kind regards,
Gilian
See Also
Categories
Find more on Linear Model Identification in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!