測定データを含むファイル アンサンブル データストア
予知保全アルゴリズムの設計では、さまざまな状態下でシステムの動作から収集された、大規模なデータセットを扱うことがよくあります。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: [5000×1 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: [4×1 string]
    IndependentVariables: [0×0 string]
      ConditionVariables: [2×1 string]
       SelectedVariables: [0×0 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0×0 string]
                   Files: [5×1 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"    {5000×1 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 = 6×1 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"    {5000×1 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      {4096×1 double}    {4096×1 double}
data2 = read(fensemble)
data2=1×4 table
     label      load         freq             spectrum    
    ________    ____    _______________    _______________
    "Faulty"     50     {4096×1 double}    {4096×1 double}
参考
fileEnsembleDatastore | read | writeToLastMemberRead