様々な検索手法を使用してピークを検出します
この機能は8.0 SR5.で更新されています。詳細は、リリースノートを参照してください。
pkfind method:=first; // pick peaks by using the first derivative method.
スクリプトからXファンクションにアクセスする場合、追加のオプションスイッチについてのページを参照してください。
| 表示 名  | 
変数 名  | 
I/O と データ型  | 
デフォルト 値  | 
説明 | 
|---|---|---|---|---|
| 入力 | iy | 
 入力 XYRange  | 
  | 
入力データを指定します。 | 
| スムージングポイント数 | smooth | 
 入力 int  | 
  | 
Savitzky-Golayスムージングは、ピーク検出前にスペクトルデータに実行することができます。スムージングを実行する場合、この変数を使ってSavitzky-Golayスムージングの移動ウィンドウでのポイント数(正の整数)を入力します。スムージングを実行したくない場合、この変数を0にセットします。 | 
| 方向 | dir | 
 入力 int  | 
  | 
 ピークの方向を指定します。
 オプションリスト: 
 
 
 
 
 
  | 
| 手法 | method | 
 入力 int  | 
  | 
 ピークを検索するのに使用する手法を指定します。
 オプションリスト: 
 
 
 
 
 
 
 
 
 
  | 
| 局所ポイント数 | npts | 
 入力 int  | 
  | 
これは、手法の変数が0 (max)の場合のみ利用できます。局所的な領域でのポイント数を指定します。これは局所最大法でピークを検索するのみ使用します。 | 
| サイズオプション | option | 
 入力 int  | 
  | 
 これは、手法の変数が1 (win)の場合のみ利用できます。これは、高さと幅の変数(下記)がどのように解釈するかを指定します。
 オプションリスト: 
 
 
 
  | 
| 高さ | height | 
 入力 double  | 
  | 
これは、手法の変数が1 (win)の場合のみ利用できます。これは矩形の高さを指定します。これはピークを検索するのに使用されます。 | 
| 幅 | width | 
 入力 double  | 
  | 
これは、手法の変数が1 (win)の場合のみ利用できます。これは矩形の幅を指定します。これはピークを検索するのに使用されます。 | 
| ピークのフィルタリング | filter | 
 入力 int  | 
  | 
 見つけるピークの数またはピークの高さに制限をつけるかどうかを指定します。
 オプションリスト: 
 
 
 
 
 
 
 
  | 
| 値 | しきい値高さ / ピークの数 / しきい値高さ(%) | 
 入力 double  | 
  | 
この変数は、上の filter 変数と一緒に動作します。見つかったピークの最小高さ、または見つかったピークの最大数、または見つかったピークの高さパーセントを指定します。 | 
| 最大半幅 | hwidth | 
 入力 double  | 
  | 
ピークマーカを探す最大の範囲を指定します。 | 
| ピーク裾の高さ | fheight | 
 入力 double  | 
  | 
ピークマーカを探す高さのしきい値を指定します。 | 
| ピーク中央のインデックス | ocenter | 
 出力 ベクター  | 
  | 
デフォルトでピーク中心のインデックスを出力します。ピーク中心のインデックスを出力する場所を指定します。 | 
| 左マーカのインデックス | oleft | 
 出力 ベクター  | 
  | 
左ピークマーカのインデックスを出力するかどうかを指定します。 | 
| 右マーカのインデックス | oright | 
 出力 ベクター  | 
  | 
右ピークマーカのインデックスを出力するかどうかを指定します。 | 
| ピークの中心のX値 | ocenter_x | 
 出力 ベクター  | 
  | 
ピークの中心のX値を出力するかどうかを指定します。 | 
| ピークの中心のY値 | ocenter_y | 
 出力 ベクター  | 
  | 
ピークの中心のY値を出力するかどうかを指定します。 | 
| 左マーカーのX値 | oleft_x | 
 出力 ベクター  | 
  | 
左マーカーのX値を出力するかどうかを指定します。 | 
| 左マーカーのY値 | oleft_y | 
 出力 ベクター  | 
  | 
左マーカーのY値を出力するかどうかを指定します。 | 
| 右マーカーのX値 | oright_x | 
 出力 ベクター  | 
  | 
右マーカーのX値を出力するかどうかを指定します。 | 
| 右マーカーのY値 | oright_y | 
 出力 ベクター  | 
  | 
右マーカーのY値を出力するかどうかを指定します。 | 
このXファンクションは、さまざまな方法でピーク(ピークの中心とピークマーカ)を見つけ、ピーク中心のインデックスを出力するのに使用できます。
/* このサンプルでは、スペクトルデータのピークを決定する方法を示します。 \Samples\Spectroscopy フォルダのサンプルデータを使用します。 1.Originのブックにサンプルデータをインポート 2.Xファンクションpkfindでピークを検索 3.元のデータと見つかったピークをプロット */ //7つのピークがあるスペクトルデータをインポート string fname$=system.path.program$ + "Samples\Spectroscopy\HiddenPeaks.dat"; newbook sheet:=0; newsheet cols:=5 labels:="Time|Spectrum Data|Peak Center Indices|Peak Center X|Peak Center Y"; impASC; string bkn$=%H; //ピーク中心を検索 pkFind iy:=col(2) method:=second ocenter:=col(3) oleft:=<none> oright:=<none> ; //ピーク中心をインデックスで検索 col(4)=col(1)[col(3)]; //X位置 col(5)=col(2)[col(3)]; //Y位置 //黒線でスペクトルデータをプロット plotxy iy:=col(2) plot:=200; //ピーク中心を赤の散布図でプロット plotxy iy:=[bkn$]1!(4,5) plot:=201 legend:=1 color:=2 ogl:=1!;
このXファンクションは、5つの手法でピークを探します。普通のピークは、局所最大、ウィンドウサーチ、1次微分の手法で簡単に見つけることができます。データに隠れたピークが含まれる場合、別の手法、2次微分や1次微分後の残差を使います。

ピーク検出は、極値(極大値や極小値)に基づいて行われます。手順は以下の通りです。
このXファンクションは、移動矩形を使ってピークを検出します。この矩形はX軸に平行な2つの辺とY軸に平行な別の2つの辺を持ちます。次の4つのステップを実行し、正のピークが存在するかどうかを見つけます。
1. 矩形の左下のx座標をx1、右下のx座標をx2とします。入力曲線上にx値がx1であるようなポイントP1 (x1, y1) を見つけ、 また、入力曲線上にx値がx2であるような別のポイント P2 (x2, y2) を見つけます。
2. y1 と y2 を比較して、2つのyのうちより大きい方を y'として取ります。

3. P1とP2の間の曲線の最大値yである曲線の局所最大値(yLocalMax)が見つかります。そして、局所最大値と y' の差を以下のように計算します。

4. Diffを矩形の高さと比較します。
の場合、局所最大値のポイントが正のピークだと見なされ、それ以外の場合、この矩形の中に正のピークは検出されません。

負のピークを見つける手順も同様です。
1. 矩形の左下のx座標をx1、右下のx座標をx2とします。入力曲線上にx値がx1であるようなポイントQ1 (x1, y1) を見つけ、 また、入力曲線上にx値がx2であるような別のポイント Q2 (x2, y2) を見つけます。
2. y1 と y2 を比較して、2つのyのうちより小さい方を y'として取ります。

3. Q1とQ2の間の曲線の最小値yである曲線の局所最小値(yLocalMin)が見つかります。そして、局所最小値と y' の差を以下のように計算します。

4. Diff"を矩形の高さと比較します。
の場合、局所最小値のポイントが負のピークだと見なされ、それ以外の場合、この矩形の中に負のピークは検出されません。
これらのステップが終了したら、矩形が1ポイント右に動き、矩形がデータ範囲外に出るまで、これらのステップを繰り返し実行します。
基本的な考え方は以下の通りです。1) 正のピークの中心が 
 にあるとき、
 での一階微分は正になりますが、 
での一階微分は負になります。2) 負のピークの中心が 
にあるとき、 -1 での一階微分は負になりますが、 +1 での一階微分は正になります。
データの滑らかな2階微分は、元データの極値を検出でき、これは通常のピークと隠れピークの両方のピーク位置に対応します。

図ではスペクトルデータは2つの局所最大ピークと1つの隠れたピークで構成されています。その2階微分曲線が下側に表示され、極小値により、この中に隠れたピークがあることがわかります。
基本的な考え方は以下の通りです。
1.一階微分法を使ってピークを検出し、個々にピークをフィットします。 そして、各ピークのフィット曲線を累積します。
2.スペクトルデータと累積フィットデータ間の残差を計算します。
3.それぞれ対応するデータポイントの残差は隠れたピークとして考えられるしきい値より大きくなります。
以下は、隠れたピークを見つける一階微分法の例です。このスペクトルデータには2つの正のピークと1つの隠れたピークがあります。2つの正のピークのフィット曲線の累積データがスペクトルデータから減算されると、隠れたピークが残差プロット内にはっきりと現れます。

blauto, fitpeaks, pa, PaMultiY, NLfitpeaks
キーワードスペクトル、二次微分、局所最大、ウィンドウ、しきい値