SIPPY is a library for linear model identification of dynamic systems. It aims to be the most user-friendly and comprehensive library for system identification in Python.
Originally developed by Giuseppe Armenise at the Department of Civil and Industrial Engineering of University of Pisa under supervision of Prof. Gabriele Pannocchia.
To identify system as Auto-Regressive with eXogenous Inputs model (ARX) using Linear Least Squares (LLS) on example data, simply run:
from sippy_unipi import system_identification
from sippy_unipi.datasets import load_sample_siso
Y, U = load_sample_siso()
Id_ARX = system_identification(
Y,
U,
"ARX",
*([4], [[3]], [2], [[11]]),
id_mode="LLS",
)
Get your hand on the algorithms using following Jupyter notebooks and play around with open-spource example data:
- ARX systems (multi input-multi output case)
- ARMAX systems (single input-single output case)
- ARMAX systems (multi input-multi output case)
- Input-output structures (using optimization methods)
- Input-output structures (using recursive methods)
- State space system (multi input-multi output case)
- Continuous Stirred Tank Reactor
Intended to work with Python 3.10 and above. Building project dependencies requires C compiler (euther CMake or Ninja). Pre-build wheels are currently not available (feel free to contribute).
Simply run:
pip install sippy_unipi
To install from source, use poetry:
poetry install
Alternatively, you can use Docker to set up the environment. Follow these steps:
- Build the Docker image:
docker build -t sippy .
- Run the Docker container:
docker run -it --rm sippy
SIPPY provides implementations of the following:
Input-Output Models
- FIR
- ARX
- ARMAX
- ARMA
- ARARX
- ARARMAX
- OE
- BJ
- GEN
State-Space Models
- N4SID
- MOESP
- CVA
- PARSIM_P
- PARSIM_S
- PARSIM_K
Feel free to contribute in any way you like, we're always open to new ideas and approaches.
- Feel welcome to open an issue if you think you've spotted a bug or a performance issue.
If the service or the algorithm has been useful to you and you would like to cite it in an scientific publication, please refer to the paper:
This algorithm is free and open-source software licensed under the LGPL. license, meaning the code can be used royalty-free even in commercial applications.