Excel VBAと用いて簡易的に波形からピークを抽出します。


波形ピーク抽出ツール(getpeak_rev**.xlsm)

図0-1 波形ピーク抽出
図0-1 波形ピーク抽出

なお、本ツールを使用したことによって発生した損害等は一切補償いたしません。 特に本ツールを流用する場合は、動作確認を十分に行ったうえでご利用ください。


「ファイルが破損しているため開くことができません」 コメントが出る場合は こちらで対応願います。


1.サンプルファイルの使い方


(1)データの入力

ピーク抽出したい波形データの横軸値(X)と縦軸値(Y)を、下図に従い入力します。 横軸値が不明な場合は連番(1,2,3,・・・)を入力します。

なお、横軸値は昇順に並んでいることが条件となります


図1-1 データの入力
図1-1 データの入力

入力したデータの例

図1-2 入力データ例
図1-2 入力データ例

(2)抽出条件の設定

ピーク抽出条件として、次の設定を行います。


図1-3 条件設定
図1-3 条件設定

(1)cutoff 縦軸値の絶対値が指定値かなら、その点はピークとみなしません。
空白ならこの処理は行いません。
(2)MA_order データのトレンド除去を行う移動平均の次数を指定します。
空白なら移動平均の計算は行いません。
(3)Ndiv 波形と移動平均が公差する区間内に最低限必要なデータ点数(連続カウント)を指定します。
空白なら、区間内データが1点でもピークとみなします。

Ndivの設定例(例:Ndiv=3の場合)


図1-4 Ndiv設定例
図1-4 Ndiv設定例

(3)処理実行

処理実行ボタンを押すと、+側ピーク(山側)と-側ピーク(谷側)の2種類が抽出されます。


図1-5 条件設定
図1-5 処理実行

処理実行結果が下図のように出力されます。
"+Peak ID"は抽出したピークの横軸(X)値、"+Peak Y"は縦軸(Y)値になります("-"も同様です)。


図1-6 実行結果
図1-6 実行結果

図1-7 実行結果グラフ
図1-7 実行結果グラフ


2.波形ピーク抽出方法

下図のような波形からピークを抽出します(○印が抽出ピーク)。


図2-1 波形ピーク抽出例
図2-1 波形ピーク抽出例

波形ピーク抽出は、次の手順に従って行います。


(1)トレンドの除去

波形データは、それ自体に大きな“うねり”を持つのが一般的です。 これをトレンドと呼びます。 このトレンドを除去することで、波形データ内のピークを顕著にすることができます。 トレンドの算出には今回移動平均を用います(下図赤点線)。


図2-2 移動平均の算出
図2-2 移動平均の算出

移動平均算出後、波形データからその移動平均を差し引きます。


図2-3 トレンドの除去
図2-3 トレンドの除去

(2)ピーク抽出区間の設定

ピークの抽出は、波形データと移動平均が公差する区間内で行います。 このとき、連続でn点以上同一符号が続く区間のみでピーク抽出を行います (本来、波形データと移動平均が繰り返し公差するようなケースはノイズによるものが多いため、このような処理を入れています)。


図2-4 ピーク抽出区間の設定
図2-4 ピーク抽出区間の設定

(3)ピークの抽出

上記で設定した区間内から縦軸(Y)最大値となるデータをピーク位置として判定します (単に最大値だけを抽出すれば、ピークは山のみを取得します)。 このときの縦軸最大値はトレンドを除去した値ですので、それ自体がピーク値とはなりません。 従って、このとき抽出するのは横軸(X)値のみとなります。 この横軸値に対応する波形データの縦軸値をピーク値として抽出します。


図2-5 ピークの抽出
図2-5 ピークの抽出


本ツールは、トレンドを除去するのに任意の移動平均をもとにピーク取得を行っています。 そのため、必ずしも真のピークが抽出できているとは限りませんし、移動平均の次数によってピークの取れ方も変わります。

波形からのピーク抽出は本来かなり難しく、一意にこの方法ですべてが解決する、といったものはありません。 用途や目的に応じてトレンドの除去方法やノイズ除去方法などを独自に作成してみてください。


      

参考文献

波形データからピークを簡易的に抽出する方法として、今回はVBAを用いたツールを作成しましたが、Excel関数だけでも対応は可能です。 ただ、VBAを使うことで途中の計算結果を出力することなく計算できるので、ファイル容量を小さくできます。 また計算ロジックも簡単なため、VBAの練習にはちょうど良い例になると思います。