Main Content

Simulink.SimulationData.Dataset

ログ記録されたシミュレーション データへのアクセスとシミュレーション入力データのグループ化

説明

Simulink.SimulationData.Dataset オブジェクトは、関連するデータをグループ化します。ログ記録されたシミュレーション結果は、多くの場合、Dataset オブジェクトにグループ化されます。Inport ブロックまたは Signal Editor ブロックを使用して初期状態を読み込むときや外部入力データを読み込むときに、Dataset オブジェクトを使用してシミュレーション入力データをグループ化することもできます。

シミュレーション データのログ記録で作成される Dataset オブジェクトには 1 つ以上の要素が含まれます。それぞれの要素に、ログ記録された 1 つの信号、出力、データ ストア、または状態のデータが格納されます。各要素はオブジェクトであり、オブジェクトのタイプは格納されるデータによって異なります。

シミュレーション入力データをグループ化する Dataset オブジェクトを作成する場合は、各要素に信号、バス、またはバス配列のデータが格納されます。使用する読み込み方法でサポートされる任意の形式でデータを追加できます。

入力のタイプデータ形式

スカラー、ベクトル、または多次元信号

バス

  • バスの階層と一致する timeseriestimetable、または matlab.io.datastore.SimulationDatastore のいずれかのオブジェクトの構造体

  • Simulink.SimulationData.Signal

バス配列

  • 構造体の配列

  • Simulink.SimulationData.Signal

関数呼び出し信号

  • N 行 1 列のベクトル

  • Simulink.SimulationData.Signal

作成

シミュレーション データのログ記録では、多くの場合に Simulink.SimulationData.Dataset オブジェクトが作成されます。これには次の場合が含まれます。

  • 信号ログを使用してデータをログ記録する。

  • [セータセット] 形式を使用して出力、状態、または最終状態をログ記録する。

  • データ ストアをログ記録する。

  • Record ブロックを使用してワークスペースまたは MAT ファイルにデータをログ記録する。

  • Scope ブロックを使用して [データセット] 形式でデータをログ記録する。

  • Floating Scope または Scope Viewer を使用してデータをログ記録する。

モデルに対する外部入力データを Dataset オブジェクトにグループ化するには、次の方法を使用できます。

  • 空の Dataset オブジェクトを作成し、関数 addElement を使用して入力データを追加します。

  • createInputDataset を使用して、モデルのルートレベルのそれぞれの Inport ブロックまたは In Bus Element ブロックの要素を格納する Dataset オブジェクトを作成します。次に、各要素のデータを指定します。

  • 信号エディターを使用して、シミュレーション入力データを格納する Dataset オブジェクトを対話形式で作成および編集します。詳細については、信号データの作成と編集を参照してください。

また、別の形式を使用するデータを [データセット] 形式を使用するように変換して Dataset オブジェクトを作成することもできます。すべてのデータを共通の形式にすることで後処理が簡単になります。詳細については、timeseries オブジェクトから Dataset オブジェクトへの変換を参照してください。

説明

ds = Simulink.SimulationData.Dataset は、要素を追加できる名前のない空の Dataset オブジェクトを作成します。この構文は、Inport ブロックまたは In Bus Element ブロックを使用して読み込む外部入力データを格納する Dataset オブジェクトを手動で作成する場合に使用します。

ds = Simulink.SimulationData.Dataset(dataToConvert) は、データ dataToConvert を格納する 1 つ以上の要素を含む名前のない Dataset オブジェクトを作成します。この構文は、別の形式を使用するデータを [データセット] 形式を使用するように変換する場合に使用します。詳細については、timeseries オブジェクトから Dataset オブジェクトへの変換を参照してください。

変換プロセスでは、一度に 1 つの入力に対するデータのみが変換されます。複数の変数に対するデータを変換するには、各変数を一度に 1 つずつ変換してから、結果の Dataset オブジェクトを関数 concat を使用して結合します。

ds = Simulink.SimulationData.Dataset(dataToConvert,"DatasetName",dsName) は、データ dataToConvert を格納する 1 つ以上の要素を含む dsName で指定された名前の Dataset オブジェクトを作成します。この構文は、別の形式を使用するデータを [データセット] 形式を使用するように変換する場合に使用します。詳細については、timeseries オブジェクトから Dataset オブジェクトへの変換を参照してください。

入力引数

すべて展開する

[データセット] 形式に変換するデータ。timeseries オブジェクト、構造体、配列、または Simulink.ModelDataLogs オブジェクトとして指定します。変換結果は入力データの形式によって異なります。

入力データ変換結果
timeseries オブジェクト

timeseries のデータが Values プロパティに格納された 1 つの Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

ModelDataLogs オブジェクト

入力オブジェクトの各信号のデータが格納された 1 つ以上の Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

[時間付き構造体] ログ形式と一致する構造体

入力構造体の各信号のデータが格納された 1 つ以上の Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

[構造体] ログ形式と一致する構造体

入力構造体の各信号のデータが格納された 1 つ以上の Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

入力に時間データがないため、各信号に対して、0 から始まり、サンプリング間隔 1 を使用する時間ベクトルが変換によって作成されます。

配列

1 つの Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。Signal オブジェクトの Values プロパティに timeseries オブジェクトが格納され、timeseries オブジェクトの Data プロパティに配列全体が格納されます。

入力に時間データがないため、信号に対して、0 から始まり、サンプリング間隔 1 を使用する時間ベクトルが変換によって作成されます。

詳細については、timeseries オブジェクトから Dataset オブジェクトへの変換およびDataset 形式へのデータの変換を参照してください。

Dataset オブジェクトの名前。string または文字ベクトルとして指定します。

出力引数

すべて展開する

Dataset オブジェクト。Simulink.SimulationData.Dataset オブジェクトとして返されます。入力引数を指定しないと Dataset オブジェクトは空になります。シミュレーション入力データを単一の変数にグループ化する場合は、空の Dataset オブジェクトを作成します。

入力引数を指定すると、入力データを格納する 1 つ以上の要素が Dataset オブジェクトに含まれます。変換結果は入力データの形式によって異なります。

入力データ変換結果
timeseries オブジェクト

timeseries のデータが Values プロパティに格納された 1 つの Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

ModelDataLogs オブジェクト

入力オブジェクトの各信号のデータが格納された 1 つ以上の Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

[時間付き構造体] ログ形式と一致する構造体

入力構造体の各信号のデータが格納された 1 つ以上の Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

[構造体] ログ形式と一致する構造体

入力構造体の各信号のデータが格納された 1 つ以上の Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。

入力に時間データがないため、各信号に対して、0 から始まり、サンプリング間隔 1 を使用する時間ベクトルが変換によって作成されます。

配列

1 つの Simulink.SimulationData.Signal オブジェクトを含む Dataset オブジェクト。Signal オブジェクトの Values プロパティに timeseries オブジェクトが格納され、timeseries オブジェクトの Data プロパティに配列全体が格納されます。

入力に時間データがないため、信号に対して、0 から始まり、サンプリング間隔 1 を使用する時間ベクトルが変換によって作成されます。

詳細については、timeseries オブジェクトから Dataset オブジェクトへの変換およびDataset 形式へのデータの変換を参照してください。

プロパティ

すべて展開する

Dataset オブジェクトの名前。string または文字ベクトルとして指定します。シミュレーション入力データをグループ化する Dataset オブジェクトを作成する場合は、Dataset オブジェクトの名前を指定します。指定する名前が Dataset オブジェクトを格納する変数の名前と一致している必要はありません。

シミュレーション データのログ記録で作成される Dataset オブジェクトの Name プロパティは、モデル コンフィギュレーション パラメーターで指定されたログ変数の名前と一致するように設定されます。

オブジェクト関数

addElementSimulink.SimulationData.Dataset オブジェクトの最後に要素を追加
concatSimulink.SimulationData.Dataset オブジェクトを別の Dataset オブジェクトに連結
exportToPreviousRelease任意のリリースで開くことができる MAT ファイルに Dataset オブジェクトを保存
extractTimetableExtract data from Simulink.SimulationData.Dataset or Simulink.SimulationData.Signal objects into timetables
findSimulink.SimulationData.Dataset オブジェクトから要素または要素の集合を取得
getSimulink.SimulationData.Dataset オブジェクトから要素または要素の集合を取得
getElementNamesSimulink.SimulationData.Dataset オブジェクト内のすべての要素の名前を返す
numElementsSimulink.SimulationData.Dataset オブジェクトの要素数を取得
plotシミュレーション データ インスペクターでデータをプロットする
removeElementRemove element from Simulink.SimulationData.Dataset object
setElement指定されたインデックスに格納された Simulink.SimulationData.Dataset オブジェクトの要素を変更

すべて折りたたむ

モデル vdp を開きます。このモデルは 2 つの出力 x1x2 を生成します。

mdl = "vdp";
open_system(mdl);

The model vdp.

モデルをシミュレートし、ブロックの状態を出力データと共にログ記録します。

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

すべてのログ データが Simulink.SimulationOutput オブジェクトとして単一の変数 out で返されます。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 オブジェクトが含まれています。

outputs = out.yout
outputs = 
Simulink.SimulationData.Dataset 'yout' with 2 elements

                         Name  BlockPath 
                         ____  _________ 
    1  [1x1 Signal]      x1    vdp/Out1 
    2  [1x1 Signal]      x2    vdp/Out2 

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

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
      ⋮

ステップを組み合わせて 1 行のコードで時間値またはデータ値にアクセスすることもできます。

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
      ⋮

3 つのシミュレーション入力信号のデータを作成し、それらを Dataset オブジェクトにグループ化します。簡単なモデルで 3 つのルートレベルの 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 ブロックを使用して外部入力データを読み込む場合、読み込むデータをモデル コンフィギュレーション パラメーターの [データのインポート/エクスポート] ペインで [入力] パラメーターを使用して指定します。モデル LoadInputDataset を開き、[入力] パラメーターが inputData として指定されていることを確認します。

open_system('LoadInputDataset.slx');

モデルをシミュレートします。1 番目の Inport ブロックに接続された Dashboard Scope ブロックで正弦信号が表示され、2 番目の Inport ブロックに接続された Dashboard Scope ブロックで余弦信号が表示され、3 番目の 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.

モデルを再度シミュレートします。Dataset オブジェクトの要素の新しい順序が反映されて、1 番目の要素を表示する Dashboard Scope ブロックで直線、3 番目の要素を表示する Dashboard Scope ブロックで正弦波が表示されるようになります。

out = sim('LoadInputDataset.slx');

ヒント

  • 中かっこ ({}) を使用して、Dataset オブジェクトの要素のインデックスを指定してアクセス、追加、変更できます。

  • Dataset オブジェクトの要素の名前を指定してアクセス、追加、変更するには、関数 getElementaddElementsetElement を使用します。

  • Dataset オブジェクトを使用してシミュレーション入力をグループ化する場合、信号エディターまたは Signal Editor ブロックを使用して、シミュレーションの入力を提供する Dataset オブジェクトを簡単に変更できます。

  • ルートレベルの Inport ブロックを使用して Dataset オブジェクトから外部入力データを読み込む場合、ルート Inport マッパーを使用して、ブロック名、ブロック パス、信号名、または端子の順序を指定して Dataset オブジェクトの各要素を Inport ブロックにマップできます。データをマップする独自の関数を記述することもできます。詳細については、ルート Inport 信号データのマッピングを参照してください。

  • Dataset オブジェクトのデータを MAT ファイルに保存する際、Dataset オブジェクトの内容が大きすぎてメモリに収まらない場合は Version 7.3 の MAT ファイルに保存することを検討します。データ処理やビッグ データの読み込み用に、データをメモリに読み込む代わりに MAT ファイル内の Dataset オブジェクトを参照する Simulink.SimulationData.DatasetRef を作成できます。詳細については、シミュレーションのためのビッグ データの読み込みを参照してください。

  • 以前のリリースで開くことができる MAT ファイルに Dataset オブジェクトを保存するには、関数 save の代わりに関数 exportToPreviousRelease を使用します。

  • Simulink.io.FileType クラスを使用して、ベース ワークスペース、モデル ワークスペース、または信号エディターの Dataset オブジェクトにファイルからデータをインポートする独自のリーダーを記述できます。詳細については、信号エディターにインポートするカスタム ファイル タイプの作成を参照してください。

バージョン履歴

R2011a で導入