診断特徴デザイナー用の行列データの準備
この例では、診断特徴デザイナーへのインポートのために行列データを準備する方法を説明します。最初に、単一メンバー行列とそれに関連する故障コードの 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 を [診断特徴デザイナー] にインポートすることができます。
参考
診断特徴デザイナー | table
| timetable
| array2timetable