Documentation Center |
Estimate state-space model using time or frequency domain data
sys = ssest(data,nx) estimates a state-space model, sys, using time- or frequency-domain data, data. sys is a state-space model of order nx and represents:
A, B, C, D, and K are state-space matrices. u(t) is the input, y(t) is the output, e(t) is the disturbance and x(t) is the vector of nx states.
All the entries of A, B, C, and K are free estimable parameters by default. D is fixed to zero by default, meaning that there is no feedthrough, except for static systems (nx=0).
sys = ssest(data,nx,Name,Value) estimates the model using the additional options specified by one or more Name,Value pair arguments. Use the Form, Feedthrough and DisturbanceModel name-value pair arguments to modify the default behavior of the A, B, C, D, and K matrices.
sys = ssest(___,opt) estimates the model using an option set, opt, that specifies options such as estimation objective, handling of initial conditions and numerical search method used for estimation.
sys = ssest(data,init_sys) estimates a state-space model using the dynamic system init_sys to configure the initial parameterization.
sys = ssest(data,init_sys,Name,Value) estimates the model using additional options specified by one or more Name,Value pair arguments.
sys = ssest(___,opt) estimates the model using an option set, opt.
sys |
Identified state-space model. sys is an idss model, which encapsulates the identified state-space model. |
x0 |
Initial states computed during the estimation. If data contains multiple experiments, then x0 is an array with each column corresponding to an experiment. This value is also stored in the Parameters field of the model's Report property. |
Estimate a state-space model for measured input-output data. Determine the optimal model order within a given range.
Obtain measured input-output data.
load icEngine.mat;
data = iddata(y,u,0.04);
data is an iddata object containing 1500 input-output data samples. The data sampling time is 0.04 seconds.
Estimate a state-space model for measured input-output data. Determine the optimal model order within a given model order range.
nx = 1:10; sys = ssest(data,nx);
A plot that shows the Hankel singular values (SVD) for models of the orders specified by nx appears.
States with relatively small Hankel singular values can be safely discarded. The default order choice is 2.
Select the model order in the Model Order drop-down list and click Apply.
Identify a state-space model containing an input delay for given data.
Load time-domain system response data, and use it to identify a state-space model for the system. Specify a known input delay for the model.
load iddata7 z7 nx = 4; sys = ssest(z7(1:300),nx,'InputDelay',[2;0])
z7 is an iddata object that contains time domain system response data.
nx specifies a fourth-order identified state-space model.
The name-value input argument pair 'InputDelay',[2;0] specifies an input delay of 2 seconds for the first input and 0 seconds for the second output.
sys is an idss model containing the identified state-space model.
Obtain a regularized 15th order state-space model for a 2nd order system from a narrow bandwidth signal.
Load data.
load regularizationExampleData eData;
Estimate an unregularized state-space model.
trueSys = idtf([0.02008 0.04017 0.02008],[1 -1.561 0.6414],1); m = ssest(eData, 15, 'form', 'modal', 'DisturbanceModel', 'none');
Estimate a regularized state-space model.
opt = ssestOptions; opt.Regularization.Lambda = 9.7; mr = ssest(eData, 15, 'form','modal','DisturbanceModel','none', opt);
Compare the model outputs with data.
compare(eData,m,mr);
Compare the impulse responses of the models.
impulse(trueSys, m, mr, 50);
Identify a 15th order state-space model using regularized impulse response estimation.
Load data.
load regularizationExampleData eData;
Create a transfer function model used for generating the estimation data (true system).
trueSys = idtf([0.02008 0.04017 0.02008],[1 -1.561 0.6414],1);
Obtain regularized impulse response (FIR) model.
opt = impulseestOptions('RegulKernel', 'DC'); m0 = impulseest(eData, 70, opt);
Convert the model into a transfer function model after reducing the order.
m = balred(idss(m0),15);
Obtain a state-space model using regularized reduction of ARX model.
m1 = ssregest(eData,15);
Compare the impulse responses of the true system, regularized and state-space models.
impulse(trueSys, m, m1, 50);
Estimate a state-space model using measured input-output data. Configure the parameter constraints and initial values for estimation using a state-space model.
Create an idss model to specify the initial parameterization for estimation.
Configure an idss model so that it has no state-disturbance element and only the nonzero entries of the A matrix are estimable. Additionally, fix the values of the B matrix.
A = blkdiag([-0.1 0.4; -0.4 -0.1],[-1 5; -5 -1]); B = [1; zeros(3,1)]; C = [1 1 1 1]; D = 0; K = zeros(4,1); x0 = [0.1,0.1,0.1,0.1]; Ts = 0; init_sys = idss(A,B,C,D,K,x0,Ts);
Setting all entries of K = 0 creates an idss model with no state disturbance element.
Use the Structure property of init_sys to fix the values of some of the parameters.
init_sys.Structure.a.Free = (A~=0); init_sys.Structure.b.Free = false; init_sys.Structure.k.Free = false;
The entries in init_sys.Structure.a.Free determine whether the corresponding entries in init_sys.a are free (identifiable) or fixed. The first line sets init_sys.Structure.a.Free to a matrix that is true wherever A is nonzero, and false everywhere else. Doing so fixes the value of the zero entries in init_sys.a.
The remaining lines fix all the values in init_sys.b and init_sys.k to the values you specified when you created the model.
Load the measured data and estimate a state-space model using the parameter constraints and initial values specified by init_sys.
load iddata2 z2; sys = ssest(z2,init_sys);
sys is an idss model that encapsulates the fourth-order, state-space model estimated for the measured data z2. The estimated parameters of sys successfully satisfy the constraints specified by init_sys.
Reduce the order of a model by estimation.
Consider the Simulink model idF14Model. Linearizing this model gives a ninth-order model. However, the dynamics of the model can be captured, without compromising the fit quality too much, using a lower-order model.
Obtain the linearized model.
load_system('idF14Model'); io = getlinio('idF14Model'); sys_lin = linearize('idF14Model',io);
sys_lin is a ninth-order state-space model with two outputs and one input.
Simulate the step response of the linearized model, and use the data to create an iddata object.
Ts = 0.0444; t = (0:Ts:4.44)'; y = step(sys_lin,t); data = iddata([zeros(20,2);y],[zeros(20,1); ones(101,1)],Ts);
data is an iddata object that encapsulates the step response of sys_lin.
Compare the data to the model linearization.
compare(data, sys_lin);
Because the data was obtained by simulating the linearized model, there is a 100% match between the data and model linearization response.
Identify a state-space model with a reduced order that adequately fits the data.
Determine an optimal model order.
nx = 1:9; sys1 = ssest(data,nx,'DisturbanceModel','none');
A plot showing the Hankel singular values (SVD) for models of the orders specified by nx appears.
States with relatively small Hankel singular values can be safely discarded. The plot suggests using a fifth-order model.
At the MATLAB^{®} command prompt, select the model order for the estimated state-space model. Specify the model order as 5, or press Enter to use the default order value.
Compare the data to the estimated model.
compare(data, sys1);
sys1 provides a 98.4% fit for the first output and a 97.7% fit for the second output.
Examine the stopping condition for the search algorithm.
sys1.Report.Termination.WhyStop
ans = Maximum number of iterations reached
Create an estimation options set that specifies the 'lm' search method and allows a maximum of 50 search iterations.
opt = ssestOptions('SearchMethod','lm'); opt.SearchOption.MaxIter = 50; opt.Display = 'on';
Identify a state-space model using the estimation option set and sys1 as the estimation initialization model.
sys2 = ssest(data, sys1, opt);
Compare the response of the linearized and the estimated models.
compare(data,sys_lin,sys2);
sys2 provides a 99% fit for the first output and a 98% fit for the second output while using 4 less states than sys_lin .
[1] Ljung, L. System Identification: Theory For the User, Second Edition, Upper Saddle River, N.J: Prentice Hall, 1999.
canon | iddata | idfrd | idgrey | idss | n4sid | pem | polyest | procest | ssestOptions | ssregest | tfest