測定データを含むファイル アンサンブル データストア
予知保全アルゴリズムの設計では、さまざまな状態下でシステムの動作から収集された、大規模なデータセットを扱うことがよくあります。fileEnsembleDatastore
オブジェクトは、このようなデータの管理と操作に役立ちます。この例では、ディスク上のアンサンブル データを指す fileEnsembleDatastore
オブジェクトを作成します。これを、アンサンブルからデータを読み取り、アンサンブルにデータを書き込む関数を使って構成します。
データ ファイルの構造
この例では、ベアリング システムの健全な動作データを含む、baseline_01.mat
と baseline_02.mat
という 2 つのデータ ファイルがあります。また、同じシステムの故障データを含む FaultData_01.mat
、FaultData_02.mat
、FaultData_03.mat
の 3 つのデータ ファイルもあります。実際はこれよりはるかに多くのデータ ファイルを扱うことがあります。
これらのデータ ファイルのそれぞれが、1 つのデータ構造体 bearing
を含んでいます。最初の健全なデータセットからデータ構造体を読み込んで確認します
unzip fileEnsData.zip % extract compressed files load baseline_01.mat bearing
bearing = struct with fields:
sr: 97656
gs: [5000x1 double]
load: 270
rate: 25
構造体には、加速度計データのベクトル gs
、データが記録されたサンプル レート sr
、およびその他のデータ変数が含まれています。
ファイル アンサンブル データストアの作成と構成
予知保全アルゴリズムの設計のためにこのデータを扱うには、まず現在のフォルダーにあるデータ ファイルを指すファイル アンサンブル データストアを作成します。
fensemble = fileEnsembleDatastore(pwd,'.mat');
アンサンブル内のデータを操作するには、その前に、MATLAB® ワークスペースに変数を読み取り、データをファイルに書き戻すためのデータ ファイルの処理方法をソフトウェアに指示する関数を作成しなければなりません。この例では、提供されている以下の関数を使用します。
readBearingData
— 要求された変数を構造体bearing
から抽出し、ファイルに保存されている他の変数を抽出します。この関数はデータの故障状態についてファイル名の解析も行います。関数は、要求された各変数に対して 1 つの table 変数を含む table 行を返します。writeBearingData
— 構造体を受け入れて、その変数を個々の格納された変数としてデータ ファイルに書き込みます。
これらの関数を、アンサンブル データストアの ReadFcn
プロパティと WriteToMemberFcn
プロパティにそれぞれ割り当てます。
fensemble.ReadFcn = @readBearingData; fensemble.WriteToMemberFcn = @writeBearingData;
最後に、データ変数と状態変数を識別するようにアンサンブルのプロパティを設定します。
fensemble.DataVariables = ["gs";"sr";"load";"rate"]; fensemble.ConditionVariables = ["label";"file"];
アンサンブルを確認します。関数と変数名が適切なプロパティに割り当てられています。
fensemble
fensemble = fileEnsembleDatastore with properties: ReadFcn: @readBearingData WriteToMemberFcn: @writeBearingData DataVariables: [4x1 string] IndependentVariables: [0x0 string] ConditionVariables: [2x1 string] SelectedVariables: [0x0 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]
アンサンブル メンバーからのデータの読み取り
割り当てた関数は、アンサンブル データストアを構成するデータ ファイルの操作方法を read
コマンドと writeToLastMemberRead
コマンドに指示します。したがって、read
コマンドを呼び出すと、コマンドは readBearingData
を使用して fensemble.SelectedVariables
内のすべての変数を読み取ります。
読み取る変数を指定して、アンサンブルの最初のメンバーからそれらを読み取ります。read
コマンドは、最初のアンサンブル メンバーから MATLAB ワークスペース内の table 行へとデータを読み取ります。最初に読み取るアンサンブル メンバーはソフトウェアによって決定されます。
fensemble.SelectedVariables = ["file";"label";"gs";"sr";"load";"rate"]; data = read(fensemble)
data=1×6 table
label file gs sr load rate
________ ______________ _______________ _____ ____ ____
"Faulty" "FaultData_01" {5000x1 double} 48828 0 25
アンサンブル メンバーへのデータの書き込み
加速度計データ gs
の解析を、そのパワー スペクトルを計算し、パワー スペクトル データをアンサンブルに書き戻すことによって行うと仮定します。そのためには、まず table からデータを抽出してスペクトルを計算します。
gsdata = data.gs{1};
sr = data.sr;
[pdata,fpdata] = pspectrum(gsdata,sr);
pdata = 10*log10(pdata); % Convert to dB
周波数ベクトル fpdata
とパワー スペクトル pdata
を別個の変数としてデータ ファイルに書き込むことができます。まず、新しい変数をアンサンブル データストアのデータ変数のリストに追加します。
fensemble.DataVariables = [fensemble.DataVariables;"freq";"spectrum"]; fensemble.DataVariables
ans = 6x1 string
"gs"
"sr"
"load"
"rate"
"freq"
"spectrum"
次に、新しい値を、最後に読み取られたアンサンブル メンバーに対応するファイルに書き込みます。writeToLastMemberRead
を呼び出すと、これはデータを構造体に変換し、fensemble.WriteToMemberFcn
を呼び出してデータをファイルに書き込みます。
writeToLastMemberRead(fensemble,'freq',fpdata,'spectrum',pdata);
必要に応じて変数を識別するために、新しい変数を fensemble.SelectedVariables
や他のプロパティに追加することができます。
read
を再度呼び出すと、データがアンサンブル データストアの次のファイルから読み取られ、fensemble.LastMemberRead
プロパティが更新されます。
data = read(fensemble)
data=1×6 table
label file gs sr load rate
________ ______________ _______________ _____ ____ ____
"Faulty" "FaultData_02" {5000x1 double} 48828 50 25
これが別のメンバーからのデータであることは、table 内の変数 load
によって確認できます。ここでの値は 50 ですが、前に読み取られたメンバーでは 0 でした。
すべてのアンサンブル メンバーからのデータのバッチ処理
処理手順を繰り返してこのアンサンブル メンバーのスペクトルを計算し追加することは可能です。実際には、データの読み取り、処理、および書き込みのプロセスを自動化するとさらに便利です。これを行うには、アンサンブル データストアをデータが読み取られていない状態にリセットします。(reset
操作では、既に追加されている 2 つの新しい変数を含む fensemble.DataVariables
は変更されません)。その後、アンサンブルをループ処理して、各メンバーの読み取り、処理、および書き込みの手順を実行します。
reset(fensemble) while hasdata(fensemble) data = read(fensemble); gsdata = data.gs{1}; sr = data.sr; [pdata,fpdata] = pspectrum(gsdata,sr); writeToLastMemberRead(fensemble,'freq',fpdata,'spectrum',pdata); end
アンサンブルのすべてのメンバーが読み取られると、hasdata
コマンドは false
を返します。ここで、アンサンブル内の各データ ファイルには、そのファイルの加速度計データから求められた変数 spectrum
と変数 freq
が含まれています。予知保全アルゴリズムを開発する際、このループのような手法を使ってアンサンブル ファイルからデータを抽出し処理することができます。アルゴリズム開発のプロセスにおけるファイル アンサンブル データストアの使用をさらに詳しく説明する例は、転動体ベアリングの故障診断を参照してください。この例には Parallel Computing Toolbox™ を使ってさらに大規模なアンサンブルの処理を高速化する方法も示されています。
派生した変数がファイル アンサンブル データストアに存在することを確認するには、最初と 2 番目のアンサンブル メンバーからこれらを読み取ります。そのためには、アンサンブルを再びリセットし、選択した変数に新しい変数を追加します。実際には、派生値を計算した後はその値のみを読み取り、かなりのメモリ空間をとる可能性のある未処理データは読み取らないようにするのが有益です。この例では、新しい変数を含み、未処理のデータ gs
は含まない、選択した変数を読み取ります。
reset(fensemble) fensemble.SelectedVariables = ["label","load","freq","spectrum"]; data1 = read(fensemble)
data1=1×4 table
label load freq spectrum
________ ____ _______________ _______________
"Faulty" 0 {4096x1 double} {4096x1 double}
data2 = read(fensemble)
data2=1×4 table
label load freq spectrum
________ ____ _______________ _______________
"Faulty" 50 {4096x1 double} {4096x1 double}
参考
fileEnsembleDatastore
| read
| writeToLastMemberRead