通过子空间估计进行状态空间估计的 Python 工具箱

信息处理 Python 系统识别 状态空间
2022-02-05 14:40:08

是否有(开源)工具箱通过 Python 中的子空间估计进行状态空间估计?我知道这是在Matlab 的 n4sid 函数中使用的,但我没有找到任何 Python 的实现(即使在Scipy 的信号模块Python 控制系统库中)。不必编写代码真的很有帮助:)

1个回答

您可以使用pyvib进行基于频率的子空间识别。请注意,没有初始状态的估计。如果数据不是完全线性的,则可以对识别的模型进行优化。请参阅实现,也许您可​​以使用它,以防您想自己实现。

有点不完整的例子。查看示例以获取工作代码:

git clone --depth 1 https://github.com/pawsen/pyvib.git
export PYTHONPATH=pyvib

from pyvib.subspace import Subspace
from pyvib.signal import Signal
# partion the data so the format is (npp,inputs/outputs,R,P)
sig = Signal(uest,yest,fs=fs)
sig.lines = lines  # which freq lines should be used
sig.bla()  # computer best linear approx.
nvec = [2,3]  # model size to scan over
maxr = 5  # max number of rows
model = Subspace(sig)
models, infodict = model.scan(nvec, maxr)
errvec = model.extract_model(yval, uval)  # extract best model on fresh data
model.estimate(n, r)  # or do direct estimation if you know sys size

我已经写了代码。非常欢迎您批评和提出改进建议。