# \[ANN\] ControlSystemIdentification

**URL:** https://discourse.julialang.org/t/ann-controlsystemidentification/34811
**Category:** Package Announcements
**Tags:** control, time-series, controlsystems
**Created:** [February 18, 2020, 1:55pm UTC](https://discourse.julialang.org/t/ann-controlsystemidentification/34811 "2020-02-18T13:55:40Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)
#### Post date: [February 18, 2020, 1:55pm UTC](https://discourse.julialang.org/t/ann-controlsystemidentification/34811/1 "2020-02-18T13:55:40Z")

</div>

# ControlSystemIdentification

This package has been around for a while but has never been announced here.  
[ControlSystemIdentification.jl](https://github.com/baggepinnen/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](https://github.com/JuliaControl/ControlSystems.jl) and makes heavy use of [Optim.jl](https://github.com/JuliaNLSolvers/Optim.jl) and [TotalLeastSquares.jl](https://github.com/baggepinnen/TotalLeastSquares.jl).

The documentation is in the README as well as in docstrings for each function. There is also a [collection of notebooks](https://github.com/JuliaControl/ControlExamples.jl) 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.

---

<div class="post-metadata">

### Author: ![ssfrr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ssfrr/32/3736_2.png) [@ssfrr](https://discourse.julialang.org/u/ssfrr)
#### Post date: [February 18, 2020, 3:14pm UTC](https://discourse.julialang.org/t/ann-controlsystemidentification/34811/2 "2020-02-18T15:14:47Z")

</div>

Awesome! Looks super useful, thanks for announcing. I have a bunch of impulse response estimation methods implemented in [MeasureIR.jl](https://github.com/ssfrr/MeasureIR.jl) (unregistered), with a more specific audio focus. Seems like maybe I should migrate some of that to your package once they’re a little more fleshed out.

---

<div class="post-metadata">

### Author: ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)
#### Post date: [October 1, 2020, 5:43am UTC](https://discourse.julialang.org/t/ann-controlsystemidentification/34811/3 "2020-10-01T05:43:39Z")

</div>

This package has now reached version 1.0, indicating that I do not have any plans to break the API anytime soon. Since the original announcement, a few more features have appeared

- Frequency weighted estimation, allows you to indicate frequency ranges where you care about the model fit. Or conversely, you can provide disturbance models to indicate that you should not spend modeling effort trying to fit the frequency ranges of the disturbance.
- Input-output data is now stored in a struct, similar to matlabs `iddata`.
- Integration with [LowLevelParticleFilters.jl](https://github.com/baggepinnen/LowLevelParticleFilters.jl) to perform Kalman filtering with estimated models.
- Model-based spectrogram estimation.
- The package has now been battle tested and is in general more robust.

---

<div class="post-metadata">

### Author: ![TheLateKronos](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/thelatekronos/32/12824_2.png) [@TheLateKronos](https://discourse.julialang.org/u/TheLateKronos)
#### Post date: [October 2, 2020, 5:56am UTC](https://discourse.julialang.org/t/ann-controlsystemidentification/34811/4 "2020-10-02T05:56:48Z")

</div>

This is simply amazing in my current fight at university (engineering) not to become dependent on MatLab, much appreciated \<3
