NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

Peak Detector のアルゴリズムについて

LabVIEW6にて、PeakDetecterでピーク位置を推定する機能を使っております。
 
ヘルプには「2次多項式を連続したデータ点のグループに近似させるアルゴリズム・・・」とありますが
いまいちピンときません。
 
配列の最初から逐次、PD幅分で2次曲線近似をしていき、与えられた沢山の2次曲線の中で、頂点の値が最大
となるものを求めているということでしょうか?
 
お手数ではありますが、回答よろしくお願いします。
 
0 Kudos
Message 1 of 6
(7,287 Views)

日本ナショナルインスツルメンツの塚崎です。

いつもお世話になっております。

 

Peak Detectorに関してのご質問についての回答です。

まず、配列の中にある連続した点を抽出します。

これは配列の最初から始めます。

例えば10点の点を抽出すると仮定します。

その10点の点を通る曲線に最も近い二次関数を計算し、その二次関数を微分します。

もしピークがなければ、

微分した式=0

の関係は成り立ちません。

ピークがあるときは必ず微分式=0となる解を持ちます。

その次は配列をひとつずらした10点を抽出し、また同じ作業を行います。

 

配列では整数xに対してのyの値を取りますが、ピークは小数部分まで計算されます。

配列をずらした後にもピークが確認される時は、その前までの計算結果によりさらに詳しい二次関数を作ることができ、結果の値もより詳しいものとなります。

 

データはノイズの乗っかったものになっているため、上の計算はノイズをスムーズ化してからなされます。

二次関数による近似値での算出とノイズにより、ピークの検出は必ずしも正しいものではありませんのでご了承ください。

0 Kudos
Message 2 of 6
(7,255 Views)

塚崎 様

丁寧な解説有難うございました。

とても参考になりました。

 

 

0 Kudos
Message 3 of 6
(7,240 Views)

お世話になっております。

 

実際に教えて頂いたように、配列の初めから指定した幅分だけ2次曲線に近似し、その幅内に 微分=0 となる

x がある場合、そのときの x を記録していくプログラムを作ってみました。

ただ、それだけでは、たくさんピークが発見されてしまいます。

 

「配列をずらした後にもピークが確認される時は、その前までの計算結果によりさらに詳しい二次関数を・・・」という

処理をもう少し具体的に教えていただけないでしょうか?

 

お手数ですが、回答よろしくお願いいたします。

 

 

 

0 Kudos
Message 4 of 6
(7,211 Views)
Highlighted
Cripon様

いつもお世話になっております。
日本ナショナルインスツルメンツ技術部の木村と申します。
塚崎に代わりましてご返答させていただきます。

検出されるピークが想定より多く表示されることについてご説明いたします。

2次曲線を計算するために指定された幅のデータを一つずつずらしていきますと
ある時点で実際のピークがその幅に入ります。その瞬間からさらにずらすたびに
新たな2次曲線でピークが検出されます。
よって、理論的にはピーク数は指定された幅と同じ数だけ検出されます。

検出されたいくつものピークの中から一番適したものを選ぶ方法は以下のように
いくつかあると思います。検出されたピーク候補の中で:
 1. Y値が一番大きいものを選ぶ。
 2. ピークが、指定された幅の中心にある場合のX値を選ぶ。
 3. 計算されたf'(x[i])*f'(x[i+d])の絶対値が一番大きなピークを選ぶ。
これらのいずれでもPeakDetect.viが出す結果に十分近い物が選べると思います。

PeakDetect.viとまったく同じ動作をするプログラムを作成するのは
アルゴリズムが複雑であるため難しくなってまいります。
数学的にピークを検出する一番簡単な方法はデータの中で1階微分値が0であり
2階微分値がマイナスであるデータ点がピークと判断できますので
この方法をご利用いただくことをお勧めします。

以上の内容を参考にしていただき、お試しいただければと思います。
よろしくお願いいたします。

日本ナショナルインスツルメンツ技術部
木村
Message 5 of 6
(7,171 Views)

木村 様

丁寧な解説有難うございました。

参考になりました。

 

0 Kudos
Message 6 of 6
(7,147 Views)