首页 > 解决方案 > MATLAB:是否可以将数据集中的信号提取到单个变量中?

问题描述

将 Simulink Simulation 数据导出到 .mat 文件时,数据存储为 Simulink.SimulationData.Dataset 类,其中包含所有记录的信号(属于 Simulink.SimulationData.Signal 类)。是否可以将所有信号值数据提取到具有相同信号名称的新数组变量中?

例如,DS(1x1 数据集)包含两个信号:速度(1​​x1 信号)命令(1x1 信号)

然后我想从 DS 以编程方式在我的工作区中创建以下变量,其中每个变量只包含它们的数据值:速度(1​​00x1 双)命令(100x1 双)

我最初的想法是编写一个脚本来在 for 循环中创建新变量。类似于以下内容:

NumDatasetElements=data.numElements
for a = 1:NumDatasetElements
    data{a}.Name=data{a}.Values.data
end

这显然不起作用,但我认为它显示了我正在尝试做的事情。我需要创建一个名为 data{a}.Name 的变量,然后将其设置为 data{a}.Values.data。

我尝试这样做的原因是因为我发现使用 sio.loadmat 函数填充了数组变量的 .mat 文件很容易作为字典导入到 Python 中,而数据集则没有。我的最终目标是轻松将 Simulink Simulation 数据导入 Python,以利用 matplotlib 进行数据绘图。

标签: pythonmatlabdatasetsimulationsimulink

解决方案


在你想要的循环内

assignin('base',data{a}.Name,data{a}.Values.data);

但是,您可能需要处理一些问题。具体来说,如果信号没有名称怎么办,如果数据不是数组(即它可能是timeseries. (上面的代码可以工作,但不能为您提供轻松读入 python 所需的数据。)您需要添加一些代码来处理这两种情况。

还有一个问题是可能会在您的工作区中创建大量变量,具体取决于您记录的数据量。

您可能还会发现您可以将保存数据的格式更改为array,在这种情况下,上述任何一项都不需要。


推荐阅读