Main Content

记录的仿真数据的数据格式

基于模块的记录数据的数据格式

您可以使用 ScopeTo FileTo WorkspacePlaybackRecord 模块导出仿真数据。这些模块都有一个数据格式参数。

基于模型的记录数据的数据格式

基于模型导出仿真数据的数据格式指定 Simulink® 如何存储导出的数据。

根据导出的数据类型,Simulink 使用不同的数据格式。有关详细信息,请参阅:

信号记录格式

信号记录始终使用 Dataset 格式。您可以指定是将单个信号的数据记录为 timeseries 还是 timetable 对象。

要控制如何保存 Dataset 元素,请设置数据集信号格式配置参数。默认值为 timeseries。有关详细信息,请参阅 Dataset signal format

格式参数设置为 Dataset 时,数据集信号格式参数将应用于信号记录以及输出和状态数据。

记录的数据存储数据格式

当您记录数据存储数据时,Simulink 将使用 Simulink.SimulationData.Dataset 对象。

有关详细信息,请参阅Accessing Data Store Logging Data

时间、状态和输出数据格式

对于导出的时间、状态和输出数据,请使用以下格式之一:

如果选中配置参数 > 数据导入/导出 > 输出复选框,Simulink 会将定点数据记录为双精度。要记录定点数据,请考虑使用以下方法之一:

  • 信号记录 - 有关详细信息,请参阅使用信号记录保存信号数据

    1. 在 Simulink 编辑器中,选择一个或多个信号。

    2. 点击记录信号

  • To File 模块

  • To Workspace 模块 - 在 To Workspace“模块参数”对话框中,启用将定点数据记录为 fi 对象参数。

有关记录的最终状态数据的格式信息,请参阅Save Block States and Simulation Operating Points

数据集

默认情况下,使用 Dataset 格式记录时间、状态和输出。Dataset 格式:

  • 将记录的数据存储在 timeseriestimetable 对象中。您可以使用保存在 MATLAB® 中的 timeseriestimetable 对象中的数据,而无需 Simulink 许可证。

  • 支持对一个给定的时间步记录多个数据值,这对于在 For Iterator SubsystemWhile Iterator Subsystem 和 Stateflow® 中记录数据可能是必需的。

  • 不支持记录函数调用子系统内部或快速加速仿真期间的状态。

  • 不支持代码生成。

信号记录始终使用 Dataset 格式。使用 Dataset 格式记录状态和输出数据允许您对仿真数据进行后处理,而无需为不同类型的记录数据编写自定义代码。当您使用 Dataset 格式记录状态和输出时,数据也会在仿真期间自动流向仿真数据检查器。

数组

如果选择此数组选项,Simulink 会将模型的状态和输出分别保存在状态中和输出数组中。

状态矩阵的名称在配置参数 > 数据导入/导出窗格中指定(例如,xout)。状态矩阵的每一行对应模型状态的一个时间样本。每一列对应状态的一个元素。例如,假设您的模型有两个连续状态,每个状态都是二元素向量。那么,状态矩阵每一行中的前两个元素包含第一个状态向量的时间样本。每一行中的最后两个元素包含第二个状态向量的时间样本。

模型输出矩阵的名称在配置参数 > 数据导入/导出窗格中指定(例如,yout)。每一列对应一个模型输出端口,每一行对应一个特定时间点的输出。

注意

仅当记录的数据满足以下所有条件时,才能使用数组格式保存模型输出和状态:

  • 数据全为标量或全为向量(对于状态,则全为矩阵)

  • 数据全为实数或全为复数

  • 数据全部具有相同的数据类型

  • 数据包括总线信号

如果您的模型输出和状态不符合这些条件,请使用 StructureStructure 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 模块或状态类型(连续或离散)的信号的标签。标签为 DSTATECSTATE,但 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 结构体有四个字段:valuesdimensionslabelblockNamevalues 字段包含由 blockName 字段指定的模块状态的时间样本。内置模块的 label 字段指示状态的类型:CSTATE(连续状态)或 DSTATE(离散状态)。对于 S-Function 模块,标签包含由 S-Function 模块为状态指定的任何名称。

状态的时间样本以值矩阵的形式存储在 values 字段中。每一行对应一个时间样本。每一个行元素对应一个状态元素。如果状态是矩阵,则矩阵按列优先的顺序存储在 values 数组中。例如,假设模型中包含一个 2×2 矩阵状态,并且在仿真运行期间记录了 51 个状态样本。

此状态的 values 字段中将包含一个 51×4 矩阵。每一行对应状态的一个时间样本,每一行的前两个元素对应样本的第一列。最后两个元素对应样本的第二列。

注意

Simulink 可以读回以 Structure with time 输出格式保存到 MATLAB 工作区中的仿真数据。有关详细信息,请参阅指定信号和时间数据的示例

结构体

此格式与带时间的结构体输出格式相同,但不同之处在于 Simulink 不会将仿真时间存储在保存的结构体的 time 字段中。

另请参阅

|

相关示例

详细信息