Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ビッグ データの取り扱い

この例では、Simulink モデルでビッグ データをシミュレーションへの入出力として取り扱う方法を説明します。

モデル例を開く

モデル例を開きます。

例の説明

ビッグ データとは、システム メモリに一度に読み込むには大きすぎるデータを指します。

Simulink はビッグ データをシミュレーション出力として生成し、ビッグ データをシミュレーション入力として消費できます。ビッグ データを入力と出力の両方で取り扱うには、データ全体をハード ディスク上の MAT ファイルに保存します。このデータの小さいチャンクのみが、シミュレーション中の任意の時点でシステム メモリに読み込まれます。この方法はストリーミングと呼ばれています。Simulink では、MAT ファイルとの間でデータをストリーミングできます。ハード ディスクの容量は通常、ランダム アクセス メモリの容量よりもはるかに大きいため、ストリーミングによりメモリの問題が解決されます。

この例では、Simulink シミュレーションでビッグ データを取り扱う方法を示します。ファイルへのログ記録機能は、ビッグ データをシミュレーションの出力としてストリーミングするために使用します。その後、ファイルからのストリーミングはビッグ データをシミュレーションへの入力として提供します。

ファイルへのログ記録の設定

出力データを MAT ファイルにストリーミングするには、ファイルへのログ記録を有効にします。

ファイルへのログ記録を有効にするには、[コンフィギュレーション パラメーター]、[データのインポート/エクスポート]、[データセットのデータをファイルにログ] 設定のチェック ボックスをオンにします。ここをクリックして [コンフィギュレーション パラメーター] ダイアログを開きます。結果を含めるファイルの名前を指定することもできます。

ファイルへのログ記録をプログラミングで有効するには、モデル パラメーター LoggingToFileon に設定します。

ファイルへのログ記録がモデルで有効になると、そのモデルのシミュレーションによりログ信号が直接 MAT ファイルにストリーミングされます。さらに、状態または出力の記録が有効な場合に SaveFormat がデータセットとして指定されると、これらの値も同じ MAT ファイルにストリーミングされます。

モデルのシミュレーション

この例では、ディレクトリを書き込み権限のある一時ディレクトリに変更します。次に sim コマンドを呼び出し、ファイルにログを記録するモデルをシミュレートします。

パラメーター SignalLoggingName を設定し、信号のログの結果を保持する Dataset オブジェクトの名前を topOut に指定します。パラメーター LoggingFileName を設定し、結果の MAT ファイルの名前を top.mat に指定します。StopTime パラメーターは 5000 秒に設定されます。より現実的なビッグ データの例では終了時間の値がかなり大きくなるため、ログに記録するデータ サンプルが多数得られる可能性があります。

MAT ファイル内でログ データセットを参照する DatasetRef オブジェクトの作成

DatasetRef オブジェクトを使用して、ログに記録された MAT ファイルで結果として得られたデータセットを参照します。DatasetRef を使用する利点は、参照する MAT ファイルがメモリに読み込まれないことです。DatasetRef はファイルに保存されたデータセットを参照する非常に小さなラッパー オブジェクトです。このファイルで関数 load を呼び出す代替方法によりファイル全体がメモリに読み込まれますが、このデータセットにビッグ データが含まれている場合は実行できない可能性があります。

ログ信号への参照の取得

DatasetRef オブジェクトの { } インデックスを使用して、これらの信号をメモリに読み込まずにデータセット内の個々の信号を参照できます。たとえば、2 番目の信号を参照するには、次のようにします。

sig2 の値フィールドは SimulationDatastore オブジェクトです。これは、ディスクに保存された信号 2 のデータに対する非常に小さい参照です。

ans = 

  SimulationDatastore with properties:

      ReadSize: 100
    NumSamples: 50001
      FileName: '/tmp/BR2020ad_1302590_239645/publish_examples4/top.mat'

    Data Preview:

     Time       Data 
    _______    ______

    0 sec      1    5
    0.1 sec    1    5
    0.2 sec    2    6
    0.3 sec    2    6
    0.4 sec    3    7
    :          :

他のログ信号に対するより多くの参照の取得

この例では、これらのログ信号の一部を参照モデルのシミュレーションに対する入力として使用します。それぞれについて、非常に小さい参照を作成します。これらはモデル内のバス信号です。結果として得られる値フィールドは SimulationDatastore オブジェクトの構造体です。各構造体には元のバス信号の階層が反映されます。

シミュレーション入力として使用する新しい Dataset オブジェクトの作成

Dataset オブジェクトを通してシミュレーションに入力信号を指定します。このデータセットの各要素は、同じインデックスに対応する Inport ブロックに入力データを提供します。空のデータセット ds を作成して、ログ信号への参照を要素番号 1 および 2 として配置します。

Dataset オブジェクトで { } インデックスを使用し、適切な位置に要素を代入します。

データセットの各要素内では、信号データへの参照 (SimulationDatastore オブジェクトなど) をインメモリ データ (時系列オブジェクトなど) と混在させることができます。いずれかの飽和の上限を 30 から 37 に変更するには、次のようにします。

シミュレーションへの入力データのストリーミング

今度は参照モデル sldemo_mdlref_counter_bus のシミュレーションを実行し、データセット ds を入力として使用します。SimulationDatastore オブジェクトで参照されるデータは、システムを圧倒することなくシミュレーションにストリーミングされます。

飽和の上限のデータは、その信号がメモリ内の時系列として指定されるためストリーミングされません。飽和制限の変更はスコープ内で時間 6 前後で反映されます (信号は 30 ではなく 37 の値に飽和するようになります)。

概要

この例では、シミュレーションに対するビッグ データのラウンド トリップ ワークフローを示しました。最初のシミュレーションから MAT ファイルへのデータのストリーミングには、永続ストレージへのログの記録が使用されました。次に、2 回目のシミュレーションを設定し、そのファイルからのデータを入力としてストリーミングしました。より現実的な例ではモデル StopTime パラメーターの値がはるかに大きくなる可能性があるため、ログに記録された MAT ファイルは結果としてより大きくなります。2 回目のシミュレーションを、より長い StopTime に対して設定することもできます。出力と入力に大きなデータ ファイルを使用しても、より長いシミュレーションのメモリ要件は変わりません。

MATLAB ワークフロー

SimulationDatastore では MATLAB でログ データをインクリメントに解析できます。2 番目のログ信号への参照に戻り、データ ストアを新しい変数に割り当てて、アクセスを簡略化します。

チャンク単位のデータへのアクセス

SimulationDatastore では参照データをインクリメントに読み取ることができます。この読み取りはチャンク単位で行われ、ReadSize プロパティによって制御されます。ReadSize の既定値は 100 サンプルです (信号の各サンプルはシミュレーションの単一のタイム ステップのログ データです)。この例では、これを 1000 に変更します。データ ストアの読み取りごとにデータの timetable 表現を返します。

SimulationDatastore 読み取りカウンターのリセット

データ ストアで読み取りが行われるごとに、読み取りカウンターが増加します。このカウンターをリセットして、読み取りを最初から開始できます。

データ ストア内のすべてのデータの反復

SimulationDatastore を使用してログに記録されたシミュレーション データにインクリメントにアクセスし、MATLAB でビッグ データを解析します。データ レコード全体とチャンクを反復できます。

終了

モデルを閉じます。

関連ドキュメンテーション

SimulationDatastore クラスの詳細については、ここをクリックしてください。