Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

matlab.io.datastore.SimulationDatastore クラス

パッケージ: matlab.io.datastore

Simulink モデルの入力および出力用データ ストア

説明

matlab.io.datastore.SimulationDatastore オブジェクトにより、Simulink® モデルでビッグ データを操作できます。ビッグ データをシミュレーション入力として読み込み、シミュレーションからのビッグ出力データをログに記録できます。ビッグ データでモデルのシミュレーションを実行するためには、データを MAT ファイルに保存し、SimulationDatastore オブジェクトを介してデータを参照します。シミュレーションのためのビッグ データの処理を参照してください。

SimulationDatastore オブジェクトは 1 つの信号の (MAT ファイルに格納される) ビッグ シミュレーション データを参照します。MAT ファイルにバス信号のシミュレーション データが保存される場合、SimulationDatastore オブジェクトは、バス内の 1 つのリーフ信号要素のデータを参照します。データ ストア オブジェクトを使用してデータを検査したりアクセスし、Simulink.SimulationData.Signal などの親オブジェクトを使って、そのデータで Simulink モデルのシミュレーションを実行できます。

データ ストアのデータを解析するには、SimulationDatastore オブジェクトのメソッドとプロパティおよび関数 tall などの MATLAB® ツールを使用できます。MATLAB ツールの詳細については、データ ストア入門を参照してください。

作成

MAT ファイルに Simulink.SimulationData.Dataset オブジェクトのビッグ シミュレーション データを保存した後、Dataset オブジェクトの信号要素はビッグ データを指し示します。ビッグ データを参照する matlab.io.datastore.SimulationDatastore オブジェクトを作成するには、次を行います。

  1. コマンド プロンプトまたはスクリプトで、MAT ファイルの Dataset オブジェクトを参照する Simulink.SimulationData.DatasetRef オブジェクトを作成します。

  2. 以下のいずれかの方法を使用します。

    • 1 ベースの中かっこによるインデックス付け (たとえば {1}) を使用して、Simulink.SimulationData.SignalSimulink.SimulationData.State などのターゲット信号要素を表すオブジェクトを返します。たとえば、logsout_ref という名前の DatasetRef オブジェクトの場合、2 つ目の信号要素を参照する Signal オブジェクトを作成するには、次のコードを使用します。

      myLoggedSig = logsout_ref{2}

    • DatasetRef オブジェクトの getAsDatastore メソッドを使用して、ターゲットの信号要素を表すオブジェクトを返します。詳細については、getAsDatastore を参照してください。

SimulationDatastore オブジェクトは、返されるオブジェクトの Values プロパティに存在します。

プロパティ

すべて展開する

ビッグ データを含むファイルの名前とパス。文字ベクトルとして返されます。このプロパティは読み取り専用です。

データ型: char

データ ストア内のサンプル (タイム ステップ) の合計数。整数として返されます。readall メソッドは、この多くのサンプルをビッグ データから抽出します。このプロパティは読み取り専用です。

データ型: uint64

一度に読み取るデータの量。サンプル (タイム ステップ) 数で表し、double 型のスカラーとして指定します。read メソッドは、この多くのサンプルをビッグ データから抽出します。

データ型: double

メソッド

hasdataデータが読み取り可能かどうかを判別
isPartitionableデータストアが分割可能かどうかを判別
isShuffleableデータストアがシャッフル可能かどうかを判別
previewデータ ストアからデータのサブセットを返す
progressデータ ストアから読み取ったデータの割合を返す
readデータ ストアのデータの読み取り
readallデータ ストアのすべてのデータの読み取り
resetデータ ストアの初期状態へのリセット

コピーのセマンティクス

ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピーを参照してください。

制限

  • SimulationDatastore は、Parallel Computing Toolbox™ がインストールされている状態での並列プールの使用をサポートしません。tall 配列を使用してデータを解析する、または MapReduce アルゴリズムを実行するには、mapreducer を使用してグローバルな実行環境をローカルの MATLAB セッションに設定します。次のコードを入力します。

    mapreducer(0)
    並列リソースの制御の詳細については、並列プール上での mapreduce の実行 (Parallel Computing Toolbox)を参照してください。

  • MATLAB tall 変数はシミュレーション入力データとして使用できません。

すべて折りたたむ

この例では、シミュレーションからのビッグ データをログに記録し、matlab.io.datastore.SimulationDatastore オブジェクトを操作してそのデータの一部を検査および解析する方法を示します。

モデルからのビッグ データのログ記録

モデル例 sldemo_fuelsys を開きます。

open_system('sldemo_fuelsys')

[コンフィギュレーション パラメーター]、[データのインポート/エクスポート]、[データセットのデータをファイルにログ] を選択します。

set_param('sldemo_fuelsys','LoggingToFile','on')

モデルのシミュレーションを実行します。

sim('sldemo_fuelsys')

現在のフォルダーに MAT ファイル out.mat が表示されます。ファイルには、fuel (モデルのルート レベルにある) などのログに記録された信号のデータが含まれます。

コマンド プロンプトで、名前 sldemo_fuelsys_output でログ変数を参照する DatasetRef オブジェクトを作成します。

DSRef = Simulink.SimulationData.DatasetRef('out.mat','sldemo_fuelsys_output');

ビッグ データのプレビュー

中かっこ ({}) を使用して信号要素 fuel を抽出します。この信号要素は、SimulationDatastore オブジェクトを含む・Simulink.SimulationData.Signal オブジェクトとして、DSRef の 10 番目の要素になります。

SimDataSig = DSRef{10};

Signal オブジェクトの Values プロパティに存在する SimulationDatastore オブジェクトの操作を簡単にするためには、DStore という名前の変数にハンドルを格納します。

DStore = SimDataSig.Values;

preview メソッドを使用して、fuel 信号のログに記録されたデータの最初の 5 つのサンプルを検査します。

preview(DStore)
ans =

  10x1 timetable

         Time          Data 
    ______________    ______

    0 sec              1.209
    0.00056199 sec     1.209
    0.0033719 sec      1.209
    0.01 sec          1.1729
    0.02 sec          1.1409
    0.03 sec          1.1124
    0.04 sec          1.0873
    0.05 sec          1.0652
    0.055328 sec      1.0652
    0.055328 sec      1.0652

特定のサンプルの検査

ログに記録された fuel データの 603 番目のサンプルを検査します。

DStoreReadSize プロパティを、メモリ リソースを考慮して、コンピューターで許容できる数値に設定します。たとえば、ReadSize200 に設定します。

DStore.ReadSize = 200;

データ ストアから 3 回読み取りを実行します。各読み取り操作で、読み取り位置は 200 サンプル進みます。

read(DStore);
read(DStore);
read(DStore);

603 番目のサンプルに非常に近くなったため、ReadSize を小さい数値に設定します。たとえば、ReadSize5 に設定します。

DStore.ReadSize = 5;

データ ストアからの読み込みを再度実行します。

read(DStore)
ans =

  5x1 timetable

      Time       Data 
    ________    ______

    5.79 sec    1.6097
    5.8 sec     1.6136
    5.81 sec    1.6003
    5.82 sec    1.5904
    5.83 sec    1.5832

読み取られたデータの 3 番目のサンプルは、データ ストアの 603 番目のサンプルになります。

以前のサンプルの検査

ログに記録された fuel データの 403 番目のサンプルを検査します。前の読み取り操作により、データ ストアは 606 番目のサンプルから読み取りを開始するため、データ ストアをリセットしなければなりません。その後、最初のサンプルから 403 番目のサンプルまでを読み取ることができます。

reset メソッドを使用して、DStore をリセットします。

reset(DStore);

ReadSize200 に再度設定します。

DStore.ReadSize = 200;

データ ストアから 2 回読み取り、読み取り位置を 401 番目のサンプルに進めます。

read(DStore);
read(DStore);

ReadSize5 に再度設定します。

DStore.ReadSize = 5;

データ ストアから読み取ります。

read(DStore)
ans =

  5x1 timetable

      Time       Data  
    ________    _______

    3.85 sec      0.999
    3.86 sec    0.99219
    3.87 sec    0.98538
    3.88 sec    0.97858
    3.89 sec    0.97179

複数のサンプルの抽出

サンプル 1001 ~ 1020 (合計 20 サンプル) を抽出します。

データ ストアをリセットします。

reset(DStore)

サンプル 1001 に進みます。

DStore.ReadSize = 200;

for i = 1:5
    read(DStore);
end

データベースから 20 サンプル抽出する準備を行います。

DStore.ReadSize = 20;

サンプル 1001 ~ 1020 を抽出します。抽出したデータを targetSamples という名前の変数に格納します。

targetSamples = read(DStore)
targetSamples =

  20x1 timetable

      Time       Data 
    ________    ______

    9.7 sec     1.5828
    9.71 sec    1.5733
    9.72 sec    1.5664
    9.73 sec    1.5614
    9.74 sec    1.5579
    9.75 sec    1.5553
    9.76 sec    1.5703
    9.77 sec     1.582
    9.78 sec    1.5913
    9.79 sec    1.5988
    9.8 sec      1.605
    9.81 sec    1.6101
    9.82 sec    1.6145
    9.83 sec    1.6184
    9.84 sec    1.6049
    9.85 sec     1.595
    9.86 sec    1.5877
    9.87 sec    1.5824
    9.88 sec    1.5785
    9.89 sec    1.5757

データ ストア内のデータの最大値の検出

データ ストアをリセットします。

reset(DStore)

while ループを hasdata メソッドを使用して記述し、200 サンプルのチャンク単位でデータを段階的に解析します。

DStore.ReadSize = 200;
runningMax = [];
while hasdata(DStore)
    tt = read(DStore);
    rawChunk = tt.Data;
    runningMax = max([rawChunk; runningMax]);
end

これで、変数 runningMax にはデータ ストア全体における最大値が格納されます。

runningMax
runningMax =

    1.6423

R2017a で導入