如何在Simulink中跟踪离散状态空间模块的状态x?
在Simulink中无需观测器跟踪离散状态空间模型状态x的方法
直接启用模块的状态输出端口
Simulink的Discrete State Space模块自带状态输出能力,只是默认隐藏。双击模块打开参数对话框,找到Output options下拉菜单,选择Output states and outputs,模块会自动新增状态输出端口,直接把这个端口引出就能实时跟踪状态x。这种方式完全不会修改A/B/C/D矩阵,不会改变原系统的底层逻辑。并行搭建状态计算分支
要是不想改动原模块的输出设置,可以基于原系统的A、B矩阵单独搭一个状态计算分支:- 用Unit Delay模块存储当前时刻的状态x(k),初始值设成和原模块一致;
- 用Gain模块分别加载矩阵A和B,分别对x(k)和输入u(k)做乘法;
- 用Sum模块把两个结果相加,得到下一时刻的状态x(k+1),再反馈给Unit Delay的输入。
这个分支和原系统同步运行,能精准得到状态x,而且完全不影响原系统的输出y。注意要保证采样时间和初始状态和原模块完全一致,避免出现同步偏差。
用数据日志离线查看状态
如果只是需要事后查看状态数据,不用实时引出端口:- 右键点击Discrete State Space模块,选择Log Selected Signals;
- 打开模型配置参数(快捷键Ctrl+E),在Data Import/Export页面勾选States;
- 运行仿真后,Workspace里会自动生成包含状态数据的变量(比如默认的
logsout或xout),直接调用就能查看状态的变化过程。
内容的提问来源于stack exchange,提问作者Giulio Mario Martena
相关产品推荐
相关产品推荐

