# ControlSystemIdentification

This package has been around for a while but has never been announced here.

ControlSystemIdentification.jl aims to be similar in scope to Ljung’s System Identification Toolbox in Matlab, implementing estimation procedures for linear input-output models and time-series analysis. Although we are not all the way there yet, quite a number of methods are present, some of them are

- Subspace-based identification of statespace models [1] using n4sid.
- Identification of AR and ARX models (transfer functions) [2].
- Nonparametric transfer-function and coherence estimation using spectral methods.
- General statespace model estimation using the prediction-error method (PEM) with arbitrary metrics.
- Impulse response estimation.

The package returns models in the form of `TransferFunction`

and `StateSpace`

types from ControlSystems.jl and makes heavy use of Optim.jl and TotalLeastSquares.jl.

The documentation is in the README as well as in docstrings for each function. There is also a collection of notebooks that illustrate usage of the package for various identification tasks.

[1] Models on the form

x_{t+1} = Ax_t + Bu_t + Kw_t

y_t \;\;\;\,= Cx_t + Du_t + w_t

where both u and y may be vectors (MIMO, multiple input multiple output).

[2] Models on the form

y_t = \sum a_k y_{t-k} + \sum b_k u_{t-k} + \sum c_k w_{t-k} or A(z)Y(z) = B(z)U(z) + C(z)W(z)

where the polynomials B and C are optional.