Main Content

診断特徴デザイナーでのカスタム特徴の作成

診断特徴デザイナーには、アンサンブル データから特徴を抽出できる、一連の組み込み処理関数が用意されています。また、関数を追加してカスタム特徴を抽出し、アプリ内の他の特徴と同じようにこれらの特徴を操作することもできます。たとえば、カスタム特徴の処理には次のようなものがあります。

  • meanfreq など、アプリに組み込まれていない既存のコマンド ライン関数

  • 複数の演算を組み合わせた特殊な関数

1 つの要件は、カスタム特徴の構文が次の形式に従っていることです。

function Feature = myCustomFunction(DataVariable,IndependentVariable,varargin)
データ変数と時間変数を含む Vibration という名前の変数など、処理する変数を選択すると、カスタム関数はこれら 2 つの変数を最初の 2 つの入力引数として使用します。varargin で追加の引数を指定して、処理をサポートしたり、特定の出力を選択したりできます。

[カスタム特徴] を使用するには、次の一般的な手順を実行します。

  1. [変数] ペインで、信号またはスペクトルなどの変数を選択します。

  2. [時間領域の特徴][カスタム特徴]、または [周波数領域の特徴][カスタム特徴] のいずれかを選択します。

  3. [カスタム特徴] タブで、[関数の追加] をクリックします。

  4. [新規関数の作成] で、新しい関数に付ける名前を指定します。関数作成用のテンプレートが表示されます。関数が既に存在する場合は、[関数の追加] に入力します。

  5. [関数の確認] を使用して、アンサンブルの最初のメンバーで関数をテストします。

  6. [プロット] を設定して、関数を適用したときにヒストグラムを自動的にプロットするかどうかを選択します。

  7. [適用] をクリックします。

このアプリは、計算した組み込みの特徴とともにカスタム特徴を特徴テーブルに追加し、特徴のランク付けを実行するとき、および特徴を [分類学習器] または MATLAB® ワークスペースにエクスポートするときにそれらを含めます。

一般的なワークフローの説明

カスタム関数の追加

まず、[変数] ペインから信号またはスペクトルを選択します。次に、[時間領域の特徴][カスタム特徴]、または [周波数領域の特徴][カスタム特徴] のいずれかを選択します。次の図では、[Vibration] 信号が選択されているため、使用可能な [カスタム特徴] オプションは [時間領域の特徴] にあります。

Vibration is selected in the Variables pane on the left. Custom Features is the last item in the menu on the right.

[カスタム特徴] タブには、関数を追加し、関数を確認し、最後に関数を適用して新しい関数を作成する操作が含まれています。

The Custom Features tab includes, from left to right, Add Function, Check Function, Plot Results, Apply, and Close Custom Features.

関数を適用した後、アプリで自動的にヒストグラムをプロットする場合は、[結果のプロット] を選択します。関数を追加するプロセスを開始するには、[関数の追加] をクリックします。ダイアログ ボックスが表示され、名前を指定して関数を作成するプロセスを開始できます。関数がパスに既に存在する場合は、既存の関数を追加することもできます。次の図では、customZeroCrossings という名前の新しい関数が作成されます。

The Add custom function dialog box contains the Create option on the top and the Add option on the bottom. The top option is selected and the function name customZeroCrossings is specified.

[OK] をクリックすると、新しいテンプレート スクリプトが作成されます。

function Feature = CustomZeroCrossings(DataVariable,IndependentVariable,varargin)
% Input:
% DataVariable: Selected Signal
% IndependentVariable: The current independent variable associated with the selected signal
% varargin: The additional input arguments to the function
% Output:
% Feature: A numeric scalar or vector value
Feature = [];    %Assign the computed feature value here
end

すべてのカスタム関数は、同じ基本引数リストを使用します。データ変数 (例: Vibration/Data)、独立変数 (例: Vibration/Time)、関数が必要とする追加のオプションの引数です。典型的なカスタム関数の例については、カスタム特徴関数の例を参照してください。スクリプトを編集して、必要なカスタム特徴の処理を実行します。

カスタム関数のテスト

新しい関数を検定するには、[関数の確認] をクリックします。アプリは、アンサンブルの最初のメンバーにのみ処理を適用して、エラーなしで特徴を計算できることを検証します。関数が正しく動作すると、最初のメンバーまたは最初のフレームの特徴値を含む [検定に成功] メッセージが表示されます。アプリにこの検定値は保存されないため、後で使用することはできません。

The Successfully qualified message provides a value of 55 for the custom function.

関数が正しく動作しない場合は、エラー メッセージが表示されます。

Error message that states "Computed feature value must be a numeric scalar."

カスタム関数の適用

関数テストが成功したら、[適用] をクリックして新しい特徴を生成し、さらに [プロット] を選択した場合はヒストグラムをプロットすることができます。次の図では、新しい特徴が FeatureTable1 に追加され、ヒストグラムが分布を示しています。

The new CustomZeroCrossings feature is listed under FeatureTable1 on the left. The histogram plot is on the right.

カスタム特徴テーブルを使用した特徴情報の記録および引数と名前の指定

アプリは、特徴の作成に使用したものと同じ [カスタム特徴] タブに戻ることでアクセスできるテーブルに、追加したカスタム関数の記録を保持します。このテーブルには、関数名、オプションの引数、アプリが生成する特徴の名前、および特徴の説明が含まれます。関数名以外のフィールドは変更できます。

  • [オプション引数] には、定数またはメソッドなど、関数が必要とする追加情報を入力できます。同じ関数の複数のバージョンを追加することもできますが、各フィールドの引数に異なる引数値を指定することで特徴の計算を変更できます。

  • [生成された特徴の名前] には、アプリが特徴に割り当てる名前を指定できます。

  • [説明] では、カスタム関数に関連する情報を取得できます。

次の表は、1 つのエントリをもつカスタム特徴テーブルを示しています。行を選択すると、関数スクリプトの編集やテーブルからの関数の削除などの操作を実行できます。特徴テーブルのオプションから新しいカスタム関数を作成することもできます。チェック ボックスをオンにして、計算する関数を選択します。

The custom feature table contains information for the function CustomZeroCrossings. The selection check box is on the left. The remaining columns, from left to right, contain the function name, the optional arguments, the generated feature name and the feature description. The row is blue because it is selected. A tooltip describing the Open selected custom function option is on the right.

カスタム特徴テーブルでは、複数の特徴を選択して一度に複数の特徴を計算したり、新しい特徴を追加したり、テーブルの既存の特徴を編集したり、テーブルから特徴を削除したりすることもできます。

The custom feature table contains multiple function. Two features are selected to allow applying the computations at once.

カスタム特徴テーブルでは、関数に渡す引数を指定できます。次の図では、カスタム関数 myCustomFunc は、引数が Crossing の場合はゼロクロッシングの数を、引数が Sign の場合は符号変化の回数を計算します。生成される特徴名は、引数の指定ごとに一意です。

The custom feature table contains the same function name for both features. The second generated feature name appends _1 to the name of the first generated feature name.

アプリは、カスタムの信号特徴とカスタムのスペクトル特徴を個別のテーブルに保存します。時間領域の [カスタム特徴] タブとカスタム特徴テーブルを復元するには、[変数] ペインで信号変数を選択し、[時間領域の特徴][カスタム特徴] の順に選択します。同様に、スペクトルの特徴については、いずれかのスペクトル変数を選択してから、[時間領域の特徴][カスタム特徴] の順に選択します。

特徴テーブルは、それを作成したセッション中にのみ復元できます。保存されたセッションは、計算したすべての特徴を保持しますが、テーブル自体は保持しません。

カスタム特徴関数の例

カスタム特徴関数としては、既存の MATLAB 関数の直接使用から、指定するオプションの引数に応じてさまざまな特徴タイプを提供できる多目的関数まで、さまざまなものが考えられます。

MATLAB 関数の直接使用

一部の MATLAB 関数は、カスタム特徴関数が必要とする構文を既に使用しています。たとえば、Signal Processing Toolbox™ の関数 meanfreq を考えてみましょう。この関数は構文 freq = meanfreq(x,fs) を使用します。この構文では、x はスペクトル データの変数であり、fs は独立変数です。次の図に示すように、meanfreq と入力するだけで、この関数を使用して周波数領域のカスタム特徴を生成できます。

meanfreq is specified in for the bottom option

データ変数のみを必要とするカスタム特徴の作成

カスタム特徴テンプレートには、データ変数と独立変数の両方の引数が含まれていますが、データ変数のみを必要とする関数を作成できます。たとえば、次のコードは特徴 customZeroCrossings を作成しますが、信号データのみが必要であり、時間は必要ありません。関数の構文にはすべての引数が含まれますが、特徴値の計算では信号データのみが使用されます。このコードではテンプレートのテキスト コメントを除外していますが、関数にコメントを含めるか除外するかは選択できます。

function Feature = CustomZeroCrossings(DataVariable,IndependentVariable,varargin)
zcd = dsp.ZeroCrossingDetector;
Feature = double(zcd(DataVariable));    %Assign the computed feature here
end

データ変数と独立変数の両方を必要とするカスタム特徴の作成

次のコード例は、信号値と時間の両方を使用する、より複雑なカスタム特徴 mySignChange を示しています。

function Feature = mySignChange(DataVariable,IndependentVariable,varargin)
timeVector = time2num(IndependentVariable, "seconds");
dt = diff(timeVector);
dx = diff(DataVariable);
slope = dx./dt;
slope_sign = sign(slope);
Feature = numel(find(diff(slope_sign)));
end

追加の引数の使用

オプション引数を使用して、特殊なデータ定数を指定したり、処理オプションを選択したりできます。次の関数 myCustomFunction では、オプション引数を Sign または Crossing のどちらに設定するかによって、勾配の符号の変化またはゼロクロッシングを計算できます。

function Feature = myCustomFunc(DataVariable,IndependentVariable,varargin)

% Extract underlying additional input from varargin
if ~isempty(varargin)
    FeatureType = varargin{:};CustomZeroCrossing1
    FeatureType = FeatureType{:};    
end

% Compute feature based on the FeatureType that has been passed in as input 
switch FeatureType
    case {'Sign','sign'}
        timeVector = time2num(IndependentVariable, "seconds");
        dt = diff(timeVector);
        dx = diff(DataVariable);
        slope = dx./dt;
        slope_sign = sign(slope);
        Feature = numel(find(diff(slope_sign)));
    case {'Crossing', 'crossing'}
        zcd = dsp.ZeroCrossingDetector;
        Feature = double(zcd(DataVariable));
end
end

このコードから両方のタイプの特徴を計算するには、最初のエントリに最初の引数を使用し、2 番目のエントリに 2 番目の引数を使用して、特徴をカスタム特徴テーブルに 2 回追加します。次に、両方を選択して [適用] をクリックします。

参考