0

我在为我的 Simulink 模块使用导入工作区的数据时遇到问题。

我的情况:

在将此方法应用于实际的 Simulink 模块之前,我做了一个简单的框图来模拟结果。我利用“从工作区”块读取数据和观察输出的范围。这些是设置:

t=0:22/565:22
a.time=t
a.signals.values=ddata   %ddata contains [565x1] datas
a.signals.dimensions=1;

我意识到范围内的结果与数据不匹配。

我发现在这个网站上(http://blogs.mathworks.com/seth/2012/02/09/using-discrete-data-as-an-input-to-your-simulink-model/)采取的步骤Simulink 求解器与输入时间向量中指定的不同。

尝试解决:

我将时间向量设置为零,但出现错误。

a.time=[];

错误:“为'test/From Workspace'指定的连续采样时间无效。当来自工作空间的输入是没有时间数据的结构时,不允许连续采样时间。要消除此错误,请选择离散采样时间或更改输入数据包括时间数据。”

问题:

  1. 如何在不使用时间向量的情况下解决此错误?

  2. 将每个时间步的一行读入 Simulink 模块而不是整个数据列表的最佳方法是什么?

如果有人可以为我的案例提供见解/解决方案/替代方法,我将不胜感激。

4

2 回答 2

0

数据中的时间向量与 Simulink 在模拟模型时将使用的时间步长几乎没有关系。将您的输入时间/数据视为一个查找表,Simulink 将使用它来获取每个时间步长(它决定采用)的输入值(使用插值)。

要强制 Simulink 在给定时间点采取步骤,您需要在“配置参数”对话框的“求解器”页面上更改参数。听起来您想使用步长为 22/565 的固定步长求解器。

于 2013-03-29T16:23:00.323 回答
0

也许您可以使用一维查找表块?您将时间向量用作断点,将 ddata 用作表数据。如果 Simulink 在时间向量中的点之间有一个时间点,您可以使用线性/三次插值或使用最近的点。通过这种方式,您可以避免将 Simulink 强制到某些时间点。

在此处输入图像描述

于 2020-08-05T09:40:04.897 回答