Main Content

シミュレーションのためのビッグ データの読み込み

多くのタイム ステップと信号があるモデルのシミュレーションでは、コンピューターの作業メモリに収まらないほどの大きなデータを使用したり作成したりする場合があります。シミュレーションの入力データがメモリに収まらない場合、そのデータを、ルートレベルの Inport ブロックでシミュレーションの入力として使用するいくつかの方法のうちの 1 つを選択できます。これらの方法は、Version 7.3 の MAT ファイルで Dataset 形式で保存されたデータの読み込みにおいて機能します。これには別のシミュレーションから記録されたデータを含みます。

  1. 個別の入力信号がメモリに収まらないほど大きい場合は、matlab.io.datastore.SimulationDatastore オブジェクトを使用して信号データにアクセスできます。SimulationDatastore オブジェクトからのデータは、メモリに収まるまとまりとしてシミュレーションにインクリメンタルに読み込まれます。

  2. シミュレーションの入力がメモリに読み取れないほど大きいファイルの Simulink.SimulationData.Dataset オブジェクトで指定されている場合、Simulink.SimulationData.DatasetRef オブジェクトを使用して、Dataset オブジェクトの内容全体をモデルにストリーミングできます。

  3. 信号がメモリに収まり、メモリに収まらないほど大きいファイルに保存されている場合、Simulink.SimulationData.DatasetRef オブジェクトを使用して、個別の信号をファイルからメモリに読み込むことができます。

メモ

シミュレーションで記録されたデータを別のシミュレーションで入力として使用する場合、matlab.io.datastore.sdidatastore オブジェクトを使用してデータをモデルにストリーミングすることもできます。sdidatastore オブジェクトは、ディスク上のシミュレーション データ インスペクターのリポジトリにあるデータを参照するため、記録されたデータをファイルに保存する必要はありません。反復的なワークフローでは sdidatastore オブジェクトをシミュレーション入力として使用することを検討してください。

すべてのビッグ データの読み込み方法は、データがメモリに収まらず、余分な手順を必要とする場合など、特別なケースに使用します。これらの例では、メモリいっぱいに収まるデータを使用して、ビッグ データの読み込みに必要なステップを説明します。シミュレーションの入力がメモリに収まる場合は、別の読み込み手法を使用することを検討してください。

SimulationDatastore オブジェクトを使用した個別の信号のストリーミング

入力データ内の個別の信号がメモリに収まらないほど大きい場合、それらの信号について matlab.io.datastore.SimulationDatastore オブジェクトを作成して、モデルにストリーミングできます。モデルにストリーミングする信号についての SimulationDatastore オブジェクトを作成するには、まず、対象の信号を含む Dataset オブジェクトを参照する Simulink.SimulationData.DatasetRef オブジェクトを作成します。たとえば、slexAircraftExample モデルのシミュレーションからログ記録されるデータ用に DatasetRef を作成します。

logsout_DSR = Simulink.SimulationData.DatasetRef('aircraftData.mat','logsout');

中かっこを使って DatasetRef オブジェクトにインデックス付けすることによって、または getAsDatastore メソッドを DatasetRef オブジェクトに使用することによって、対象の信号について SimulationDatastore オブジェクトを作成できます。どちらの場合も、SimulationDatastore オブジェクトは返された Simulink.SimulationData.Signal オブジェクトの Values プロパティにあります。

Dataset オブジェクト内の信号のインデックスが分かっている場合、中かっこを使って DatasetRef オブジェクトにインデックス付けして、信号に SimulationDatastore を作成できます。

alphaRad_ds = logsout_DSR{4}
alphaRad_ds = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'alpha, rad'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 4
            Values: [1x1 matlab.io.datastore.SimulationDatastore]

信号インデックス、名前、またはブロック パスを使用して信号の SimulationDatastore オブジェクトを作成するには、getAsDatastore メソッドを使用します。たとえば、Stick 信号の SimulationDatastore オブジェクトを作成します。

stick_ds = logsout_DSR.getAsDatastore('Stick')
stick_ds = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'Stick'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 matlab.io.datastore.SimulationDatastore]

stick_ds オブジェクトおよび alphaRad_ds Simulink.SimulationData.Signal オブジェクトの Values プロパティが SimulationDatastores であるため、信号データがモデルにストリーミングされます。SimulationDatastore にバックアップされた Signal オブジェクトを Dataset オブジェクトの要素として、または Input パラメーターのコンマ区切りリストの項目として含めることができます。

DatasetRef オブジェクトを使用したデータセット全体のストリーミング

シミュレーションの入力がメモリに読み込めないほど大きいファイル内の Dataset オブジェクトに保存されている場合、Simulink.SimulationData.DatasetRef オブジェクトを作成してシミュレーションの入力をモデルにストリーミングできます。モデル コンフィギュレーション パラメーターの [データのインポート/エクスポート] ペインで [入力] パラメーターの値として DatasetRef オブジェクトを指定する場合、シミュレーション中に、DatasetRef の作成に使用される Dataset オブジェクト内のすべての信号がモデルにストリーミングされます。Dataset オブジェクトから個別の信号を読み込む、またはストリーミングするには、別のビッグ データの読み込み手法を使用します。

シミュレーションの入力をもつ Dataset オブジェクトが含まれているファイルに他のデータも含まれている場合、関数 Simulink.SimulationData.DatasetRef.getDatasetVariableNames を使用して、ファイルに含まれている Dataset オブジェクトのリストを表示できます。ファイル内の Dataset オブジェクトを格納する変数の名前のプレビューは、ファイルの内容がメモリに収まらない場合に特に有用です。

dsNames = Simulink.SimulationData.DatasetRef.getDatasetVariableNames('aircraftData.mat')
dsNames = 1x3 cell
    {'logsout'}    {'xout'}    {'yout'}

Dataset オブジェクト logsout のデータを参照する DatasetRef オブジェクトを作成します。

logsout_DSR = Simulink.SimulationData.DatasetRef('aircraftData.mat','logsout');

[入力] パラメーターを使用して、Simulink.SimulationData.Dataset オブジェクトを読み込むのと同じ方法で logsout_DSR を読み込むことができます。DatasetRef の作成に使用する Dataset オブジェクト内の各信号は、メモリに収まるまとまりとしてモデルにストリーミングされます。

DatasetRef オブジェクトからの個別の信号の読み込み

シミュレーションの入力信号が個別にはメモリに収まり、メモリに収まらないファイル内の Dataset オブジェクトに保存されている場合、Simulink.SimulationData.DatasetRef オブジェクトを使用して、対象の各信号をメモリに読み込みます。その後、信号をモデルのシミュレーションの入力として読み込むことができます。

最初に、読み込む信号を含むファイル内の Dataset オブジェクトを参照する DatasetRef オブジェクトを作成します。たとえば、slexAircraftExample モデルのシミュレーションからファイルにログ記録されたデータのために、DatasetRef オブジェクトを作成します。

logsout_DSR = Simulink.SimulationData.DatasetRef('aircraftData.mat','logsout');

get メソッドまたは getElement メソッドを使用して、DatasetRef オブジェクトを使って個別の信号をメモリに読み込むことができます。両方のメソッドは、同じ構文を使用して指定された要素をメモリに読み込みます。Dataset オブジェクト内のインデックスまたはその名前を使用して、メモリに読み込む信号を指定できます。読み込む信号の名前がわからない場合、getElementNames メソッドを使用して DatasetRef オブジェクトによって参照される Dataset オブジェクト内の要素の名前を確認できます。

elNames = logsout_DSR.getElementNames
elNames = 15x1 cell
    {0x0 char    }
    {0x0 char    }
    {0x0 char    }
    {'alpha, rad'}
    {'q, rad/sec'}
    {0x0 char    }
    {'qGust'     }
    {'wGust'     }
    {0x0 char    }
    {0x0 char    }
    {0x0 char    }
    {'Stick'     }
    {0x0 char    }
    {0x0 char    }
    {0x0 char    }

その名前を使用して qGust 信号をメモリに読み込みます。

qGust = logsout_DSR.getElement('qGust')
qGust = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

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

モデルのルートレベルの Inport ブロックに読み込むシミュレーションの入力信号の Dataset オブジェクトに qGust 信号を追加したり、qGustInput パラメーターのコンマ区切りリストの項目として指定したりできます。

参考

| |

関連するトピック