• ベストアンサー

ピークの検出方法

ある離散時系列データf(x)があったとき、単純に考えれば f'(x)=f(x+1)-f(x)<0.0001,f''(x)=f'(x+1)-f'(x)<0 となるxを求めればピークのxが検出できると思いますが、 f(x)が滑らかでない場合はどんな方法でピークが検出できますでしょうか?

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

  • ベストアンサー
noname#101087
noname#101087
回答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)が正から負へ極性反転したピークの高さに閾値を設定しておく。(つまり、細かなピークは無視する) ピーク検出には、適用分野に応じたノウハウが多数あるようです。

Rossana
質問者

お礼

回答ありがとうございます。私の質問内容に誤りがありましたので訂正させて頂きます。正しくは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)を一番最初に極性反転した位置の何%かに設定しておいて、あとはこの設定値を使うみたいな感じにすればできそうですね。

Rossana
質問者

補足

(1)f'(x)が正から負へ極性反転したらピーク←これはabs(f'(x))<0.0001の条件を使わずにf''(x)<0だけを使うという条件と等価でしょうか? お礼の内容訂正させて頂きます。よく考えてみると等価のはずがありません。傾きの変化が小さくなっただけでもf''(x)<0ですから。 「f'(x+1) < 0 AND f'(x) > 0」の条件になったときのxをピークとみなすということですね!

その他の回答 (2)

  • inara
  • ベストアンサー率72% (293/404)
回答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

Rossana
質問者

お礼

回答ありがとうございます。 >はい。Excelでちょっと実験してみましたが、普通の数値微分ではむちゃくちゃになるノイズ重畳データでも、割ときれいな微分データが得ら >れました。これはSavitsky-Golay filterあるいはSavitsky-Golay smoothingと呼ばれるものです。 こちらでも試してみましたが、実際にきれいな微分データが得られました。一方、N点の近似微分公式では、局所的な微分データが出ているようで、元データを大局的に見たときの綺麗な微分データは得られないようでした。Savitsky-Golayのアルゴリズムがかなり有効であることが分かりました。

  • inara
  • ベストアンサー率72% (293/404)
回答No.1

平滑化数値微分というのがあります[1]。これでもノイズが取れないときは、この数値微分の前に、生データの移動平均処理を行って、ある程度データを滑らかにしてやればいいでしょう。そのとき、移動平均のデータ数を変えて最適な値を探すのが良い思います。 [1] PDFファイルの52ページ http://teils.eng.shizuoka.ac.jp/di2.pdf

Rossana
質問者

お礼

回答ありがとうございます。平滑化数値微分のページを拝見させて頂きました。これをそのまま使えばノイズが取れるのでしょうか?係数やhという値がありますが、どういう原理でこの値が出てきたのでしょうか?一つ思ったのが、この方法はノイズの周波数を自在にこちらで決めて係数を設定したりできるのでしょうか?

関連するQ&A

  • F-Secure はどうして検出率がいい?

    F-Secure はどうして検出率がいい? トップの検出率データが書かれていました。道具解です。 http://www4.pf-x.net/~zot/vir/detect050802.html 勝手にウイルステストでも高検出率でした。 どうして検出率がいいのでしょうか? あまり聞いたことも会社なので F-Secureのエンジンがいいやつを使っているのでしょうか?

  • HPLCの溶媒ピーク

    HPLCの溶媒ピークについて質問です。現在、あるサンプルをUV検出器を利用してHPLC分析おこなってます。移動層はアセトニトリルと水&0.1%リン酸のグラジエントです。サンプルはメタノールに溶解して10μLでインジェクトしてます。標準曲線のR2も0.95以上の値がでてます。 何が疑問なのかというと、メタノールのみでインジェクトした時(気になってやってみました。)、メタノール溶媒のピークが標準サンプルのピークとまったく同じ場所に同じようにでてしまうのです。ピークAreaは標準サンプルの0.01mg/mlと同じくらいの値です。これはどうしてでしょうか?シリンジをよく洗浄しても同じようにサンプルとほぼ同じ場所にピークが検出されます。原因がよくわかりません。 ご教授お願い致します。

  • ダブったデータを検出する方法があれば教えてください。

    ダブったデータを検出する方法があれば教えてください。 新しいiMac10.6.4に、元々あったデータを諸々入れ直してふと気づくと、ダブって入れてしまってるものが多々ありました。(音楽データや映像データ)これを一気に検索してダブったものだけ削除したいのです。知ってる方いらっしゃいましたらお願いします。

    • 締切済み
    • Mac
  • 科学英語の表現について(~をピークにして)

    科学英語の表現について教えてください。ウエスタンブロットの結果で10時間をピークにしてAというタンパク質が検出された場合の表現は「A was detected at the peak of 10 hours.」でいいのでしょうか?よろしくお願いします。

  • matlabでのRRI検出

    今研究で、睡眠時のストレスを検出するために、測定から得られた心拍データからRRIを読み取ることを考えています。 http://www.mental-plus.jp/heartcoherence.html このサイトにある、脈と脈の間隔がRRIとなっています。 自分の実験ではサンプリング間隔1msごとにデータを採取しています。 R-2000という機械を用いて、1msごとの心拍を電圧であらわしたものを エクセルに書き込んでいて、そのエクセルをマトラボで取り込んで マトラボで心拍のグラフの表示までは出来ています。 ここからRRIの検出を行いたいのですが、心拍の1つ1つの波形の山のピークを検出するにはどうすればよいのでしょうか?

  • エチレンオキサイドの直ぐ後に出るピークは?(HS-cGC)

    ヘッドスペースキャピラリーガスクロ(検出器はFID;水素炎イオン化型検出器)にてエチレンオキサイド(酸化エチレン)の定量を行っていますが、このピークの直ぐ後(0.5分以内)にピークを検出した検体があり、このピークが何かが問題になっています。 仮説としてエチレンオキサイドが環化二量化して生成されたジオキサンが分解してジメチルエーテルが生成され、これがエチレンオキサイドの直ぐ後に検出されるのではと考えました。 この仮説がありえるものなのか、また、この物質の特定方法(ガスマス等)はあるか教えて下さい。

  • SMART機能でエラーが検出されました

    起動時に「Smart機能でエラーが検出されました」といった警告文が出て、 バックアップをとりたいと思っているのですが、どのようにバックアップを取ればいいのでしょうか? まだF1を押して続行はしてはいないのですが、復旧等はせず買い換えようかと思っています DVDに一枚ずつ焼いていくか、新たに外付けHDDを買ってそちらにデータをバックアップさせるといった方法は分かるのですが、やり方がわかりません また、何かいいソフトでもありましたらそちらもご紹介お願いします では解答お願いします

  • 周期的に変化するデータの解析

    卒業論文であるデータが取れたのですが統計的な分析をするにあたり困っています 解析方法に関していい方法があれば教えてください ある実験をして2つのデータが取れました.それぞれ f_1(x) = sin x + 0.1 f_2(x) = sin x + 0.2 に誤差を加えたような離散値のデータです(5周期分,200点弱) この0.1と0.2の差が大事なので,統計的にしっかりした方法で示したいです 平均をとれば0.1と0.2ほどになるのですが,どのように誤差を評価したらいいでしょうか もともと一定になればいいものでもないのでそのまま標準誤差を使うのも間違っている気がします よろしくお願いします

  • 水素と二酸化炭素の検出について

    ガスクロ初心者で申し訳ありません。 水素と二酸化炭素を同時に検出できる方法はありますか? 検出器はTCDを使用しています。 キャリアをヘリウムにすると水素が検出できず、アルゴンにすると二酸化炭素が検出できません(微弱はピークは出ますが…)。 教えていただけると幸いです。

  • 水流の強さの検出方法について

    口径φ1~2mm程度のノズルから出る水をプラスチック板に当てる構成で、どの程度の強さ(流量や流速)で板に当たり、またどの程度板に均一に当たっているかを検出したいと考えています。ノズルを押す力は人力程度で、ちょうどおもちゃの水鉄砲程度の水流です。 例えば、ある程度以上の水流が当たると剥げる塗料のようなものをイメージしています。 気体の場合では、感圧塗料なるものがあるようです。 http://ja.wikipedia.org/wiki/%E6%84%9F%E5%9C%A7%E5%A1%97%E6%96%99 このような場合に対応した検出方法などご存じの方、アイデアやヒントをいただけませんでしょうか? よろしくお願いいたします。