ドキュメンテーション

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

測定データを含むファイル アンサンブル データ ストア

予知保全アルゴリズムの設計では、さまざまな条件下でシステムの動作から収集された、大規模なデータセットを扱うことがよくあります。fileEnsembleDatastore オブジェクトは、このようなデータの管理と操作に役立ちます。この例では、ディスク上のアンサンブル データを指す fileEnsembleDatastore オブジェクトを作成します。これを、アンサンブルからデータを読み取り、アンサンブルにデータを書き込む関数を使って構成します。

データ ファイルの構造

この例では、ベアリング システムの健全な動作データを含む、baseline_01.matbaseline_02.mat という 2 つのデータ ファイルがあります。また、同じシステムの故障データを含む FaultData_01.matFaultData_02.matFaultData_03.mat の 3 つのデータ ファイルもあります。実際はこれよりはるかに多くのデータ ファイルを扱うことがあります。

これらのデータ ファイルのそれぞれが、1 つのデータ構造体 bearing を含んでいます。最初の健全なデータセットからデータ構造体を読み込んで確認します (データ量のため unzip 操作に数分かかります)。

unzip fileEnsData.zip  % extract compressed files
load baseline_01.mat
bearing
bearing = struct with fields:
      sr: 97656
      gs: [585936x1 double]
    load: 270
    rate: 25

構造体には、加速度計データのベクトル gs、データが記録されたサンプル レート sr、およびその他のデータ変数が含まれています。

ファイル アンサンブル データ ストアの作成と構成

予知保全アルゴリズムの設計のためにこのデータを扱うには、まず現在のフォルダーにあるデータ ファイルを指すファイル アンサンブル データ ストアを作成します。

fensemble = fileEnsembleDatastore(pwd,'.mat');

アンサンブル内のデータを操作するには、その前に、MATLAB® ワークスペースに変数を読み取り、データをファイルに書き戻すためのデータ ファイルの処理方法をソフトウェアに指示する関数を作成しなければなりません。この例では、提供されている以下の関数を使用します。

  • readBearingData — 要求された変数を構造体 bearing から抽出し、ファイルに保存されている他の変数を抽出します。この関数はデータの故障状態についてファイル名の解析も行います。関数は、要求された各変数に対して 1 つの table 変数を含む table 行を返します。

  • writeBearingData — 構造体を受け入れて、その変数を個々の格納された変数としてデータ ファイルに書き込みます。

これらの関数を、アンサンブル データ ストアの ReadFcn プロパティと WriteToMemberFcn プロパティにそれぞれ割り当てます。

addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path

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"    [146484x1 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 array
    "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"    [146484x1 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]

rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path

参考

| |

関連するトピック