-PR-

解決済みの質問

質問No.2972987
すぐに回答を!
すぐに回答を!
お気に入り投稿に追加する (0人が追加しました)
回答数3
閲覧数2855
ピークの検出方法
ある離散時系列データf(x)があったとき、単純に考えれば
f'(x)=f(x+1)-f(x)<0.0001,f''(x)=f'(x+1)-f'(x)<0
となるxを求めればピークのxが検出できると思いますが、
f(x)が滑らかでない場合はどんな方法でピークが検出できますでしょうか?
投稿日時 - 2007-05-04 19:13:21

質問者が選んだベストアンサー

回答No.2
>f'(x)=f(x+1)-f(x)<0.0001, f''(x)=f'(x+1)-f'(x)<0 ....

基本はこれでOKなので、「f(x)が滑らかでない場合」に引っかかりそうなケースを考えてみましょう。

[誤検出しそうな例]
(1) サンプリングしたデータでは、ピークでの増分が 0.0001 未満とは限らない。(つまり、とんがり気味のピークは検出できない)
(2) 真のピークではなく、裾野の細かいうねりまで検出するおそれがある。

[対策例]
(1) 単純に、f'(x)が正から負へ極性反転したらピークとみなす。
(2) #1 さんの「平滑化」処理を適用する。
(2)' あるいは、f'(x)が正から負へ極性反転したピークの高さに閾値を設定しておく。(つまり、細かなピークは無視する)

ピーク検出には、適用分野に応じたノウハウが多数あるようです。
投稿日時 - 2007-05-04 22:51:08
この回答を支持する
(現在0人が支持しています)
補足
(1)f'(x)が正から負へ極性反転したらピーク←これはabs(f'(x))<0.0001の条件を使わずにf''(x)<0だけを使うという条件と等価でしょうか?
お礼の内容訂正させて頂きます。よく考えてみると等価のはずがありません。傾きの変化が小さくなっただけでもf''(x)<0ですから。
「f'(x+1) < 0 AND f'(x) > 0」の条件になったときのxをピークとみなすということですね!
投稿日時 - 2007-05-05 16:34:45
お礼
回答ありがとうございます。私の質問内容に誤りがありましたので訂正させて頂きます。正しくはabs(f'(x))=abs(f(x+1)-f(x))<0.0001です。
(1)f'(x)が正から負へ極性反転したらピーク←これはabs(f'(x))<0.0001の条件を使わずにf''(x)<0だけを使うという条件と等価でしょうか?
(2)'閾値をピークの高さに設定しておく←これは有効そうですね。データの性質を観測して、f(x)を一番最初に極性反転した位置の何%かに設定しておいて、あとはこの設定値を使うみたいな感じにすればできそうですね。
投稿日時 - 2007-05-05 16:17:46
この質問は役に立ちましたか?
4人が「このQ&Aが役に立った」と投票しています

ベストアンサー以外の回答 (2)

回答No.3
私が学生時代のとき(ずいぶん前)、分光スペクトルの1階微分(オージェスペクトル)や2階微分スペクトル(ピークが強調される)を取るためにこの手法を使いました。カーブフィッティングするにはピーク位置を知る必要があるのでこの方法が有用です(最近は測定装置にソフトが組み込まれているので実際に計算することはないでしょうが)。これは微分係数を求めるものなので、ピーク位置の検出では、微分値=0となる x を求めるアルゴリズムが別途必要です。

>これをそのまま使えばノイズが取れるのでしょうか?

はい。Excelでちょっと実験してみましたが、普通の数値微分ではむちゃくちゃになるノイズ重畳データでも、割ときれいな微分データが得られました。これは Savitsky-Golay filter あるいは Savitsky-Golay smoothing と呼ばれるものです。

>係数やhという値がありますが、どういう原理でこの値が出てきたのでしょうか?

h は x の刻み (x[i+1]-x[i])ですが、詳しくは参考資料 [1],[2] を見てください(私はちゃんと理解していませんので)。
データ点 x[i] を何点とるかで、いろいろなパターンがあります。[3] は微分でなく、平滑化の係数です。微分処理前や微分後に使うと、ノイズが取れると思います。

>一つ思ったのが、この方法はノイズの周波数を自在にこちらで決めて係数を設定したりできるのでしょうか?
周波数ドメインの処理はデジタルフィルターを使うのがいいのではないでしょうか。

[1] Savitzky-Golay アルゴリズム http://www.hulinks.co.jp/support/flexpro/v7/dataanalysis_SavitzkyGolay.html
[2] 1階微分の5点以降の係数の求め方(ANo.1の回答) http://okwave.jp/qa1371554.html
[3] 平滑化の係数表(PDF 79ページ:5~25点) http://www.biochem.northwestern.edu/Keck/PDF%20documents/CD/Spectra%20Manager%20Software.pdf
投稿日時 - 2007-05-06 17:17:27
この回答を支持する
(現在0人が支持しています)
お礼
回答ありがとうございます。
>はい。Excelでちょっと実験してみましたが、普通の数値微分ではむちゃくちゃになるノイズ重畳データでも、割ときれいな微分データが得ら
>れました。これはSavitsky-Golay filterあるいはSavitsky-Golay smoothingと呼ばれるものです。
こちらでも試してみましたが、実際にきれいな微分データが得られました。一方、N点の近似微分公式では、局所的な微分データが出ているようで、元データを大局的に見たときの綺麗な微分データは得られないようでした。Savitsky-Golayのアルゴリズムがかなり有効であることが分かりました。
投稿日時 - 2007-05-15 22:52:09
回答No.1
平滑化数値微分というのがあります[1]。これでもノイズが取れないときは、この数値微分の前に、生データの移動平均処理を行って、ある程度データを滑らかにしてやればいいでしょう。そのとき、移動平均のデータ数を変えて最適な値を探すのが良い思います。

[1] PDFファイルの52ページ http://teils.eng.shizuoka.ac.jp/di2.pdf
投稿日時 - 2007-05-04 21:37:03
この回答を支持する
(現在0人が支持しています)
お礼
回答ありがとうございます。平滑化数値微分のページを拝見させて頂きました。これをそのまま使えばノイズが取れるのでしょうか?係数やhという値がありますが、どういう原理でこの値が出てきたのでしょうか?一つ思ったのが、この方法はノイズの周波数を自在にこちらで決めて係数を設定したりできるのでしょうか?
投稿日時 - 2007-05-05 16:24:22
別のキーワードで再検索する
もっと聞いてみる

関連するQ&A

回答募集中

  • aunswer

    統計学2つの確率変数XとYの関係をY=3X+2とする。Xが自由度8のt分布に従うとき(すなわち、X~...

  • aunswer

    確率・統計学の問題ですサイコロを720回投げて、1の目の出る回数をXとする。118≦X≦125となる確率を求めなさい...

  • aunswer

    代数の問題この式はどうやって計算すればいいですか。 どこから手を付ければいいかさえわかりません。。。 ど...

この他の関連するQ&Aをキーワードで探す

-PR-

OKWaveのおすすめ情報

特集

同じカテゴリの人気Q&Aランキング

カテゴリ
数学

回答のついた最新のQ&A

カテゴリ
数学

rss

oohasi0084

spring135

ryoppunn

info22_

A_icon(f*f)(t)=∫[-∞,∞] f(x)f(t-x)d...2013-08-02 16:33:20

-PR-

ピックアップ

おすすめリンク

ノウハウ共有サイト

-PR-
-PR-