Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

診断特徴デザイナー用の行列データの準備

この例では、診断特徴デザイナーへのインポートのために行列データを準備する方法を説明します。最初に、単一メンバー行列とそれに関連する故障コードの table への変換手順を行います。その後、複数の table を 1 つのアンサンブル table に組み合わせ、マルチメンバー アンサンブルとしてインポートできるようにします。

診断特徴デザイナーは、個々の数値行列に格納されているメンバー データを受け入れます。ただし、メンバー table の方が柔軟性に優れ使いやすいものとなっています。

  • table では測定値を、それぞれが独立変数と 1 つ以上のデータ変数の両方を含む信号変数として組み込むことが可能。行列では、データのすべての列に適用される独立変数を 1 つだけ指定できます。アプリがより簡単に解釈できるのは table データです。

  • table では、有用な変数名の指定が可能。行列では、アプリは列番号を使ってデータ ベクトルを識別します。

  • table では、各メンバーに状態変数や特徴などのスカラー情報を含めることが可能。行列では、スカラー情報を信号情報と組み合わせることはできません。この制限は、アプリ内でデータをラベル別にグループ化できず、たとえば healthy のデータを unhealthy のデータから分ける際に特徴の有効度を評価できないことを意味します。

アンサンブル table は、すべてのメンバー table を 1 つのデータセットに組み合わせるので、さらに使いやすくなっています。アンサンブル table をインポートするには、複数の項目を選択する必要はなく、代わりに 1 項目をインポートするだけとなります。

メンバー行列と故障コードの読み込み

メンバー データと故障コード データを読み込みます。メンバー データ dmatall は、30 秒間隔で取得したタイムスタンプ付きの振動およびタコメーター測定値の 4 つのセットで構成されています。これらのメンバー行列は 3 次元行列内に一緒にスタックされます。独立故障コードのベクトル fc は、各メンバーが健全なシステム (0) のものか不健全なシステム (1) のものかを示します。

tv_ensemble table を初期化します。これは最終的には、時間タグの付いたデータと故障コードの両方を各メンバーについて含みます。

load tvmatrixmembers dmatall fc

行列の table への変換

まず、単一のメンバー行列を、測定信号とメンバー故障コードの timetable を含む table に変換することから始めます。dmatall から最初のメンバー行列を抽出します。

memmat = dmatall(:,:,1);

memmat の最初の 2 列には測定された振動信号が含まれます。3 列目と 4 列目には測定されたタコメーター信号が含まれます。各信号は独立変数 (時間) とデータ変数 (振動またはタコメーターの測定値) で構成されます。これらの信号を独立行列 vibmat および tachmat に抽出します。

vibmat = memmat(:,[1 2]);
tachmat = memmat(:,[3 4]);

各信号を timetable に変換します。最初に、各信号をその時間成分とデータ成分に分離します。関数 seconds を使用して、タイムスタンプを timetable 用の duration 変数に変換します。次に、array2timetable に信号成分を入力し、信号を vibtt および tachtt という timetables に変換します。変数名 Data をデータ列に割り当てます。timetable は自動的に名前 Time を時間列に割り当てます。

vibtime = seconds(vibmat(:,1));
vibdata = vibmat(:,2);
tachtime = seconds(tachmat(:,1));
tachdata = tachmat(:,2);
vibtt = array2timetable(vibdata,'RowTimes',vibtime,'VariableNames',{'Data'});
tachtt = array2timetable(tachdata,'RowTimes',tachtime,'VariableNames',{'Data'});

故障コード ベクトル fc から故障コード faultcode を抽出します。

faultcode = fc(1);

2 つの timetable、故障コードのスカラー、および記述的な変数名を含むメンバー table を組み立てます。

memtable = table({vibtt},{tachtt},faultcode,'VariableNames',{'Vibration','Tacho','FaultCode'});

これで、複数のメンバー table を含むアンサンブル table に挿入できるメンバー table が得られます。アンサンブル table を初期化して最初のメンバーを挿入します。

tv_ensemble_table = table();
tv_ensemble_table(1,:) = memtable
tv_ensemble_table=1×3 table
         Vibration                Tacho           FaultCode
    ___________________    ___________________    _________

    {30001x1 timetable}    {30001x1 timetable}        1    

複数のメンバー行列のアンサンブル table への変換

すべてのメンバー行列について同じ処理手順を繰り返すことで、完全なアンサンブル table を作成できます。また、各行列の処理手順を自動化することも可能です。そのためには、まずアンサンブル table を初期化します。その後、メンバー行列をループ処理してメンバーを table に変換し、それらをアンサンブル table に挿入します。

tv_ensemble_table を初期化します。

tv_ensemble_table = table();

変換と挿入のシーケンスをループ処理します。

for idx = 1:size(dmatall,3)
    vibmat = dmatall(:,[1 2],idx);
    tachmat = dmatall(:,[3 4],idx);
vibtt = array2timetable(vibmat(:,2),'RowTimes',seconds(vibmat(:,1)),'VariableNames',{'Data'});
tachtt = array2timetable(tachmat(:,2),'RowTimes',seconds(tachmat(:,1)),'VariableNames',{'Data'});
tv_member = table({vibtt},{tachtt},fc(idx),'VariableNames',{'Vibration','Tacho','FaultCode'});
tv_ensemble_table(idx,:) = tv_member;
end

単一のアンサンブル table が作成されました。各行が 1 つのメンバーを表し、各メンバーは、振動信号とタコメーター信号を表す 2 つの timetable と、スカラーの故障コードで構成されています。

tv_ensemble_table
tv_ensemble_table=4×3 table
         Vibration                Tacho           FaultCode
    ___________________    ___________________    _________

    {30001x1 timetable}    {30001x1 timetable}        1    
    {30001x1 timetable}    {30001x1 timetable}        0    
    {30001x1 timetable}    {30001x1 timetable}        1    
    {30001x1 timetable}    {30001x1 timetable}        0    

[新規セッション] をクリックし、[変数の追加選択] ペインで DataTable を選択することで、このアンサンブル table を [診断特徴デザイナー] にインポートすることができます。

参考

| | |

関連するトピック