control.eigensys_realization
- control.eigensys_realization(YY, r)[source]
Calculate ERA model based on impulse-response data.
This function computes a discrete-time system
of order
for a given impulse-response data (see [1]).
The function can be called with 2 arguments:
sysd, S = eigensys_realization(data, r)
sysd, S = eigensys_realization(YY, r)
where
data
is aTimeResponseData
object,YY
is a 1D or 3D array, and r is an integer.- Parameters
- YYarray_like
Impulse response from which the
StateSpace
model is estimated, 1D or 3D array.- data
TimeResponseData
Impulse response from which the
StateSpace
model is estimated.- rinteger
Order of model.
- minteger, optional
Number of rows in Hankel matrix. Default is 2*r.
- ninteger, optional
Number of columns in Hankel matrix. Default is 2*r.
- dtTrue or float, optional
True indicates discrete time with unspecified sampling time and a positive float is discrete time with the specified sampling time. It can be used to scale the
StateSpace
model in order to match the unit-area impulse response of python-control. Default is True.- transposebool, optional
Assume that input data is transposed relative to the standard Time series data conventions. For
TimeResponseData
this parameter is ignored. Default is False.
- Returns
- sys
StateSpace
State space model of the specified order.
- Sarray
Singular values of Hankel matrix. Can be used to choose a good
r
value.
- sys
References
- 1
Samet Oymak and Necmiye Ozay, Non-asymptotic Identification of LTI Systems from a Single Trajectory. https://arxiv.org/abs/1806.05722
Examples
>>> T = np.linspace(0, 10, 100) >>> _, YY = ct.impulse_response(ct.tf([1], [1, 0.5], True), T) >>> sysd, _ = ct.eigensys_realization(YY, r=1)
>>> T = np.linspace(0, 10, 100) >>> response = ct.impulse_response(ct.tf([1], [1, 0.5], True), T) >>> sysd, _ = ct.eigensys_realization(response, r=1)