simulationEnsembleDatastore
generateSimulationEnsemble
または Simulink でのシミュレーション データのログ記録によって生成されるアンサンブル データの管理
説明
simulationEnsembleDatastore
オブジェクトは、シミュレーション データを使用した状態監視と予知保全のアルゴリズム開発に特化したデータストアです。
このオブジェクトは、MATLAB® データ ファイル (MAT ファイル) のコレクションに格納されたデータ変数、独立変数、および状態変数を指定します。データ ファイルには、Simulink® モデルのシミュレーション中に記録された結果のログ データを格納する Simulink.SimulationData.Dataset
変数が含まれています。
シミュレートされたアンサンブル データストアの使用の詳細な例については、シミュレーション データ アンサンブルの生成と使用を参照してください。Predictive Maintenance Toolbox™ におけるデータ アンサンブルの一般的な情報については、状態監視と予知保全のためのデータ アンサンブルを参照してください。
作成
simulationEnsembleDatastore
オブジェクトを作成するには、次のようにします。
Simulink モデルからシミュレーション データを生成してログを記録します。これは、
generateSimulationEnsemble
のほか、シミュレーションのログをディスクに記録する任意の方法で実行できます。生成されたシミュレーション データを指す
simulationEnsembleDatastore
オブジェクトをsimulationEnsembleDatastore
コマンドを使用して作成します (以下で説明します)。
以前に generateSimulationEnsemble
または他の方法で生成されたシミュレーション データがある場合は、作成関数 simulationEnsembleDatastore
を使用して新しいシミュレーション アンサンブル データストア オブジェクトをいつでも作成できます。
構文
説明
は、以前に ensemble
= simulationEnsembleDatastore(location
)generateSimulationEnsemble
を使用して生成されたデータから location
で指定されたフォルダーにシミュレーション アンサンブルを作成します。生成された MAT ファイルに格納されている情報から、生成されたデータ内のアンサンブル変数が識別されます。それらのアンサンブル変数の名前が ensemble
の DataVariables
プロパティと SelectedVariables
プロパティに取り込まれます。
入力引数
location
— ファイル パス
string | 文字ベクトル
シミュレーション データを格納する場所のファイル パス。string または文字ベクトルとして指定します。ファイル パスは、リモート ロケーションを指す IRI パスを含む、MATLAB データストアによってサポートされている任意の場所に指定できます。ただし、リモート データを simulationEnsembleDatastore
を使用して管理している場合、アンサンブル データストアに writeToLastMemberRead
を使用してデータを追加することはできません。MATLAB におけるリモート データの操作の詳細については、リモート データの操作を参照してください。
例: pwd + "\simResults"
signallog
— ログ信号の変数名
string | 文字ベクトル
ログ信号の変数名。string または文字ベクトルとして指定します。この入力引数は、simulationEnsembleDatastore
に対して、格納された MAT ファイル内のどのデータ変数にシミュレーション データのログが格納されているかを示します。この変数名は、データの生成元である Simulink モデルの Signal logging
コンフィギュレーション パラメーターで指定されます。generateSimulationEnsemble
を使用してアンサンブルのシミュレーション データを生成する場合、生成される各 MAT ファイルに、ログ信号の変数名を指定する変数 PMSignalLogName
が含まれます。
例: "logsout"
プロパティ
DataVariables
— アンサンブルのデータ変数
ログ信号名の string 配列 (既定値) | string 配列
アンサンブル内のデータ変数。string 配列として指定します。データ変数とは、アンサンブルのメンバーの主な内容です。データ変数には、予知保全アルゴリズムの解析と開発用の測定データまたは派生データが含まれます。たとえば、データ変数には、測定またはシミュレーションされた振動信号と、平均振動値または振動ピーク周波数などの派生値が含まれる場合があります。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。
simulationEnsembleDatastore
は、DataVariables
の初期値を generateSimulationEnsemble
で生成されたデータ内のすべてのログ信号の名前に設定します。さらに、simulationEnsembleDatastore
は、変数 SimulationInput
と SimulationMetadata
を DataVariables
に追加します。これらの変数には、シミュレーションが実行された方法に関する情報が格納されます。
DataVariables
は {'Vibration';'Tacho'}
のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["Vibration";"Tacho"]
という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。
IndependentVariables
— アンサンブル内の独立変数
[]
(既定値) | string 配列
アンサンブル内の独立変数。string 配列として指定します。通常、アンサンブルのメンバーに順序を付けるには、独立変数を使用します。たとえば、タイムスタンプ、操作時間数、走行距離などです。このプロパティには、アンサンブル内のこのような変数の名前を設定します。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。
IndependentVariables
は {'Time';'Age'}
のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["Time";"Age"]
という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。
ConditionVariables
— アンサンブル内の状態変数
[]
(既定値) | string 配列
アンサンブル内の状態変数。string 配列として指定します。状態変数を使用して、アンサンブルのメンバーが収集された故障状態または他の動作状態に従って、アンサンブルのメンバーにラベルを付けます。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。
ConditionVariables
は {'GearFault';'Temperature'}
のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["GearFault";"Temperature"]
という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。
SelectedVariables
— 読み取る変数
string array of logged signal names
(既定値) | string 配列
アンサンブルから読み取る変数。string 配列として指定します。このプロパティを使用して、read
コマンドでアンサンブルからデータを読み取る際に、どの変数を MATLAB ワークスペースに抽出するかを指定します。read
は、SelectedVariables
で指定された各名前の table 変数を含む table 行を返します。たとえば、6 つの変数を含むアンサンブル ensemble
があり、そのうちの 2 つ、Vibration
と FaultState
のみを読み取るとします。SelectedVariables
プロパティを設定し、read
を呼び出します。
ensemble.SelectedVariables = ["Vibration";"FaultState"]; data = read(ensemble)
SelectedVariables
は、DataVariables
、ConditionVariables
、IndependentVariables
の各プロパティに含まれる変数の任意の組み合わせにできます。SelectedVariables
が空の場合は、read
にエラーが発生します。
simulationEnsembleDatastore
は、SelectedVariables
の初期値を generateSimulationEnsemble
で生成されたデータ内のすべてのログ信号の名前に設定します。
SelectedVariables
は {'Vibration';'Tacho'}
のように文字ベクトルの cell 配列で指定できますが、変数名は常に string 配列 ["Vibration";"Tacho"]
として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。
ReadSize
— 読み取るメンバー数
1 (既定値) | 正の整数
アンサンブル データストアから一度に読み取るメンバーの数。アンサンブル内のメンバーの合計数よりも小さい正の整数として指定します。既定では、read
コマンドは、1 つのアンサンブル メンバーからのデータを含む 1 行の table を返します。1 回の read
操作で複数のメンバーからデータを読み取る場合は、このプロパティに 1 より大きい整数値を設定します。たとえば、ReadSize
= 3 の場合は、read
は 3 行の table を返し、各行には異なるアンサンブル メンバーからのデータが含まれます。未読のメンバーが ReadSize
より少ない場合は、read
は残りのメンバーの数だけ行を持つ table を返します。
アンサンブル データストアの LastMemberRead
プロパティは、直近の read
操作で読み取られたすべてのファイル名を含んでいます。したがって、たとえば、ReadSize
= 3 の場合は、read
の操作で、LastMemberRead
に 3 つのファイル名を含む string ベクトルが設定されます。
writeToLastMemberRead
を使用する場合は、書き込むデータを ReadSize
と等しい行数をもつ table として指定します。writeToLastMemberRead
コマンドは、LastMemberRead
で指定されたメンバーを更新し、指定された各ファイルに 1 つの table 行を書き込みます。
また、ReadSize
プロパティを変更すると、アンサンブルは未読の状態にリセットされます。たとえば、一部のアンサンブル メンバーを一度に 1 つずつ読み取り (ReadSize
= 1)、ReadSize
を 3 に変更したとします。次の read
操作により、最初の 3 つのアンサンブル メンバーからのデータが返されます。
NumMembers
— アンサンブル内のメンバー数
正の整数
この プロパティ は読み取り専用です。
アンサンブル内のメンバー数。正の整数で指定します。
LastMemberRead
— 最後に読み取られたアンサンブル メンバーのファイル名
""
(既定値) | string | string 配列
この プロパティ は読み取り専用です。
MATLAB ワークスペースに最後に読み取られたアンサンブル メンバーのファイル名。string として指定されます。read
コマンドを使用してアンサンブル・データストアからデータを読み取ると、次に読み取るアンサンブル メンバーがソフトウェアによって決定され、対応するファイルからデータが読み取られます。LastMemberRead
プロパティは、最後に読み取られたファイルのパスを含んでいます。アンサンブル データストアがまだ読み取られていない場合や、リセットされている場合は、LastMemberRead
は空の string になります。
アンサンブル データストアにデータを戻すために writeToLastMemberRead
を呼び出すと、その関数は LastMemberRead
で指定されたファイルに書き込まれます。
既定では、read
一度に 1 つのアンサンブル メンバーからデータを読み取ります (アンサンブル データストアの ReadSize
プロパティは 1)。ReadSize
> 1 のとき、LastMemberRead
は、直近の read
操作で読み取った全ファイルのパスを含む string 配列です。
Files
— アンサンブル データストア内のファイルのリスト
string ベクトル
この プロパティ は読み取り専用です。
アンサンブル データストア内のファイルのリスト。長さ NumMembers
の列 string ベクトルとして指定します。各エントリには、データストア内のファイルへの絶対パスが含まれます。ファイルは、read
コマンドがアンサンブル メンバーを読み取った順番に並んでいます。
例: ["C:\Data\Data_01.csv"; "C:\Data\Data_02.csv"; "C:\Data\Data_03.csv"]
オブジェクト関数
関数 read
および writeToLastMemberRead
は、Predictive Maintenance Toolbox アンサンブル データに特化しています。reset
および hasdata
など、その他の関数は、MATLAB の datastore
オブジェクトで使用される関数と同一です。特定のアンサンブル メンバーを、より小規模か、より特化したアンサンブル データストアに抽出するには、subset
を使用します。1 つのコマンドですべてのメンバー データを table または cell 配列に転送するには、readall
を使用します。アンサンブル データストアを分割するには、関数 partition
の partition(ds,n,index)
構文を使用します。
read | アンサンブル データストアからメンバー データを読み取り |
writeToLastMemberRead | アンサンブル データストアのメンバーにデータを書き込み |
subset | 既存のアンサンブル データストアのサブセットから新しいアンサンブル データストアを作成 |
reset | データストアの初期状態へのリセット |
hasdata | データが読み取り可能かどうかを判別 |
progress | 読み取ったデータ量の判定 |
readall | データストアのすべてのデータの読み取り |
numpartitions | データストアの区画数 |
partition | データストアを分割する |
tall | tall 配列の作成 |
transform | データストアの変換 |
isPartitionable | データストアが分割可能かどうかを判別 |
isShuffleable | データストアがシャッフル可能かどうかを判別 |
例
故障データのアンサンブルの生成
故障パラメーターを変化させながら機械の Simulink® モデルをシミュレートすることにより、故障状態下での機械の動作を表すデータのシミュレーション アンサンブル データストアを生成します。
Simulink モデルを読み込みます。このモデルは、Simulink を使用した故障データの生成で説明されているギアボックス モデルの簡易版です。この例では、故障モードがギア歯の故障の 1 つだけモデル化されています。
mdl = 'TransmissionCasingSimplified';
open_system(mdl)
ギア歯の故障は Gear Tooth fault
サブシステムでの外乱としてモデル化されます。外乱の大きさは、モデル変数 ToothFaultGain
によって制御されます。ここで、ToothFaultGain = 0
はギア歯の故障がない状態 (健全動作) に対応します。故障データのアンサンブルを生成するには、generateSimulationEnsemble
を使用して、モデルを -2 ~ 0 の範囲にある異なる ToothFaultGain
値でシミュレートします。この関数は、Simulink.SimulationInput
オブジェクトの配列を使用してアンサンブルの各メンバーの Simulink モデルを構成します。各シミュレーションで別個のアンサンブル メンバーがそれぞれのデータ ファイルに生成されます。こうした配列を作成し、setVariable
を使用して実行ごとにギア歯の故障のゲイン値を割り当てます。
toothFaultValues = -2:0.5:0; % 5 ToothFaultGain values for ct = numel(toothFaultValues):-1:1 simin(ct) = Simulink.SimulationInput(mdl); simin(ct) = setVariable(simin(ct),'ToothFaultGain',toothFaultValues(ct)); end
この例では、モデルが Vibration
と Tacho
の特定の信号値をログに記録するよう既に構成されています (信号ログを使用した信号データの保存 (Simulink)を参照)。generateSimulationEnsemble
は、モデルをさらに次のように構成します。
ログ データを指定のフォルダー内のファイルに保存する。
信号のログに
timetable
形式を使用する。各
Simulink.SimulationInput
オブジェクトを対応するログ データとともに保存ファイル内に格納する。
生成されるデータの場所を指定します。この例では、現在のフォルダー内の Data
というフォルダーにデータを保存します。シミュレーションがすべてエラーなしで完了した場合、インジケーター status
が 1 (true) になります。
mkdir Data location = fullfile(pwd,'Data'); [status,E] = generateSimulationEnsemble(simin,location);
[21-Jul-2024 12:10:30] Running simulations... [21-Jul-2024 12:10:34] Completed 1 of 5 simulation runs [21-Jul-2024 12:10:36] Completed 2 of 5 simulation runs [21-Jul-2024 12:10:38] Completed 3 of 5 simulation runs [21-Jul-2024 12:10:40] Completed 4 of 5 simulation runs [21-Jul-2024 12:10:42] Completed 5 of 5 simulation runs
Data
フォルダー内でファイルの 1 つを確認します。各ファイルは次の MATLAB® 変数を含む MAT ファイルです。
SimulationInput
— ファイル内のデータを生成するためにモデルの構成に使用されたSimulink.SimulationInput
オブジェクト。これを使用して、このシミュレーションが実行された状態 (故障か健全かなど) に関する情報を抽出できます。logsout
— Simulink モデルがログに記録するよう構成されている対象データをすべて含むDataset
オブジェクト。PMSignalLogName
— ログ データを含む変数の名前 (この例では'logsout'
)。simulationEnsembleDatastore
コマンドはこの名前を使用してファイル内のデータを解析します。SimulationMetadata
— ファイル内に記録されたデータを生成したシミュレーションに関するその他の情報。
これで、生成されたデータを使ってシミュレーション アンサンブル データストアを作成することができます。結果の simulationEnsembleDatastore
オブジェクトは生成されたデータを指します。オブジェクトはアンサンブル内のデータ変数をリストし、既定ではすべての変数が読み取り対象として選択されています。アンサンブルの DataVariables
プロパティと SelectedVariables
プロパティを確認して、それらの指定を確定します。
ensemble = simulationEnsembleDatastore(location)
ensemble = simulationEnsembleDatastore with properties: DataVariables: [4x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [4x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]
ensemble.DataVariables
ans = 4x1 string
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
ensemble.SelectedVariables
ans = 4x1 string
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
これで、アンサンブル データストア内の生成データを ensemble
を使用して読み取り、解析することができます。詳細については、simulationEnsembleDatastore
を参照してください。
アンサンブル メンバーからの格納されている変数のサブセットの抽出
一般に、read
コマンドは、simulationEnsembleDatastore
オブジェクトから MATLAB® ワークスペースにデータを抽出するために使用します。多くの場合、アンサンブルには特定の解析に使用する必要がある変数よりも多くの変数が格納されています。読み取る変数のサブセットを選択するには、 simulationEnsembleDatastore
オブジェクトの SelectedVariables
プロパティを使用します。
この例では、次のコードを使用して、前に Simulink® モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore
オブジェクトを作成します (generateSimulationEnsemble
を参照)。アンサンブルには、モデル パラメーター ToothFaultGain
の 5 つの異なる値についてのシミュレーション データが含まれます。データのボリュームにより、unzip
操作には数分かかります。
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble = simulationEnsembleDatastore with properties: DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [5x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]
データの生成元のモデル TransmissionCasingSimplified
では、結果のアンサンブルに加速度計データ Vibration
やタコメーター データ Tacho
などの変数を格納するように構成していました。既定では、それらのすべての変数が simulationEnsembleDatastore
オブジェクトでデータ変数および選択された変数の両方として指定され、DataVariables
プロパティと SelectedVariables
プロパティに表示されます。
ensemble.DataVariables
ans = 5x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
ensemble.SelectedVariables
ans = 5x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
目的の解析を行うには、Vibration
データと、このメンバー データがシミュレートされた状態を記述する Simulink.SimulationInput
オブジェクトのみが必要であると仮定します。ensemble.SelectedVariables
を設定して読み取る変数を指定します。これにより、read
コマンドで現在のアンサンブル メンバーからそれらの変数が抽出されます。
ensemble.SelectedVariables = ["Vibration";"SimulationInput"]; data1 = read(ensemble)
data1=1×2 table
Vibration SimulationInput
___________________ ______________________________
{20202x1 timetable} {1x1 Simulink.SimulationInput}
data.Vibration
は、シミュレーション時間を格納する 1 つの timetable
とそれに対応する振動信号を含む cell 配列です。これで、このデータを必要に応じて処理することができます。たとえば、table から振動データを抽出してプロットします。
vibdata1 = data1.Vibration{1};
plot(vibdata1.Time,vibdata1.Data)
title('Vibration - First Ensemble Member')
このアンサンブルに対して read
を次に呼び出すと、最後に読み取られたメンバーの指定がアンサンブルの次のメンバーに進みます (状態監視と予知保全のためのデータ アンサンブルを参照)。選択した変数をアンサンブルの次のメンバーから読み取ります。
data2 = read(ensemble)
data2=1×2 table
Vibration SimulationInput
___________________ ______________________________
{20215x1 timetable} {1x1 Simulink.SimulationInput}
data1
と data2
に異なるアンサンブル メンバーからのデータが含まれることを確認するため、変化するモデル パラメーター ToothFaultGain
の値を調べます。各アンサンブルで、この値は SimulationInput
変数の Variables
フィールドに格納されています。
data1.SimulationInput{1}.Variables
ans = Variable with properties: Name: 'ToothFaultGain' Value: -2 Workspace: 'global-workspace' Context: '' Description: ""
data2.SimulationInput{1}.Variables
ans = Variable with properties: Name: 'ToothFaultGain' Value: -1.5000 Workspace: 'global-workspace' Context: '' Description: ""
この結果から、data1
は ToothFaultGain
= –2 のアンサンブル メンバーから、data2
は ToothFaultGain
= –1.5 のメンバーからのものであることが確認されます。
アンサンブル メンバーへの派生データの追加
アンサンブル データストアのデータを処理し、派生した変数をアンサンブル メンバーに追加できます。この例では、変数の値を処理して、アンサンブル メンバーに故障ありで取得されたデータが含まれているかどうかを示すラベルを計算します。その後、そのラベルをアンサンブルに追加します。
この例では、次のコードを使用して、前に Simulink® モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore
オブジェクトを作成します。(generateSimulationEnsemble
を参照。)アンサンブルには、モデル パラメーター ToothFaultGain
の 5 つの異なる値についてのシミュレーション データが含まれます。モデルは、この例のために simEnsData.zip
に格納されている MAT ファイルの logsout
という名前の変数にシミュレーション データを記録するように構成されています。データのボリュームにより、unzip
操作に 1 ~ 2 分かかることがあります。
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble = simulationEnsembleDatastore with properties: DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [5x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]
アンサンブルの最初のメンバーからデータを読み取ります。最初のメンバーであるアンサンブルがソフトウェアで判定され、対応するファイルの名前を反映するように ensemble.LastMemberRead
プロパティが更新されます。
data = read(ensemble)
data=1×5 table
PMSignalLogName SimulationInput SimulationMetadata Tacho Vibration
_______________ ______________________________ _________________________________ ___________________ ___________________
{'logsout'} {1x1 Simulink.SimulationInput} {1x1 Simulink.SimulationMetadata} {20202x1 timetable} {20202x1 timetable}
既定では、アンサンブル データに格納されているすべての変数が SelectedVariables
として指定されます。そのため、返される table の行には、すべてのアンサンブル変数が含まれます。これには、このアンサンブル メンバーのシミュレーションについて構成した Simulink.SimulationInput
オブジェクトを格納する変数 SimulationInput
も含まれます。そのオブジェクトの Variables
プロパティに、アンサンブル メンバーに使用される ToothFaultGain
の値がデータ構造体として格納されています。その値を調べます。(シミュレーションの構成の格納方法の詳細については、Simulink.SimulationInput
(Simulink)を参照してください。)
data.SimulationInput{1}
ans = SimulationInput with properties: ModelName: 'TransmissionCasingSimplified' InitialState: [0x0 Simulink.op.ModelOperatingPoint] ExternalInput: [] ModelParameters: [0x0 Simulink.Simulation.ModelParameter] BlockParameters: [0x0 Simulink.Simulation.BlockParameter] Variables: [1x1 Simulink.Simulation.Variable] PreSimFcn: [] PostSimFcn: [] UserString: '' VariantConfiguration: ''
Inputvars = data.SimulationInput{1}.Variables; Inputvars.Name
ans = 'ToothFaultGain'
Inputvars.Value
ans = -2
各アンサンブル メンバー内の ToothFaultGain
値を、ギア故障の有無を示すバイナリ インジケーターに変換すると仮定します。さらに、システムの使用経験から、ギア歯故障のゲイン値の大きさが 0.1 より小さい場合は健全動作と見なすのに十分であることがわかっているとします。このアンサンブルのゲイン値を、–0.1 < ゲイン < 0.1 の場合は 0 (故障なし)、そうでない場合は 1 (故障あり) のインジケーターに変換します。
sT = abs(Inputvars.Value) < 0.1;
新しい歯の故障インジケーターを対応するアンサンブル データに追加するには、まずアンサンブルのデータ変数のリストを拡張して、インジケーターの変数を含めます。
ensemble.DataVariables = [ensemble.DataVariables; "ToothFault"];
ensemble.DataVariables
ans = 6x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
"ToothFault"
この操作は、概念的にはアンサンブル データの table に列を追加することと同じです。新しい変数の名前が DataVariables
に格納されたので、メンバーのその列に writeToLastMemberRead
を使用して派生値を代入します。
writeToLastMemberRead(ensemble,'ToothFault',sT);
実際には、歯の故障インジケーターをアンサンブルのすべてのメンバーに追加することが望まれます。そのためには、アンサンブル データストアを未読の状態にリセットして、次回の読み取り操作が最初のアンサンブル メンバーから開始されるようにします。その後、すべてのアンサンブル メンバーをループ処理して各メンバーの ToothFault
を計算し、これを追加します。reset
操作では ensemble.DataVariables
は変更されないため、"ToothFault"
はそのリストに存在したままになります。
reset(ensemble); sT = false; while hasdata(ensemble) data = read(ensemble); InputVars = data.SimulationInput{1}.Variables; TFGain = InputVars.Value; sT = abs(TFGain) < 0.1; writeToLastMemberRead(ensemble,'ToothFault',sT); end
最後に、新しい歯の故障インジケーターをアンサンブル データストア内に状態変数として指定します。この指定を使用して、メンバー データが生成された状態を表す変数をアンサンブル データ内で追跡および参照することができます。
ensemble.ConditionVariables = {"ToothFault"};
ensemble.ConditionVariables
ans = "ToothFault"
新しい変数をさらなる解析のために読み取る場合は ensemble.SelectedVariables
に追加できます。simulationEnsembleDatastore
オブジェクトに格納されているデータを操作し解析するための他の方法を示す例については、Simulink を使用した故障データの生成を参照してください。
1 回の操作での複数のアンサンブル メンバーの読み取り
read
コマンドの 1 回の呼び出しで複数のアンサンブル メンバーからデータを読み取るには、アンサンブル データストアの ReadSize
プロパティを使用します。この例では simulationEnsembleDatastore
を使用しますが、fileEnsembleDatastore
にも同じ手法を使用できます。
次のコードを使用して、前に Simulink モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore
オブジェクトを作成します (generateSimulationEnsemble
を参照)。アンサンブルには、モデル パラメーター ToothFaultGain
の 5 つの異なる値についてのシミュレーション データが含まれます。(データのボリュームにより、unzip
操作に 1 ~ 2 分かかることがあります。)一部のデータ変数を読み取るように指定します。
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout'); ensemble.SelectedVariables = ["Vibration";"SimulationInput"];
既定では、このアンサンブル データストアに対して read
を呼び出すと、最初のアンサンブル メンバーの Vibration
変数と SimulationInput
変数の値を含む単一行の table が返されます。3 つのメンバーを一度に読み取るように ReadSize
プロパティを変更します。
ensemble.ReadSize = 3; data1 = read(ensemble)
data1=3×2 table
Vibration SimulationInput
___________________ ______________________________
{20202x1 timetable} {1x1 Simulink.SimulationInput}
{20215x1 timetable} {1x1 Simulink.SimulationInput}
{20204x1 timetable} {1x1 Simulink.SimulationInput}
read
は、1 番目、2 番目、および 3 番目の各アンサンブル メンバーからのデータを各行に含む 3 行の table を返します。さらに、read
は、アンサンブル データストアの LastReadMember
プロパティを 3 つの対応するファイルのパスを含む string 配列に更新します。データの読み込み中にメモリ不足になるリスクがあるため、ReadSize
をあまり大きい値に設定することは避けてください。
アンサンブルに追加のメンバーが 3 つ以上含まれている場合は、次の read
操作で 4 番目、5 番目、および 6 番目のメンバーからのデータが返されます。この例のアンサンブルに含まれるメンバーは全部で 5 つだけであるため、次の read
操作では 2 行のみが返されます。
data2 = read(ensemble)
data2=2×2 table
Vibration SimulationInput
___________________ ______________________________
{20213x1 timetable} {1x1 Simulink.SimulationInput}
{20224x1 timetable} {1x1 Simulink.SimulationInput}
バージョン履歴
R2018a で導入
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)