matlab.io.datastore.sdidatastore クラス
パッケージ: matlab.io.datastore
シミュレーション データ インスペクター信号のデータ ストア
説明
matlab.io.datastore.sdidatastore
オブジェクトを使用すると、シミュレーション データ インスペクターにログ記録された信号のうち、大きすぎてメモリに入りきらない信号にアクセスできます。sdidatastore
オブジェクトは、単一の信号のデータを参照します。read
メソッドは、sdidatastore
オブジェクトによって参照された信号データを、各チャンクが常にメモリに収まるようにチャンク単位で読み取ります。sdidatastore
オブジェクトを使用して、信号データの tall timetable を作成できます。tall 配列の使い方の詳細については、tall 配列 を参照してください。
メモ
matlab.io.datastore.sdidatastore
は、並列計算をサポートしていません。Parallel Computing Toolbox™ ライセンスをお持ちの場合、matlab.io.datastore.sdidatastore
から tall timetable を作成する前に、mapreducer(0)
を使用して実行環境をローカル MATLAB® クライアントに設定してください。
作成
は検索基準 ds
= dsrObj.getAsDatastore(arg
)arg
によって選択される Simulink.sdi.DatasetRef
オブジェクトの信号の sdidatastore
、ds
を作成します。arg
は、Simulink.sdi.DatasetRef
オブジェクト内の目的の信号のインデックスを表す整数、または信号名を含む文字ベクトルとして指定できます。
は、指定された ds
= matlab.io.datastore.sdidatastore(signalID
)signalID
に対応する信号に対して、sdidatastore
、ds
を作成します。
入力引数
arg
— 要素選択基準
文字ベクトル | 整数
Simulink.sdi.DatasetRef
オブジェクトから要素を取得するために使用される検索基準。名前ベースの検索では、arg
を文字ベクトルとして指定します。インデックスベースの検索では、arg
は整数で、目的の要素のインデックスを表します。
例: 'MySignal'
例: 3
signalID
— 数値信号の識別子
整数
その信号に対してシミュレーション データ インスペクターによって生成された、数値信号識別子。信号を含む Simulink.sdi.Run
オブジェクトのメソッドを使用するか、関数 Simulink.sdi.createRun
の戻り値として、信号の信号 ID を取得できます。
プロパティ
Name
— 信号名
文字ベクトル
文字ベクトルとして指定する信号の名前。
例: 'My Signal'
Signal
— Simulink.sdi.Signal オブジェクト
Simulink.sdi.Signal
オブジェクト
sdidatastore
に関連付けられた Simulink.sdi.Signal
オブジェクト。Signal
プロパティを使用すると、信号データおよびメタデータにアクセスできます。
メソッド
hasdata | データが読み取り可能かどうかを判別 |
preview | sdidatstore 内のデータのプレビューを返す |
read | sdidatastore からデータのチャンクを読み取る |
readall | sdidatastore からすべてのデータを読み取る |
reset | 読み取り位置のリセット |
コピーのセマンティクス
ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピーを参照してください。
例
シミュレーション データ インスペクター用の tall timetable の作成
この例は、シミュレーション データ インスペクター リポジトリ内の信号の tall timetable を作成する方法を示します。tall timetable を作成するには、Simulink.sdi.Signal
オブジェクトを使用するか、先に信号の matlab.io.datastore.sdidatastore
を作成します。matlab.io.datastore.sdidatastore
を使用すると、メモリに入りきらない信号の信号データをインクリメンタルに読み取り、処理することができます。tall timetable は、バックグラウンドでデータのチャンク化と処理を実行します。一般的に、tall timetable はメモリ内のデータとよく似た方法で扱うことができます。
データの作成と信号 ID へのアクセス
tall timetable の作成を Simulink.sdi.Signal
オブジェクトによって行うか、matlab.io.datastore.sdidatastore
によって行うかにかかわらず、まずはデータを作成し、対象の信号の信号 ID にアクセスします。sldemo_fuelsys
モデルは、モデルのシミュレーションを実行すると、シミュレーション データ インスペクター リポジトリにストリーミングされる信号をログ記録するように構成されています。
open_system('sldemo_fuelsys') sim('sldemo_fuelsys')
次に、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、対象の信号の信号 ID にアクセスします。たとえば、ego
信号にアクセスします。
runCount = Simulink.sdi.getRunCount; latestRunID = Simulink.sdi.getRunIDByIndex(runCount); latestRun = Simulink.sdi.getRun(latestRunID); egoSigID = latestRun.getSignalIDByIndex(7);
matlab.io.datastore.sdidatastore
を使用した tall timetable の作成
一般的に、tall timetable はデータ ストアにバックアップされます。matlab.io.datastore.sdidatastore
オブジェクトを作成して、シミュレーション データ インスペクター リポジトリ内の信号データを参照します。
egoDs = matlab.io.datastore.sdidatastore(egoSigID);
データ ストアの名前をチェックして、期待通りの信号が得られたことを確認します。
egoDs.Name
ans = 'fuel'
matlab.io.datastore.sdidatastore
から、信号データの処理に使用する tall timetable を作成します。Parallel Computing Toolbox™ ライセンスをお持ちの場合、tall timetable を作成する前に、mapreducer
を使用して実行環境を明示的にローカル MATLAB® セッションに設定する必要があります。matlab.io.datastore.sdidatastore
オブジェクトは、並列計算をサポートしていません。
mapreducer(0); egoTt = tall(egoDs)
egoTt = Mx1 tall timetable Time Data ______________ ______ 0 sec 1.209 0.00056199 sec 1.209 0.0033719 sec 1.209 0.01 sec 1.1729 0.02 sec 1.1409 0.03 sec 1.1124 0.04 sec 1.0873 0.05 sec 1.0652 : : : :
Simulink.sdi.Signal
オブジェクトを使用した tall timetable の作成
Simulink.sdi.Signal
クラスは、tall timetable を直接作成するメソッドを持っています。データ ストアが内部的に作成されるため、データ ストアを作成する手順を省くことができます。信号 ID を使用して、ego
信号の Simulink.sdi.Signal
オブジェクトにアクセスします。次に、getTable
メソッドを使用して tall timetable を作成します。
egoSig = Simulink.sdi.getSignal(egoSigID); egoTt = egoSig.getAsTall
egoTt = Mx1 tall timetable Time Data ______________ ______ 0 sec 1.209 0.00056199 sec 1.209 0.0033719 sec 1.209 0.01 sec 1.1729 0.02 sec 1.1409 0.03 sec 1.1124 0.04 sec 1.0873 0.05 sec 1.0652 : : : :
tall timetable を使用した信号データの処理
tall timetable egoTt
を使用する場合、その基となるデータ ストアがデータのチャンクを読み取って tall timetable に渡し、処理が行われます。処理が終わった後、データ ストアと tall timetable のいずれにも、メモリ内のデータは保持されません。また、tall timetable は多くの演算の処理を遅延させます。たとえば、信号の平均値を計算します。
egoMean = mean(egoTt.Data)
egoMean = tall double ?
関数 gather
を使用して変数を評価してその値をワークスペースに書き込むか、関数 write
を使用して結果をディスクに書き込むことができます。gather
を使用する場合は、必ず結果がメモリに収まるようにしてください。
egoMean = gather(egoMean)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.1 sec Evaluation completed in 1.2 sec
egoMean = 1.3292
tall timetable で複数の演算を行う場合、各ステップの結果の評価は、write
または gather
によって明示的に結果をリクエストするまで遅延されます。MATLAB では、評価中に tall timetable を通す回数を最適化することで、大規模な信号の処理時間を著しく短縮できます。tall 配列の使い方の詳細については、メモリに収まらないデータの tall 配列 を参照してください。
matlab.io.datastore.sdidatastore
を使用した信号データの処理
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.sdidatastore
の Name
プロパティをチェックして、想定のとおりの内容であることを確認します。
speedSDIds.Name
ans = 'map'
また、preview
メソッドを使用して、信号内の最初の 10 個のサンプルが正しく見えることを確認することもできます。
speedSDIds.preview
ans=10×1 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
バージョン履歴
R2017b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)