MATLAB中Simulink.SimulationData.Dataset用法

目录

语法

说明

示例

访问使用Dataset格式记录的数据 打开模型vdp

使用 Dataset 对象来组合模拟输入信号


        Simulink.SimulationData.Dataset的功能是访问已记录的模拟数据或组合模拟输入数据。

语法

ds = Simulink.SimulationData.Dataset
ds = Simulink.SimulationData.Dataset(dataToConvert)
ds = Simulink.SimulationData.Dataset(dataToConvert,"DatasetName",dsName)

说明

        ds = Simulink.SimulationData.Dataset:这种语法创建一个空的、未命名的Dataset对象,可以随后手动添加元素。通常在您希望创建一个空的Dataset对象来存储要使用Inport或In Bus Element块加载的外部输入数据时使用。

        ds = Simulink.SimulationData.Dataset(dataToConvert):这种语法创建一个未命名的Dataset对象,其中包含一个或多个元素,每个元素包含由dataToConvert指定的数据。可以使用这种语法将使用其他格式的数据转换为Dataset格式。有关详细信息,请参阅将timeseries对象转换为Dataset对象。

        ds = Simulink.SimulationData.Dataset(dataToConvert, "DatasetName", dsName):这种语法创建一个以dsName指定名称的Dataset对象,其中包含一个或多个元素,每个元素包含由dataToConvert指定的数据。这种语法也用于将其他格式的数据转换为Dataset格式,但它允许您为Dataset指定名称。

示例

访问使用Dataset格式记录的数据 打开模型vdp

        该模型产生两个输出x1和x2。

mdl = "vdp";
open_system(mdl);

如图所示:

模拟该模型,并同时记录块状态和输出数据。

out = sim(mdl,"SaveState","on");

        所有已记录的数据都以单个变量 "out" 返回,它是一个 Simulink.SimulationOutput 对象。SimulationOutput 对象包含一个 Simulink.SimulationData.Dataset 对象,该对象将每种已记录的数据分组在一起。

out
out = 
  Simulink.SimulationOutput:
                   tout: [64x1 double] 
                   xout: [1x1 Simulink.SimulationData.Dataset] 
                   yout: [1x1 Simulink.SimulationData.Dataset] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

        使用点符号访问包含已记录输出数据的 Dataset 对象 "yout"。该 Dataset 对象包含每个输出的 Simulink.SimulationData.Signal 对象。

out
out = 
  Simulink.SimulationOutput:
                   tout: [64x1 double] 
                   xout: [1x1 Simulink.SimulationData.Dataset] 
                   yout: [1x1 Simulink.SimulationData.Dataset] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

        Signal 对象包含关于信号的元数据,包括生成信号的块的路径和端口的索引。使用 getElement 函数按名称访问包含信号 x1 数据的 Signal 对象。您还可以使用花括号({}) 按索引访问 Dataset 对象中的元素。

outputX1 = getElement(outputs,'x1')
outputX1 = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'x1'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'inport'
         PortIndex: 1
            Values: [1x1 timeseries]

        信号数据存储在 Signal 对象的 Values 属性中,以 timeseries 对象的形式。

outputValsX1 = outputX1.Values
  timeseries

  Common Properties:
            Name: 'x1'
            Time: [64x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [64x1 double]
        DataInfo: tsdata.datametadata

        时间值位于 timeseries 对象的 Time 属性中,信号值位于 Data 属性中。

outputTimesX1 = outputValsX1.Time
outputTimesX1 = 64×1

         0
    0.0001
    0.0006
    0.0031
    0.0157
    0.0785
    0.2844
    0.5407
    0.8788
    1.2788
      ⋮

outputDataX1 = outputValsX1.Data
outputDataX1 = 64×1

    2.0000
    2.0000
    2.0000
    2.0000
    1.9998
    1.9943
    1.9379
    1.8155
    1.5990
    1.2687
      ⋮

        还可以将这些步骤合并到一行代码中以访问时间值或数据值。

outputDataX1 = getElement(out.yout,'x1').Values.Data
outputDataX1 = 64×1

    2.0000
    2.0000
    2.0000
    2.0000
    1.9998
    1.9943
    1.9379
    1.8155
    1.5990
    1.2687
      ⋮

使用 Dataset 对象来组合模拟输入信号

        创建三个模拟输入信号的数据,并将它们组合到一个 Dataset 对象中。一个简单的模型使用三个根级 Inport 块来加载 Dataset 对象的内容。模型中的 Dashboard Scope 块显示使用加载的输入数据创建的每个信号。

        首先,创建要加载到模型中的信号数据。在建模离散输入信号时,可以使用此示例中的表达式创建均匀间隔的时间向量。MATLAB® 支持多种其他方法来创建均匀间隔的向量,但其他方法可能会在时间数据中引入双精度舍入误差,从而导致意外的模拟结果。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(0:numSteps-1);
time = time';

        创建正弦信号、余弦信号和线性信号的信号数据。

sineVals = sin(2*pi/3*time);
cosVals = cos(2*pi/3*time);
lineVals = time;

        创建一个 timeseries 对象来存储每个信号的数据。为每个 timeseries 对象赋予一个描述性名称,以便在它们被组合到 Dataset 对象中后,信号可以容易识别。

sineTS = timeseries(sineVals,time,'Name','Sine Wave');
cosTS = timeseries(cosVals,time,'Name','Cosine Wave');
lineTS = timeseries(lineVals,time,'Name','Line');

        创建一个 Dataset 对象,并使用 addElement 函数将每个 timeseries 对象添加到 Dataset 对象中。

inputData = Simulink.SimulationData.Dataset;
inputData.Name = 'inputData';
inputData = addElement(inputData,sineTS);
inputData = addElement(inputData,cosTS);
inputData = addElement(inputData,lineTS)
inputData = 
Simulink.SimulationData.Dataset 'inputData' with 3 elements

                             Name         BlockPath 
                             ___________  _________ 
    1  [1x1 timeseries]      Sine Wave    ''       
    2  [1x1 timeseries]      Cosine Wave  ''       
    3  [1x1 timeseries]      Line         ''       

  - Use braces { } to access, modify, or add elements using index.

        当使用根级Inport块加载外部输入数据时,您需要在“数据导入/导出”面板的“模型配置参数”中的“Input”参数中指定要加载的数据。打开模型LoadInputDataset并查看Input参数已指定为inputData。

open_system('LoadInputDataset.slx');

        对模型进行仿真。与第一个Inport块连接的Dashboard Scope块显示正弦信号,与第二个Inport块连接的Dashboard Scope块显示余弦信号,与第三个Inport块连接的Dashboard Scope块显示线性信号。

out = sim('LoadInputDataset.slx');

如图所示:

        可以交换Dataset对象中元素的顺序,然后在元素与Inport块的映射方式上看到相应的变化。

inputData{1} = lineTS;
inputData{3} = sineTS
inputData = 
Simulink.SimulationData.Dataset 'inputData' with 3 elements

                             Name         BlockPath 
                             ___________  _________ 
    1  [1x1 timeseries]      Line         ''       
    2  [1x1 timeseries]      Cosine Wave  ''       
    3  [1x1 timeseries]      Sine Wave    ''       

  - Use braces { } to access, modify, or add elements using index.

        再次对模型进行仿真。现在,显示第一个元素的Dashboard Scope块显示直线,而显示第三个元素的Dashboard Scope块显示正弦波,反映了Dataset对象中元素的新顺序。

out = sim('LoadInputDataset.slx');

如图所示:

        一个Simulink.SimulationData.Dataset对象用于组合相关的数据。通常,已记录的模拟结果会被组织在Dataset对象中。当加载初始状态以及使用Inport块或Signal Editor块加载外部输入数据时,也可以使用Dataset对象来组合模拟输入数据。

        通过记录模拟数据创建的Dataset对象包含一个或多个元素。每个元素包含一个已记录的信号、输出、数据存储或状态的数据。每个元素都是一个对象,对象的类型取决于它所包含的数据类型。

        信号和输出 — Simulink.SimulationData.Signal对象

        状态和最终状态 — Simulink.SimulationData.State对象

        数据存储 — Simulink.SimulationData.DataStoreMemory对象

当创建一个用于组合模拟输入数据的Dataset对象时,每个元素包含一个信号、总线或总线数组的数据。可以使用任何受支持的加载方法支持的数据格式添加数据。

通常,在记录模拟数据时,会创建一个Simulink.SimulationData.Dataset对象,包括以下情况:

  1. 使用信号记录时记录数据。
  2. 使用Dataset格式记录输出、状态或最终状态数据。
  3. 记录数据存储。
  4. 使用记录块将数据记录到工作区或MAT文件中。
  5. 使用Scope块以Dataset格式记录数据。
  6. 使用Floating Scope或Scope Viewer记录数据。

要将模型的外部输入数据组合到Dataset对象中,您可以执行以下操作:

  1. 创建一个空的Dataset对象,并使用addElement函数添加输入数据。
  2. 使用createInputDataset创建一个Dataset对象,其中包含模型中每个根级Inport块或In Bus Element块的元素。然后,指定每个元素的数据。
  3. 使用Signal Editor交互式地创建和编辑包含模拟输入数据的Dataset对象。有关详细信息,请参阅创建和编辑信号数据。

        还可以通过将使用其他格式的数据转换为使用Dataset格式的数据来创建Dataset对象。将所有数据保存在一个通用格式中可以简化后处理过程。有关详细信息,请参阅将timeseries对象转换为Dataset对象。

注意:

  • 可以使用花括号({})按索引访问、添加或修改Dataset对象中的元素。

  • 要通过名称访问、添加或修改Dataset对象的元素,可以使用getElement、addElement和setElement函数。

  • 当使用Dataset对象组合模拟输入时,您可以使用Signal Editor或Signal Editor块轻松更改提供模拟输入的Dataset对象。

  • 当使用根级Inport块从Dataset对象加载外部输入数据时,可以使用Root Inport Mapper将Dataset对象中的每个元素按块名称、块路径、信号名称或端口顺序映射到Inport块。也可以编写自己的函数来进行数据映射。

  • 当将Dataset对象中的数据保存到MAT文件时,如果Dataset对象的内容过大而无法完全装入内存,考虑保存到Version 7.3 MAT文件。您可以创建一个Simulink.SimulationData.DatasetRef,它引用了一个MAT文件中的Dataset对象,而不需要将数据加载到内存中进行数据处理或加载大数据。

  • 要将Dataset对象保存到一个可以在早期版本中打开的MAT文件中,请使用save函数而不是exportToPreviousRelease函数。

  • 可以编写自己的读取器,使用Simulink.io.FileType类将数据从文件导入到基础工作区、模型工作区或Signal Editor中的Dataset对象。

相关推荐

  1. matlabsyms

    2024-07-17 21:48:03       32 阅读
  2. MATLABdlmwrite函数

    2024-07-17 21:48:03       53 阅读
  3. MATLABcell函数的

    2024-07-17 21:48:03       59 阅读
  4. MATLABslist函数

    2024-07-17 21:48:03       53 阅读
  5. MATLABmapminmax函数

    2024-07-17 21:48:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 21:48:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 21:48:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 21:48:03       57 阅读
  4. Python语言-面向对象

    2024-07-17 21:48:03       68 阅读

热门阅读

  1. 昇思25天学习打卡营第25天|SSD目标检测

    2024-07-17 21:48:03       20 阅读
  2. 怎么选择适合自己的酱香白酒?

    2024-07-17 21:48:03       19 阅读
  3. UDP协议

    UDP协议

    2024-07-17 21:48:03      21 阅读
  4. D365 Fraud Protection Account Protection部署方案

    2024-07-17 21:48:03       25 阅读
  5. 解决数据卷root权限问题的Docker科研向实践思路

    2024-07-17 21:48:03       24 阅读
  6. Webservice使用RestSharp封送SOAP

    2024-07-17 21:48:03       23 阅读
  7. 关于HDFS 和HBase

    2024-07-17 21:48:03       18 阅读
  8. python基础语法

    2024-07-17 21:48:03       22 阅读