Main Content

Estimate State-Space Models with Canonical Parameterization

What Is Canonical Parameterization?

Canonical parameterization represents a state-space system in a reduced parameter form where many elements of A, B and C matrices are fixed to zeros and ones. The free parameters appear in only a few of the rows and columns in state-space matrices A, B, C, D, and K. The free parameters are identifiable — they can be estimated to unique values. The remaining matrix elements are fixed to zeros and ones.

The software supports the following canonical forms:

  • Companion form: The characteristic polynomial appears in the rightmost column of the A matrix.

  • Modal decomposition form: The state matrix A is block diagonal, with each block corresponding to a cluster of nearby modes.


    The modal form has a certain symmetry in its block diagonal elements. If you update the parameters of a model of this form (as a structured estimation using ssest), the symmetry is not preserved, even though the updated model is still block-diagonal.

  • Observability canonical form: The free parameters appear only in select rows of the A matrix and in the B and K matrices.

    For more information about the distribution of free parameters in the observability canonical form, see the Appendix 4A, pp 132-134, on identifiability of black-box multivariable model structures in System Identification: Theory for the User, Second Edition, by Lennart Ljung, Prentice Hall PTR, 1999 (equation 4A.16).

For more information on canonical forms, see State-Space Realizations.

Estimating Canonical State-Space Models

You can estimate state-space models with chosen parameterization at the command line.

For example, to specify an observability canonical form, use the 'Form' name-value pair input argument, as follows:

m = ssest(data,n,'Form','canonical')

Similarly, set 'Form' as 'modal' or 'companion' to specify modal decomposition and companion canonical forms, respectively.

If you have time-domain data, the preceding command estimates a continuous-time model. If you want a discrete-time model, specify the data sample time using the 'Ts' name-value pair input argument:

md = ssest(data, n,'Form','canonical','Ts',data.Ts)

If you have continuous-time frequency-domain data, you can only estimate a continuous-time model.