记录的仿真数据的数据格式
基于模块的记录数据的数据格式
您可以使用 Scope、To File 或 To Workspace 模块导出仿真数据。这些模块都有一个数据格式参数。
基于模型的记录数据的数据格式
基于模型导出仿真数据的数据格式指定 Simulink® 如何存储导出的数据。
根据导出的数据类型,Simulink 使用不同的数据格式。有关详细信息,请参阅:
信号记录格式
信号记录始终使用 Dataset
格式。您可以指定是将单个信号的数据记录为 timeseries
还是 timetable
对象。
要控制如何保存 Dataset
元素,请设置数据集信号格式配置参数。默认值为 timeseries
。有关详细信息,请参阅 Dataset signal format。
当格式参数设置为 Dataset
时,数据集信号格式参数将应用于信号记录以及输出和状态数据。
记录的数据存储数据格式
当您记录数据存储数据时,Simulink 将使用 Simulink.SimulationData.Dataset
对象。
有关详细信息,请参阅Accessing Data Store Logging Data。
时间、状态和输出数据格式
对于导出的时间、状态和输出数据,请使用以下格式之一:
如果选中配置参数 > 数据导入/导出 > 输出复选框,Simulink 会将定点数据记录为双精度。要记录定点数据,请考虑使用以下方法之一:
信号记录 - 有关详细信息,请参阅使用信号记录导出信号数据。
在 Simulink 编辑器中,选择一个或多个信号。
点击记录信号。
To File 模块
To Workspace 模块 - 在 To Workspace“模块参数”对话框中,启用将定点数据记录为 fi 对象参数。
有关记录的最终状态数据的格式信息,请参阅Save Block States and Simulation Operating Points。
数据集
默认情况下,使用 Dataset
格式记录时间、状态和输出。Dataset
格式:
将记录的数据存储在
timeseries
或timetable
对象中。您可以使用保存在 MATLAB® 中的timeseries
或timetable
对象中的数据,而无需 Simulink 许可证。支持对一个给定的时间步记录多个数据值,这对于在 For Iterator Subsystem、While Iterator Subsystem 和 Stateflow® 中记录数据可能是必需的。
不支持记录函数调用子系统内部或快速加速仿真期间的状态。
不支持代码生成。
信号记录始终使用 Dataset
格式。使用 Dataset
格式记录状态和输出数据允许您对仿真数据进行后处理,而无需为不同类型的记录数据编写自定义代码。当您使用 Dataset
格式记录状态和输出时,数据也会在仿真期间自动流向仿真数据检查器。
数组
如果选择此“数组
”选项,Simulink 会将模型的状态和输出分别保存在状态中和输出数组中。
状态矩阵的名称在配置参数 > 数据导入/导出窗格中指定(例如,xout
)。状态矩阵的每一行对应模型状态的一个时间样本。每一列对应状态的一个元素。例如,假设您的模型有两个连续状态,每个状态都是二元素向量。那么,状态矩阵每一行中的前两个元素包含第一个状态向量的时间样本。每一行中的最后两个元素包含第二个状态向量的时间样本。
模型输出矩阵的名称在配置参数 > 数据导入/导出窗格中指定(例如,yout
)。每一列对应一个模型输出端口,每一行对应一个特定时间点的输出。
注意
仅当记录的数据满足以下所有条件时,才能使用数组格式保存模型输出和状态:
数据全为标量或全为向量(对于状态,则全为矩阵)
数据全为实数或全为复数
数据全部具有相同的数据类型
数据包括总线信号
如果您的模型输出和状态不符合这些条件,请使用 Structure
或 Structure with time
输出格式(请参阅 带时间的结构体)。
带时间的结构体
如果您选择这种格式,Simulink 会将模型状态和输出保存到结构体中,结构体的名称在配置参数 > 数据导入/导出窗格中指定。默认情况下,保存状态的结构体为 xout
,保存输出的结构体为 yout
。
用来保存输出的结构体有两个顶层字段:
time
包含仿真时间向量。
signals
包含子结构体数组,每个子结构体对应一个模型输出端口。
每个子结构体有四个字段:
values
包含对应输出端口的输出。
如果输出是标量或向量 -
values
字段是矩阵,每一行代表由对应的时间向量元素指定的时间点的输出。如果输出是矩阵(二维)值 -
values
字段是维度为 M×N×T 的三维数组。M×N 是输出信号的维度,T 是输出样本的数量。如果 T = 1 - MATLAB 将丢弃最后一个维度。因此,
values
字段是一个 M×N 矩阵。
dimensions
指定输出信号的维度。
label
指定连接到输出端口、S-Function 模块或状态类型(连续或离散)的信号的标签。标签为
DSTATE
或CSTATE
,但 S-Function 模块状态标签除外。对于离散状态的 S-Function 模块状态标签,标签是状态的名称(而不是DSTATE
)。blockName
指定具有状态的对应输出端口或模块的名称。
inReferencedModel
如果
signals
字段记录位于引用模型内的模块的最终状态,则包含值1
。否则,值为 false (0
)。
以下示例说明非引用模型的带时间的结构体格式。
xout.signals(1)
ans = values: [296206x1 double] dimensions: 1 label: 'CSTATE' blockName: 'vdp/x1' inReferencedModel: 0
用来保存状态的结构体具有类似的组织结构。状态结构体有两个顶层字段:
time
time
字段包含仿真时间向量。signals
此字段包含一个子结构体数组,每个子结构体对应模型的一个状态。
每个 signals
结构体有四个字段:values
、dimensions
、label
和 blockName
。values
字段包含由 blockName
字段指定的模块状态的时间样本。内置模块的 label
字段指示状态的类型:CSTATE
(连续状态)或 DSTATE
(离散状态)。对于 S-Function 模块,标签包含由 S-Function 模块为状态指定的任何名称。
状态的时间样本以值矩阵的形式存储在 values
字段中。每一行对应一个时间样本。每一个行元素对应一个状态元素。如果状态是矩阵,则矩阵按列优先的顺序存储在 values
数组中。例如,假设模型中包含一个 2×2 矩阵状态,并且在仿真运行期间记录了 51 个状态样本。
此状态的 values
字段中将包含一个 51×4 矩阵。每一行对应状态的一个时间样本,每一行的前两个元素对应样本的第一列。最后两个元素对应样本的第二列。
注意
Simulink 可以读回以 Structure with time
输出格式保存到 MATLAB 工作区中的仿真数据。有关详细信息,请参阅指定信号和时间数据的示例。
结构体
此格式与“带时间的结构体
”输出格式相同,但不同之处在于 Simulink 不会将仿真时间存储在保存的结构体的 time
字段中。
另请参阅
Simulink.SimulationData.Dataset
| Simulink.SimulationData.forEachTimeseries