Simulin金宝appk上的家伙

金宝app基于Simulink和模型的设计

以时间表格式加载信号

今天我决定重温几年前的一个话题:在模拟中加载离散信号。

让我们看看过去几年中添加了什么,以帮助在仿真中加载离散信号时可能遇到的潜在问题。

问题

让我们从一个有两个列的简单Excel表开始,第一个是时间和第二个信号值的第二个。我使数据相同的时间只是为了使这个问题更加明显。我们将使用的实际文件包含10,000行,停止时间为10秒钟。

Excel表

正如我在这个帖子,则可以使用来自电子表格块加载此信号。

如果你这样做,我强烈建议你要小心从Excel中加载时间列。尽管Excel中的时间点看起来是等距的,但它们可能并不像Simulink的时间步长那样等距。金宝app如果存在差异,您可能会以重复或遗漏点告终。

对于上面显示的文件,如果使用From电子表格块中的默认设置,下面是输出结果。底部轴上的尖是点被遗漏或重复的迹象。

Excel表

看到这个帖子有关如何配置来自电子表格块以避免此问题的详细信息。

对于今天的例子,我添加了一个额外的复杂性级别:

  • 我想通过根级别的Inport块加载信号
  • 我希望信号是公共汽车阵列的一部分
  • 我希望模型以不同的速率拥有多个根级的Inport块

使用下面的模型,我们想从Excel表格中加载信号,并将它赋值给Inport“u1”的元素“a.a1”:

示例模型

createInputdataset.

如果您有一个这样的模型,希望通过根级别的Inport块加载信号,那么最好从函数开始createInputdataset.

这个函数将分析您的模型并创建一个框架数据集对象这符合你的模型。

创建输入数据集

在这个数据集中,每个信号都是一个MATLABtimeseries有一个点在模拟开始时间和一个点在停止时间,两者的值为零。我们现在要做的就是用真实的数据替换那些数据。

时间表

此时,我们可以读取Excel文件并随着时间和第二列与第一列创建一个时间序列作为数据:

创建一个timeseries

然而,我们最终会遇到同样的问题……由于Excel中的时间列与Simulink所采取的步骤不相同,我们仍然看到一些遗漏点:金宝app

错误的结果

幸运的是,不使用时间序列,可以使用时间表。代替xlsread,可以直接使用readtimetable,这更现代,强大。

在下面的例子中,我还使用了时间表指定具有不同样本时间的其他信号。

时间表

通过对模型的模拟,我们可以确认没有点丢失或重复:

好的结果

现在轮到你了

在模拟中加载信号的首选方式是什么?请在下面的评论中告诉我们。

|

注释

请点击留下评论这里登录到你的MathWorks帐户或创建一个新的。