【问题标题】:Using System Identification Toolbox transfer function with Simulink将 System Identification Toolbox 传递函数与 Simulink 结合使用
【发布时间】:2014-02-25 14:05:35
【问题描述】:

我认为在尝试在 Simulink 中导入和测试在 System Identification Toolbox (SIT) 中创建的传递函数时,我做错了什么。

举一个简单的例子来说明我在做什么。 我有一个输入,它是从 12 秒到 25 秒的偏移正弦波,幅度为 1,频率为 1.5rad/s,可提供测量输出。

我使用 SIT 创建了一个简单的 2 极 1 零传递函数,它给出了以下协议:

然后我尝试将此传递函数导入 Simulink 以研究以下配置,该配置具有频率 1.5rad/s 的正弦输入和起始 t=12。 LTI 系统块是指工作空间内的传递函数变量:

当我运行此模拟 13 秒时,模块的输入与预期的一样,但后传递函数信号与预期几乎没有一致,并且超出了一个数量级。

前:

帖子:

有人可以深入了解我哪里出错了,以及为什么 simulink 中 tf 的输出与 SIT 中显示的模型输出几乎没有相似之处。我对控制理论有基本的了解,但我很难理解这一点。

【问题讨论】:

标签: matlab simulink system-identification transfer-function


【解决方案1】:

这可能是由于 SimuLink 和 SI Toolbox 中使用的初始条件不同,后者应该使用模型估计初始条件,而 Simulink 对初始条件没有什么特别之处,除非您自己指定它们。

在我看来,您的原始信号似乎处于周期性状态,因为您的输出看起来也几乎像正弦波。在周期状态下,初始条件几乎没有影响。您可以通过长时间模拟您的模型来验证我的假设:如果最后您的信号达到数据中的正确幅度和相位滞后,您就会知道初始条件是错误的。 无论如何,您都可以从工具箱中获取估计的初始状态,我认为使用结果对象的InitialState 属性。

另一件可能出错的事情是您在 Simulink 中使用的时间离散化,以防您估计连续时间模型(拉普拉斯变量 s 中的一个,而不是 zq 中的一个)。

编辑:在这种情况下,我建议您检查 Simulink 用于离散化 CT 模型的方法,方法是在 MATLAB 中使用 c2d,并在 Simulink 中使用如下设置。在 MATLAB 中,您还可以使用 lsim“模拟”对 CT 模型的响应,您必须在其中指定离散化方法。

此设置允许您加载 CT 模型和离散变量(在本例中为状态空间表示)。通过比较信号,可以看到你使用的离散化方法是否和 SimuLink 使用的一样(这取决于你在设置中设置的积分方法)。

【讨论】:

  • 长时间运行模拟不会导致输出达到预期值或相关性。虽然看起来 SIT 的 GUI 在显示图形拟合时使用 COMPARE 来预测一些初始条件,所以您可能是正确的。我相信要收集初始条件,我必须将tf 转换为状态空间模型并使用FINDSTATES 来收集估计的初始值。但是,我计算了一个具有显式零初始条件的新 tf,但这再次表明 SIM 中的相关性很差。固定时间步长求解器和连续tf 会导致问题吗?
  • 您使用的求解器可以以主导方式确定您的结果。我用 SL 原理图调整了我的答案,以检查 Simulink 中的离散化。
  • 你是正确的,这是初始条件。为遇到相同问题的其他人概述:1)将 tf 转换为状态空间模型 sys_ss=ss(sys) 2)将 ss 模型转换为 idss 格式 sys_idss=idss(sys_ss) 3)将模型与数据进行比较以找到初始状态 state=findstates(sys_idss,data) 4)使用 LTI在 Simulink 中使用 sys_ss 阻止并收集状态。非常感谢您强调这是 Egon 的问题,非常感谢。
  • 您能说出您使用的是离散求解器还是连续求解器?
猜你喜欢
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
相关资源
最近更新 更多