MATLAB:是否可以将数据集中的信号提取到各个变量中?

时间:2019-03-08 19:17:53

标签: python matlab dataset simulation simulink

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

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

然后,我想在DS的工作区中以编程方式创建以下变量,其中每个变量仅包含其数据值: 速度(100x1倍) 命令(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进行数据绘制。

1 个答案:

答案 0 :(得分:0)

在您想要的循环内

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

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

还有一个问题,即可能取决于要记录的数据量在工作区中创建很多变量。

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