Estimate state-space model using time or frequency domain data
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.
For time-domain estimation, data must be an iddata object containing the input and output signal values.
For frequency-domain estimation, data can be one of the following:
Order of estimated model.
Specify nx as a positive integer. nx may be a scalar or a vector. If nx is a vector, then ssest creates a plot which you can use to choose a suitable model order. The plot shows the Hankel singular values for models of different orders. States with relatively small Hankel singular values can be safely discarded. A default choice is suggested in the plot.
opt is an options set, created using ssestOptions, that specifies options including:
Dynamic system that configures the initial parameterization of sys.
If init_sys is an state-space (idss) model, ssest uses the parameter values of init_sys as the initial guess for estimating sys. For information on how to specify idss, see Estimate State-Space Models with Structured Parameterization. Constraints on the parameters of init_sys, such as fixed coefficients and minimum/maximum bounds are honored in estimating sys.
If init_sys is not an idss model, the software first converts init_sys to an idss model. ssest uses the parameters of the resulting model as the initial guess for estimation.
Use the Structure property of init_sys to configure initial guesses and constraints for the A, B, C , D and K matrices.
To specify an initial guess for, say, the A matrix of init_sys, set init_sys.Structure.a.Value as the initial guess.
To specify constraints for, say, the B matrix of init_sys:
You can similarly specify the initial guess and constraints for the other matrices.
Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.
Sample time, specified as a positive scalar.
For continuous-time models, use Ts = 0. For discrete-time models, specify Ts as a positive scalar whose value is equal to the data sampling time.
Input delay for each input channel, specified as a numeric vector. For continuous-time systems, specify input delays in the time unit stored in the TimeUnit property. For discrete-time systems, specify input delays in integer multiples of the sampling period Ts. For example, InputDelay = 3 means a delay of three sampling periods.
For a system with Nu inputs, set InputDelay to an Nu-by-1 vector. Each entry of this vector is a numerical value that represents the input delay for the corresponding input channel.
You can also set InputDelay to a scalar value to apply the same delay to all channels.
Type of canonical form of sys.
Form is a string that takes one of the following values:
'modal' — Obtain sys in modal form.
'companion' — Obtain sys in companion form.
'free' — All entries of the A, B and C matrices are treated as free.
'canonical' — Obtain sys in the observability canonical form .
For more information, see Estimate State-Space Models with Canonical Parameterization.
Direct feedthrough from input to output, specified as a logical vector of length Nu, where Nu is the number of inputs. If Feedthrough is specified as a logical scalar, it is applied to all the inputs.
Specify whether to estimate the K matrix which specifies the noise component, specified as one of the following strings:
'none' — Noise component is not estimated. The value of the K matrix is fixed to zero value.
'estimate' — The K matrix is treated as a free parameter.
DisturbanceModel must be 'none' when using frequency-domain data.
Identified state-space model.
sys is an idss model, which encapsulates the identified state-space model.
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 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 the impulse responses of the models.
impulse(trueSys, m, mr, 50);
Identify a 15th order state-space model using regularized impulse response estimation.
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.
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.
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.
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.
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 .
In modal form, A is a block-diagonal matrix. The block size is typically 1-by-1 for real eigenvalues and 2-by-2 for complex eigenvalues. However, if there are repeated eigenvalues or clusters of nearby eigenvalues, the block size can be larger.
For example, for a system with eigenvalues , the modal A matrix is of the form
In the companion realization, the characteristic polynomial of the system appears explicitly in the right-most column of the A matrix. For a system with characteristic polynomial
the corresponding companion A matrix is
The companion transformation requires that the system be controllable from the first input. The companion form is poorly conditioned for most state-space computations; avoid using it when possible.
ssest initializes the parameter estimates using a noniterative subspace approach. It then refines the parameter values using the prediction error minimization approach. See pem for more information.
 Ljung, L. System Identification: Theory For the User, Second Edition, Upper Saddle River, N.J: Prentice Hall, 1999.