ControlSystemIdentification.jl

System Identification toolbox, compatible with ControlSystems.jl
Popularity
132 Stars
Updated Last
3 Months Ago
Started In
January 2019

ControlSystemIdentification

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, 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}$$

as well as generic nonlinear graybox models

$$x^+ = f(x, u)$$

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" ""])