The LTI System Identification Toolbox for Matlab enables you to perform an identification of linear time-invariant systems. It provides command-line functions for parametric model estimation and subspace model identification in both discrete-time and continuous-time (frequency domain). To get you started, this page will explain a subspace identification of a small LTI model using the PI-MOESP method. For more examples and a full description of the functions, read the toolbox software manual.
In this example we will give an example of how the subspace identification framework in the toolbox software is used in a practical situation. The PI-MOESP scheme functions dordpi and dmodpi will be used to estimate A and C, after which dac2bd and dinit are used to estimate B, D and the initial state. Finally, a simple model validation is performed.
First we generate data for a second-order system. Apseudorandom binary sequence will be generated as identification input using the tool prbn. A pseudo-random binary sequence, or PRBN, is an often-used identification input signal. In the following example, the rate is set to 0.1 in order to get a signal that changes state rather infrequently and which therefore mainly contains signal energy in the lower frequency range.
A = [1.5 -0.7; 1 0]; B = [1; 0]; C = [1 0.5]; D = 0; u = prbn(300,0.1)-0.5; y = dltisim(A,B,C,D,u);
In order to make the example more realistic, the output signal is disturbed by colored measurement noise such that a 20 dB SNR is obtained. The b and a vectors correspond to the numerator and denominator polynomials of a lowpass filter.
b = [0.17 0.50 0.50 0.17]; a = [1.0 0 0.33 0]; y = y + 0.1*std(y)*filter(b,a,randn(300,1)); figure, subplot(2,1,1); plot(1:300,u); title('Input signal') axis([1 300 -1 1]); subplot(2,1,2); plot(1:300,y); title('Output signal') axis([1 300 -10 10]); xlabel('Sample')
We will now try to identify the system from the generated data set by assuming the following state-space model structure:
This model, in which v(k) is a colored noise signal, falls within the class of models for which PI-MOESP can provide consistent estimates, as was illustrated in Section 9.5 of the textbook.
In this first step we use the "ord" function, dordpi in this PI-MOESP case, in order to compress the available data and to generate a model order estimate. The only model structure selection parameter that we need to pass is the block-size s, which should be larger than the expected system order. We will use the rather high value s=10 in this example in order to show the order selection mechanism more clearly.
s = 10; [S,R] = dordpi(u,y,s);
The function dordpi returns a vector S containing singular values based on which the model order can be determined. In addition, a compressed data matrix R is returned that is used by dmodpi to estimate A and C in the next step. The singular values in S are plotted using the following command:
In a noise-free case, only the first n singular values would have been nonzero. However, the singular values that would have been zero are now disturbed because of the noise. Still, a gap is visible between singular values 2 and 3, and so the model order will be chosen equal to n=2.
In this step we will obtain estimates for A and C. As the A and C variables have already been defined, we will call the estimates for A and C, Ae and Ce respectively. The function dordpi is used to determine Ae and Ce based on the R matrix from dordpi and the model order n determined from the singular value plot.
n = 2; [Ae,Ce] = dmodpi(R,n);
Once estimates Ae and Ce for A and C have been determined, the toolbox function dac2bd will be used to estimate B and D, as Be and De respectively. The function dac2bd requires the estimates for A and C and the measured inputoutput data. Subsequently, the toolbox function dinit is used to obtain the initial state x0 corresponding to the current data set. This function needs estimates for all system matrices as well as the measured input-output data.
[Be,De] = dac2bd(Ae,Ce,u,y); x0e = dinit(Ae,Be,Ce,De,u,y);
The quality of the model (Ae,Be,Ce,De) that has been identified will now be assessed. To this end, we will compare the output predicted by the identified model to the measured output signal. As a figure of merit, we use the variance accounted for (VAF). If the model is good, the VAF should be close to 100%. The following code fragment simulated the estimated model using the measured input signal in order to obtain the estimated output ye. Subsequently, the VAF is calculated using the toolbox function vaf.
ye = dltisim(Ae,Be,Ce,De,u,x0e); vaf(y,ye)
ans = 99.4524
It is clear that the estimated model described the actual system behavior well. The error signal y(k) - ye(k) is plotted. This error is very small compared to the output signal in the first figure.
figure, plot(1:300,y-ye); title('Error signal') axis([1 300 -10 10]); xlabel('Sample')