是否有(开源)工具箱通过 Python 中的子空间估计进行状态空间估计?我知道这是在Matlab 的 n4sid 函数中使用的,但我没有找到任何 Python 的实现(即使在Scipy 的信号模块或Python 控制系统库中)。不必编写代码真的很有帮助:)
通过子空间估计进行状态空间估计的 Python 工具箱
信息处理
Python
系统识别
状态空间
2022-02-05 14:40:08
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
我已经写了代码。非常欢迎您批评和提出改进建议。