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

matlab.io.datastore.simulationdatastore.sdidatastore.read

sdidatastore からデータのチャンクを読み取る

構文

data = sdi_ds.read

説明

data = sdi_ds.read は、matlab.io.datastore.sdidatastoresdi_ds からサンプルのチャンクを読み取り、sdi_ds の読み取り位置を返されたデータのエンドポイントの後ろのポイントに更新します。サンプルは timetabledata に返されます。read メソッドが読み取るサンプルの数は場合によって異なり、返された timetable は常にメモリに収まります。read メソッドを使用して、大きすぎてメモリに入りきらない信号をインクリメンタルに処理します。

出力引数

すべて展開する

matlab.io.datastore.simulationdatastore から読み取られるサンプルのチャンク。timetable として返される。

すべて展開する

matlab.io.datastore.sdidatastore は、シミュレーション データ インスペクター リポジトリ内の信号データを参照します。信号が大きすぎてメモリに入りきらない場合、matlab.io.datastore.sdidatastore を使用して手動でデータをインクリメンタルに処理するか、信号のインクリメンタル処理をユーザーに代わって実行する tall timetable を作成します。この例は、matlab.io.datastore.sdidatastore を使用してデータを処理する方法を示します。

信号の matlab.io.datastore.sdidatastore の作成

sldemo_fuelsys モデルをシミュレートします。このモデルは、複数の信号をログに記録して、シミュレーション データ インスペクター リポジトリ内にデータを作成するよう構成されています。

sim('sldemo_fuelsys')

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、信号の信号 ID を取得します。

runCount = Simulink.sdi.getRunCount;

latestRunID = Simulink.sdi.getRunIDByIndex(runCount);

latestRun = Simulink.sdi.getRun(latestRunID);

speedSigID = latestRun.getSignalIDByIndex(4);

信号 ID を使用して、speed 信号の matlab.io.datastore.sdidatastore を作成します。

speedSDIds = matlab.io.datastore.sdidatastore(speedSigID);

データ ストアの内容の確認

matlab.io.datastore.sdidatastoreName プロパティをチェックして、想定のとおりの内容であることを確認します。

speedSDIds.Name
ans = 
'map'

また、preview メソッドを使用して、信号内の最初の 10 個のサンプルが正しく見えることを確認することもできます。

speedSDIds.preview
ans=10×2 timetable
         Time          Data  
    ______________    _______

    0 sec               0.589
    0.00056199 sec    0.58772
    0.0033719 sec     0.58148
    0.01 sec          0.56765
    0.02 sec          0.54897
    0.03 sec          0.53264
    0.04 sec          0.51837
    0.05 sec          0.50594
    0.055328 sec          0.5
    0.055328 sec          0.5

matlab.io.datastore.sdidatastore による信号データの処理

信号が大きすぎてメモリに入りきらない場合、readData メソッドを使用して、シミュレーション データ インスペクター リポジトリからデータのチャンクを読み取り、データをインクリメンタルに処理することができます。hasdata メソッドを、信号全体をインクリメンタルに処理する際の while ループの条件として使用します。たとえば、信号の最大値を見つけます。

latestMax = [];

while speedSDIds.hasdata
    
    speedChunk = speedSDIds.read;
    speedChunkData = speedChunk.Data;
    latestMax = max([speedChunkData; latestMax]);
    
end

latestMax
latestMax = 0.8897

各読み取り操作で、read メソッドは、読み取り位置を次の読み取り操作の開始位置に更新します。matlab.io.datastore.sdidatastore の一部またはすべてを読み取った後、読み取り位置をリセットして、信号の先頭から再度開始することができます。

speedSDIds.reset

メモリ内の信号データの処理

matlab.io.datastore.sdidatastore で参照された信号がメモリに収まる場合、read メソッドでデータをインクリメンタルに読み込んで処理する代わりに、readall メソッドを使用してすべての信号データをメモリに読み込んで処理することができます。readall メソッドは、すべての信号データを含む timetable を返します。

speedTimetable = speedSDIds.readall;

speedMax = max(speedTimetable.Data)
speedMax = 0.8897

代替方法

matlab.io.datastore.sdidatastore を使用して、大きすぎてメモリに入りきらない信号を処理する tall timetable を作成することができます。tall timetable は、ユーザーに代わって、信号データのチャンクの読み取りと処理を行います。matlab.io.datastore.sdidatastore のリファレンス ページには、tall timetable を使用してデータを処理する方法の例が掲載されています。tall timetable の使い方の詳細については、tall 配列 (MATLAB)を参照してください。

R2017b で導入