matlab-extract-rotating-machinery-features について
matlab-extract-rotating-machinery-featuresは、回転機械の時系列データから予測に役立つ特徴量を抽出・選択するMATLABスキルです。状態監視と故障検出のワークフローを、健全度指標の開発からデプロイまで案内します。
主な機能
- 01振動などのセンサー信号の処理
- 02統計・スペクトル特徴量の抽出
- 03軸受・ギアの故障指標の算出
- 04予測特徴量の順位付けと選択
- 05健全度指標の開発
- 06スクリプトとデプロイ用コードの準備
活用シーン
- 01回転機械の状態監視システムの構築
- 02高周波データから有用な特徴量を抽出
- 03寿命試験データから特徴量を選択
- 04デプロイ向け健全度指標の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-extract-rotating-machinery-featuresインストール後、Claude Code で/matlab-extract-rotating-machinery-featuresを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/bearings.mdgears.mdspectral.mdtsa.mdvibration.md詳細
回転機械の特徴抽出
状態監視や故障検出の用途に向けて、回転機械のデータから予測に役立つ特徴を抽出します。このスキルでは、回転機械に特化した、特徴抽出ワークフローの重要な手順とアルゴリズムを扱います。
使用する場合
- 行列、
timetable、またはセル配列の変数に格納された、回転機械のセンサー測定値を表す等間隔サンプリングの時系列データがある場合。 - 回転機械の状態監視システムまたは故障検出システムを構築する場合。
- 特徴抽出のために回転機械のデータを処理する場合。
- 予測性能の高い特徴を選択し、特徴から健全度指標を構築する場合。
- 状態監視システムや故障検出システムを展開する場合。
- 高周波の振動データがあり、効率的な状態監視のために特徴ベースでデータを削減する場合。
使用しない場合
- 画像、動画、または表形式の(順序付けられていない)データなど、時系列ではないデータがある場合。
- 故障検出ではなく、2つ以上の故障クラスによる故障分類を行う場合は、代わりに
classificationLearnerを使用してください。 - ラベル付きまたはラベルなしの時系列データがあり、異常検出モデルを構築する場合は、代わりに
timeSeriesAnomalyDetectorを使用してください。 - 統計的特徴抽出やスペクトル特徴抽出に適さない、非常に低周波のデータがある場合。
特徴抽出ワークフロー
次の5つの手順を対話形式で進めます。
Task Progress:
- [ ] Step 1: Process data for feature extraction
- [ ] Step 2: Extract features from data
- [ ] Step 3: Rank and select features
- [ ] Step 4: Develop a health indicator using selected features
- [ ] Step 5: Deploy the application
パラメーターを黙って選択したり、前提を決めたりしないでください。判断が必要な各段階でユーザーに確認してください。特に、次のような重要なシステムパラメーターの提示をユーザーに求めてください。
- 軸受や歯車の形状パラメーター
- 回転速度(RPM)
- 判明している場合は、構造の共振周波数
手順1:特徴抽出用にデータを処理する
- タコメーターまたはRPMのデータが利用できる場合、測定値から非周期的な信号成分やノイズを除去できます。時間同期平均化(
tsa)や関連する手法(tsadifference、tsaresidualなど)を使用して、周期的な信号成分を分離します。タコメーター信号が利用できる場合は、tsaによる処理の前にt achorpmを使用してRPMを推定します。 - 変調された時系列信号には、信号包絡線(
envelope)または包絡線スペクトル(envspectrum)を使用して信号を復調します。
回転速度と故障周波数を設定する(故障帯域を配置する前に必ず行ってください)
タコメーターまたは RPM チャンネルからわかるのは、特定の 1 本のシャフトの回転速度です。どの物理シャフトに取り付けられているか、および 1 回転あたりのパルス数を把握する必要があります。モーター/入力シャフトだと決めつけないでください。
- タコメーターがどこに取り付けられているか、1 回転あたりのパルス数はいくつかをユーザーに確認するか、設定から推定してください。ギア駆動系では、既知のシャフトからギア比を使って回転速度を伝播させます。高速側に向かう場合は乗算し、低速側に向かう場合は除算します。
- 導出した回転速度は、必ず測定スペクトルと照合して妥当性を確認してください。 パワースペクトル(
pspectrum)を計算し、予想されるシャフト回転周波数またはギア噛み合い周波数に卓越した線が現れることを確認します。最大ピークの周波数が大きく異なる場合(例:シャフト回転周波数を 3 Hz と仮定したのに、スペクトルのピークが 90 Hz の場合)は、タコメーターの取り付け位置についての前提が誤っています。続行する前に、前提を見直してください。 - 重要 — 実際の回転位相情報なしに
tsaを実行してはいけません。 タコメーター信号、RPM プロファイル、またはオーダートラッキングデータがないのに、ユーザーが時間同期平均化を求めた場合:TSA のリクエストを必ず拒否してください。 ユーザーには次のように伝えてください。「TSA には、データに含まれていない回転位相情報(タコメーターパルスまたは RPM プロファイル)が必要です。時間同期平均化は実行できません。」そのうえで、バンドパスフィルタリング、スペクトル平均化(pwelch)、生信号の統計的特徴量など、回転位相を必要としない代替のノイズ低減方法を提示してください。不足しているデータを回避してはなりません。スペクトルから RPM を推定したり、卓越したスペクトルピークからシャフト速度を推測したり、タコメーターパルスを捏造したり、回転位相情報がないとユーザーが伝えたデータファイルにその情報を注入するため、データファイルを変更または再生成したりしてはいけません。
ベアリングの特性故障周波数(Fo、Fi、Fb、Fc)は、bearingFaultBands を使って、ベアリングの形状とシャフト回転速度から求めます。ユーザーがこれらの周波数を直接提示した場合(データセットでは一般的です)は、提示された値をそのまま使ってください。再導出するために形状を捏造してはいけません。シャフト/ギアの情報しかなく、ベアリングの形状がわからない場合は、故障周波数とシャフト回転速度の比率を推測するのではなく、形状(転動体の数、ボール径/ピッチ円直径、接触角)を確認してください。あるいは、包絡線スペクトルからシャフト回転周波数以外の卓越ピークを実測に基づいて特定し、実測値による推定であることを明記してください。
ステップ 2:データから特徴量を抽出する
rms、kurtosis、peak2rmsなどの統計指標を含む、時間領域の特徴量を抽出します。- 復調信号から、
bandpowerやスペクトルピークと周波数などのスペクトル特徴量を抽出します。 - ベアリングやギアなどの特殊な部品については、
bearingFaultBands、gearMeshFaultBands、gearConditionMetricsなどのドメイン固有の特徴量を抽出します。faultBandsを使って、シャフトや汎用部品の特性故障周波数帯域(基本周波数+高調波+側帯波)を作成し、faultBandMetricsを使ってそれらの帯域のスペクトル指標(帯域ごとのピーク振幅、ピーク周波数、帯域パワー)を計算します。 - 多数の特徴量を抽出するインタラクティブツールが必要な場合は、
diagnosticFeatureDesignerの使用を提案します。
多数のファイルにわたる特徴量の抽出(バッチ処理)
状態監視データセットや故障するまで運転するデータセットは、通常、多数の測定ファイル(日ごと、テストごと、または動作点ごとに1つ)にまたがります。ワークフローが多数のファイルに拡張される場合、1つのファイルだけを読み込んだり、その場しのぎのループを書いたりしないでください。コレクションの管理には fileEnsembleDatastore を使用します。
DataVariables、IndependentVariables(ファイル名から解析した日付やサイクルインデックスなど)、ConditionVariablesを指定してデータストアを構成し、1つのメンバーの信号を返すカスタムReadFcnを設定します。read/hasdata/resetでメンバーを反復処理し、メンバーごとの特徴量を抽出して、writeToLastMemberReadで書き戻すと、その特徴量がアンサンブルに保持されます。- 大規模なコレクションでは、データストアを
tall配列でラップして特徴量テーブルをgatherするか、データストアをpartitionして並列処理します。
重要な API ルール(よくある失敗): SelectedVariables は、DataVariables、ConditionVariables、IndependentVariables ですでに宣言した変数のサブセットでなければなりません。宣言されていない名前を選択すると、"the 'SelectedVariables' property does not include any valid ... names" というエラーが発生します。同様に、新しい特徴量を保持するには、writeToLastMemberRead を呼び出す前に、その名前を DataVariables に追加する必要があります。データストアが認識していない列を書き込んだり、後から選択したりすることはできません。生信号を読み取るだけの最小限の読み取り・特徴量抽出ループでは、生信号の変数を宣言して選択するだけで十分です。
fds = fileEnsembleDatastore(folder, ".mat");
fds.ReadFcn = @readMember; % returns a one-row table for one file
fds.DataVariables = ["signal","fs"]; % raw signals to read
fds.IndependentVariables = "day"; % trend index
fds.SelectedVariables = ["signal","fs","day"]; % subset of the declared names
reset(fds);
feats = [];
while hasdata(fds)
m = read(fds);
[es,f] = envspectrum(m.signal{1}, m.fs);
feats = [feats; m.day, kurtosis(es)]; %#ok<AGROW>
end
これにより、独立変数でインデックス付けされた、ファイルごとに1行の特徴量テーブルが生成されます。これは、Step 3(ランキング)と Step 4(健全度指標)が想定する入力と一致します。
信号の種類:振動、電気信号、その他
上記の手法は、加速度計で測定する振動に限られません。モーター電流シグネチャ解析では、同じスペクトル故障帯域の処理方法(pspectrum に対する faultBands/gearMeshFaultBands/bearingFaultBands + faultBandMetrics)をモーター電流または電圧信号に適用します。シャフトやギアメッシュの故障は、電流スペクトル上のスペクトル線や側波帯として現れます。加速度計の信号だけを前提とする手法(構造共振の包絡線復調、convertVibration、kurtogram による帯域選択)を電気信号に無理に適用しないでください。これらの手法は、電流信号には存在しない高周波の機械的キャリアを前提としています。変調された振動信号(ベアリング)には包絡線解析を使用し、電流やギア/シャフトの故障には直接的なスペクトル故障帯域指標を使用します。
ステップ 3:特徴量の順位付けと選択
-
故障までの劣化データでは、たとえば
monotonicity、trendability、prognosabilityを使用して、抽出した特徴量の予測能力を評価します。**これらの関数が受け取る寿命データは、table/timetable/セル配列(またはfileEnsembleDatastore)であり、単独の数値ベクトルではありません。**各サイクルの特徴量を特徴量テーブル(測定ごとに 1 行、特徴量ごとに 1 列。例:array2table(featureMatrix,"VariableNames",names))にまとめ、そのテーブルを渡してください。各関数は、特徴量の各列につき 1 つのスコアを返します。doubleベクトルに対してmonotonicity(x)を呼び出すと、「Expected input number 1 to be one of these types: cell, table, timetable, fileEnsembleDatastore」 というエラーになります。ラベル付き条件の検出/診断では、条件をどれだけ適切に分離できるかに基づいて特徴量を順位付けしてください(たとえば、クラス間散布とクラス内散布の比/フィッシャー型の比、またはranktesk/fscmrmr型の分離度)。よくある 3 つの問題:(a)寿命を表す変数名を指定します。例:
monotonicity(featTbl,"Day")。寿命の引数を指定せずに通常のテーブルを渡すと、最初の列が暗黙的に除外されます(1 列のテーブルでは空の1×0が返されます)。(b)結果は 1 行のテーブルです。いったん代入してからインデックスを指定してください(s = monotonicity(...); s.RMS)。monotonicity(...){1,1}は構文エラーになります。(c)trendability/prognosabilityは 2 つ以上のユニットを必要とし、単一の実行では適切に動作しません。単一ユニットのデータにはmonotonicityを使うか、スカラー HI をmean(sign(diff(HI)))で直接スコアリングしてください。 -
負荷やゲインの影響を受けやすい絶対値ではなく、故障メカニズム同士を比較する対比特徴量を優先してください。たとえば、包絡スペクトルの内輪帯域と外輪帯域における振幅の比(または対数比)は、どちらか一方の振幅だけを使うよりも、内輪と外輪のベアリング故障をはるかによく判別できます。同じ故障帯域の指標を正常なユニットと故障したユニットで比較すると、劣化しているコンポーネントを特定できます。
-
corrまたはcorrcoefを使用して相関の高い特徴量を特定し、冗長なものを除外します。 -
対話型ツールで最も予測能力の高い特徴量を選択したい場合は、
healthIndicatorDesignerの使用を提案します。
ステップ 4:選択した特徴量を使用してヘルスインジケーターを作成する
- 選択した特徴量を組み合わせ、システムの状態または健全性をスカラーで表すヘルスインジケーターを作成します。
lasso、pca、または線形回帰を使用してヘルスインジケーターを作成します。 - 対話型ツールでヘルスインジケーターを作成したい場合は、
healthIndicatorDesignerの使用を提案します。
ステップ 5:アプリケーションをデプロイする
- 上記のワークフローステップすべてを実行する MATLAB スクリプトを生成します。
- 求められた場合は、
linearDegradationModelまたはexponentialDegradationModelを使用して、残存耐用期間(RUL)を推定する MATLAB スクリプトを生成します。 - 求められた場合は、MATLAB Coder を使用して、マイクロコントローラーなどのエッジデバイスに組み込むための C/C++ コードを生成します。
専門的な手法
特定のコンポーネントや信号タイプを対象とする特徴量抽出および状態監視の問題に取り組む場合は、以下の追加リソースを読み込んでください。
- ベアリング故障:references/bearings.md を参照してください
- ギア故障:references/gears.md を参照してください
- 時間同期平均化:references/tsa.md を参照してください
- スペクトルデータ処理:references/spectral.md を参照してください
- 振動データ処理:references/vibration.md を参照してください
Copyright 2026 The MathWorks, Inc.