1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//! System-identification algorithms built on the realization utilities.
//!
//! The identification layer sits above [`crate::control::realization`] and
//! turns either:
//!
//! - structured response data, such as Markov parameters, or
//! - sampled input/output data
//!
//! into discrete-time state-space models.
//!
//! # Two Intuitions
//!
//! 1. **Data-preparation view.** Identification here is the process of
//! converting measured data into the impulse-response objects from which a
//! realization can be built.
//! 2. **Subspace view.** The same workflow can be seen as building a low-rank
//! subspace from Markov or Hankel data and then reading a state-space model
//! out of that subspace.
//!
//! # Glossary
//!
//! - **Markov parameters:** Discrete impulse-response blocks `H_k`.
//! - **Hankel matrix:** Block matrix with time-shifted Markov blocks.
//! - **ERA:** Eigensystem realization algorithm.
//! - **OKID:** Observer/Kalman filter identification.
//!
//! # Mathematical Formulation
//!
//! OKID estimates a Markov sequence from sampled I/O data. ERA then takes a
//! shifted block-Hankel pair derived from that sequence and computes a reduced
//! state-space realization through an SVD and shifted subspace formulas.
//!
//! # Implementation Notes
//!
//! - The identification surface is discrete-time only.
//! - ERA is implemented both from Markov data and from an explicit shifted
//! Hankel pair.
//! - OKID assumes the initial-condition transient is absent or has
//! been trimmed away.
//!
//! # Feature Matrix
//!
//! | Algorithm | Input | Output | Time domain |
//! | --- | --- | --- | --- |
//! | `ERA` | Markov data or shifted Hankel pair | discrete state space | discrete |
//! | `OKID` | sampled input/output data | Markov sequence | discrete |
pub use ;
pub use ;