【问题标题】:How can I save output from Simulink?如何保存 Simulink 的输出?
【发布时间】:2015-03-10 21:42:00
【问题描述】:

我是一名正在学习使用 MATLAB 的学生。对于作业,我必须创建一个简单的状态机并收集一些结果。我习惯使用 Verilog/Modelsim,我只想在状态机的输出发生变化时收集数据,这不一定是每次/采样周期。

现在我有一个看起来像这样的模型:

RequestChart ----> ResponseChart ----> Unit Delay Block --> (Back to RequestChart)
               |                  |
               ------------------------> Mux --> "To Workspace" Sink Block

我尝试将接收器块设置为另存为“数组”格式,但它只保存 51 个值。我尝试将其设置为“Timeseries”,但它节省了大量的零值。

谁能给我一些建议?就像我说的,MATLAB 对我来说是新的,如果我需要澄清我的问题或提供更多信息,请告诉我。

编辑:这是我的模型的屏幕截图:

【问题讨论】:

  • to workspace 块应该可以解决问题。您能否添加保存变量的模型(部分)的屏幕截图,以便我们查看块本身是否正确?
  • @WouterKuijsters 这张图片有用吗?

标签: matlab simulink stateflow


【解决方案1】:

通常 Simulink 会在每个集成步骤输出一个样本。如果您只想在特定事件发生时输出数据——在这种情况下,只有当某些数据发生变化时——然后执行以下操作,

  • 将状态机的输出运行到 Detect Change 模块(来自逻辑和位操作库)
  • 将该信号运行到触发子系统的触发端口。
  • 将状态机的输出运行到触发子系统的数据端口。
  • 在触发子系统内,将数据信号运行到 To Workspace 模块中。

数据只会在触发发生的时间点保存,即当您的数据发生变化时。

【讨论】:

    【解决方案2】:

    在您的 Simulink 窗口中,确保相对容差较小,以便您可以在开始时间和结束时间之间生成更多点。单击窗口顶部的 Simulation 选项,然后单击模型配置参数。

    从那里,将相对容差更改为较小的值...例如1e-10。之后,再次尝试运行模拟。您现在可以在输出数组中保存更多点。

    【讨论】:

    • 我将相对容差更改为1e-10,并将接收器块保存格式保持为“数组”。我重新运行了模拟(模拟停止时间为“500”和“5000”),但仍然只有 51 个值。工作区显示变量“simout”,其值为“51x8 double”,最小值为“0”,最大值为“1”。
    • @John - Weird...我们可以获取您的 Simulink 模型的副本,以便我们尝试一下吗?
    • 由于您有一个离散时间模型,因此更改相对容差将无效。您将获得 51 个输出点,因为默认情况下最大步长(在这种情况下模型将采用的)是 (Stop Time - Start Time)/50,即 Simulink 被硬编码为执行 50 步(给您 51在这种情况下,包括 t=0) 的时间点。要获得更多点(在此特定模型中),请选择固定步长求解器并指定适当的采样率,或选择任何求解器(尽管您需要固定步长离散的速度)并在单元延迟中设置适当的采样率块。
    • @PhilGoddard - 谢谢!很高兴知道。希望 OP 可以接受并运行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多