System Identification toolbox for LTI systems, compatible with ControlSystems.jl
108 Stars
Updated Last
10 Months Ago
Started In
January 2019


CI codecov Documentation, stable Documentation, latest

System identification for ControlSystems.jl, implemented in Julia.

This package estimates linear statespace models with inputs on the form

$$\begin{aligned} x^+ &= Ax + Bu + Ke\\\ y &= Cx + Du + e \end{aligned}$$

using methods such as N4SID or the prediction-error method, or transfer functions on the form

$$G(z) = \dfrac{B(z)}{A(z)} = \dfrac{b_m z^m + \dots + b_0}{z^n + a_{n-1} z^{n-1} + \dots + a_0}$$

See the documentation for help.

Examples in the form of jupyter notebooks are provided here.

Quick example:

using ControlSystemIdentification, ControlSystemsBase
Ts = 0.1
G  = c2d(DemoSystems.resonant(), Ts) # A true system to generate data from
u  = randn(1,1000)                   # A random input
y  = lsim(G,u).y                     # Simulated output
y .+= 0.01 .* randn.()               # add measurement noise
d  = iddata(y, u, Ts)                # package data in iddata object
sys = subspaceid(d, :auto)           # estimate state-space model using subspace-based identification
bodeplot([G, sys.sys], lab=["True" "" "n4sid" ""])