シミュレーションのためのビッグ データの読み込み
多くのタイム ステップと信号があるモデルのシミュレーションでは、コンピューターの作業メモリに収まらないほどの大きなデータを使用したり作成したりする場合があります。シミュレーションの入力データがメモリに収まらない場合、そのデータを、ルートレベルの Inport ブロックでシミュレーションの入力として使用するいくつかの方法のうちの 1 つを選択できます。これらの方法は、Version 7.3 の MAT ファイルで Dataset 形式で保存されたデータの読み込みにおいて機能します。これには別のシミュレーションから記録されたデータを含みます。
個別の入力信号がメモリに収まらないほど大きい場合は、
matlab.io.datastore.SimulationDatastoreオブジェクトを使用して信号データにアクセスできます。SimulationDatastoreオブジェクトからのデータは、メモリに収まるまとまりとしてシミュレーションにインクリメンタルに読み込まれます。シミュレーションの入力がメモリに読み取れないほど大きいファイルの
Simulink.SimulationData.Datasetオブジェクトで指定されている場合、Simulink.SimulationData.DatasetRefオブジェクトを使用して、Datasetオブジェクトの内容全体をモデルにストリーミングできます。信号がメモリに収まり、メモリに収まらないほど大きいファイルに保存されている場合、
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: [1×1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 4
Values: [1×1 matlab.io.datastore.SimulationDatastore]
Methods, Superclasses
信号インデックス、名前、またはブロック パスを使用して信号の SimulationDatastore オブジェクトを作成するには、getAsDatastore メソッドを使用します。たとえば、Stick 信号の SimulationDatastore オブジェクトを作成します。
stick_ds = logsout_DSR.getAsDatastore('Stick')stick_ds =
Simulink.SimulationData.Signal
Package: Simulink.SimulationData
Properties:
Name: 'Stick'
PropagatedName: ''
BlockPath: [1×1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 1
Values: [1×1 matlab.io.datastore.SimulationDatastore]
Methods, Superclasses
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 = 1×3 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 = 15×1 cell
{0×0 char }
{0×0 char }
{0×0 char }
{'alpha, rad'}
{'q, rad/sec'}
{0×0 char }
{'qGust' }
{'wGust' }
{0×0 char }
{0×0 char }
{0×0 char }
{'Stick' }
{0×0 char }
{0×0 char }
{0×0 char }
その名前を使用して qGust 信号をメモリに読み込みます。
qGust = logsout_DSR.getElement('qGust')qGust =
Simulink.SimulationData.Signal
Package: Simulink.SimulationData
Properties:
Name: 'qGust'
PropagatedName: ''
BlockPath: [1×1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 2
Values: [1×1 timeseries]
Methods, Superclasses
モデルのルートレベルの Inport ブロックに読み込むシミュレーションの入力信号の Dataset オブジェクトに qGust 信号を追加したり、qGust を Input パラメーターのコンマ区切りリストの項目として指定したりできます。
参考
matlab.io.datastore.SimulationDatastore | Simulink.SimulationData.DatasetRef | Simulink.SimulationData.Dataset