ドキュメンテーション

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

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

多くのタイム ステップと信号があるモデルのシミュレーションでは、コンピューターの作業メモリに収まらないほどの大きなデータを使用したり作成したりする場合があります。シミュレーションの入力データがメモリに収まらない場合、そのデータを、ルートレベルの 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 オブジェクトを使用して、個別の信号をファイルからメモリに読み込むことができます。

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

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]


  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: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 matlab.io.datastore.SimulationDatastore]


  Methods, Superclasses

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

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

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

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

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

logsoutDatasetRef オブジェクトを作成します。

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

Input パラメーターを使用して、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 array
    {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]


  Methods, Superclasses

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

参考

| |

関連するトピック