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