savitzky-golayのフィルタによる波形データのノイズ除去

このQ&Aのポイント
  • savitzky-golayのフィルタを使用することで、1500個の数値からなる波形データのノイズを除去する方法を調べました。
  • 現在の設定では、データポイント数を前:50・後:50、次数4として実行していますが、これらの数字には根拠はありません。
  • ノイズ除去におけるデータポイント数や次数の指定方法や決まりについて、質問したいと思います。
回答を見る
  • ベストアンサー

savitzky-golayのフィルタについて

1500個の数値からなる、ある測定結果があります。 この測定結果はおよそ100個で1周期を取るような波形データですが、ところどころ高い値を示すノイズが見られます。 この測定結果からノイズを除去してきれいな波形を得るためにフィルタをかけようと思い、いろいろ調べたところsavitzky-golayという方法を見つけ、それを実現するプログラムも見つけました。 このプログラムは計算に使用する前後のデータポイント数と、多項式の次数を設定しなければなりません。現在、データポイント数を前:50・後:50、次数4として実行してみたところ、意図していたような近似グラフが得られました。 しかし、この二つの数字に根拠は無いというのが現状です。 そこで質問なのですが、この二つの項目を指定するに当たり、何か決まりや指標といったものはあるのでしょうか? ちなみに、測定結果は全て正の数値で、必要なのはピーク値のみです。 宜しくお願いしいます。

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

  • ベストアンサー
noname#221368
noname#221368
回答No.1

 savitzky-golayは、移動多項式回帰(最小2乗近似)ですよね。そこで似た例として、移動しない多項式補間の例で考えてみます。   (1)次数が低い補間では、十分滑らかな補間にならない。例えば折れ線補間。   (2)高い次数では、いくらでも滑らかな補間ができるが、過適合の危険がある。     http://ja.wikipedia.org/wiki/%E9%81%8E%E5%89%B0%E9%81%A9%E5%90%88 の最初の図。  それで(1)と(2)のバランスをとるために、補間曲線の曲率絶対値の平均最小化という考えがあります。式で書けば、補間曲線をw(x),補間区間をLとして、   I=∫(d^2w/dx^2)^2 dx (Lで積分)の最小化. です。Iの変分を取ると、wは3次関数という結果になります。根拠は、ベイズー赤池の情報量最小基準にあるようです。     http://ja.wikipedia.org/wiki/%E8%B5%A4%E6%B1%A0%E6%83%85%E5%A0%B1%E9%87%8F%E8%A6%8F%E6%BA%96  今の場合、補間ではなく回帰なので、3次と4次の違いは、あまりない気がします。もう一つは補間であっても、3次と4次では最低サンプル点数の違いは一個なので、4次補間は、3次のスプライン補間と概ね同等ではないかと、個人的には思っています。  次に周期データの補間(回帰でも同じ)の場合、最低サンプル点数5の4次関数を使用したいです。理由は、どんな周期データも規格化して考えれば、sinのような波形であり、腹と節の5点でおさえられると思うからです。この場合周期データという条件があるので、4次は過適合ではないと考えています。重要なのは、この5点が一周期を覆っている事です。  そう考えると、100個で1周期なので、前後50個に4次多項式の回帰を行うのは、妥当と思えます。特に移動回帰でもあるので、1周期分をづらして計算すると、計算結果が連続化されて、結果が安定する気もします。

mixnex
質問者

お礼

早速のご回答有難うございます。 さらに細かい説明やリンクなどもつけていただきありがたい限りです。 正直なところ、前半の解説の内容はまだイマイチな理解度なのですが、この数値が妥当と思えるとのことで安心しました。せっかくここまで説明していただいたので、工学部出身者として引き続き調べてddtddtddtさんの解説の理解に努めていきます。 取り急ぎ、お礼までにと思いまして。 本当にありがとうございます。

関連するQ&A

  • DFTによるフィルターで悩んでます。

    実験で採取した電圧データーに電源ノイズが入ってしまい、DFTフィルターの プログラム(FORTRAN)を作りました。ノイズは(7Hz)ピークがはっきりしていているので、DFT結果の該当部分を強制的に DFT=Oのようにして、逆DFTを行いました。ノイズはうまく分離できたと思えます。  ここで波形だけでなく、電圧全体の平均値も、重要なデーターになるため、平均をとると、全体=0となってしまします。  フーリエの積分自体が、全体=0のよう考え方なのは、なんとなく知っていましたが、どうにか平均値を出す方法があれば是非教えてください。 (無理な場合は、もとのデータを平均してしまおうと思います。) 苦心してプログラムも作ったためどうにかなれば、非常に助かります。

  • 数値解析に関すること

    こんにちは 数値解析に関する質問です。 多項式の近似において、 多項式の次数を大きくするにつれ、 残差も大きくなり、なぜ解析精度が低くなるのか よくわかりません。(直感的にわかりません) どなたか、わかりやすく教えて頂けないでしょうか? お願いします。

  • デジタルフィルタの設計

    はじめてデジタルフィルタの設計をすることになりました。 決まっている事項は以下のようになります。 ・25msごと(40Hz)にA/D変換されたデータが出力されます。 ・出力データを使って波形を描きます。 ・描く波形はおよそ周波数は0~10Hzのものです。 ・係数を算出して、C言語のプログラムに組み込みます。 今のところ決まっているのはこのくらいです。 自分でも勉強していますが、 FIRは計算が比較的簡単で、安定しているが、次数が多くなる。 IIRは複雑で、不安定になることもあるが、次数が少なくてよい。 FIRでは、窓関数やREMEZ法などリプルを小さくする方法がある。 IIRでは、バタワース、チェビシェフ、ベッセルなどの方法がある。 程度のことしかわかっていません。 どのように設計していけばいいかわかりません。 経験のある方、良いアドバイスをお願いします。 また何かフリーツールで設計できるものがあれば教えてください。

  • 低周波数域シフト

    エンジンのトルク計測を行った際、良い波形と不良の波形が現れました。 そこで、振動測定を行ったところ、FFT分析結果から 主に良い波形では220Hzのピークが現れ、不良の波形では20Hzの卓越したピークが現れました。 この低周波数のピークシフトは何を意味しているでしょうか? 宜しくお願い致します。

  • Excelのグラフの近似値について

    グラフの近似値を出して手計算した結果が全然違う答えとなってしまいました。 近似値をだす際に次数を6で求めたからなのでしょうか? 次数3で近似値を出して手計算した結果はどことなく近い値が出ました。 求めた数値は 横軸に時間をとり縦軸に量でやりました 上り平坦上り平坦の形のグラフでした。

  • FIRフィルタの遅延量補正とIIRフィルタの安定性について教えて頂きた

    FIRフィルタの遅延量補正とIIRフィルタの安定性について教えて頂きたいのですが。  双一次z変換を用いていくつかのIIRフィルタを作る事が出来ました。Scilbが持つIIR関数と比較して同じ結果になっています。IIRフィルタがフィルタ係数によっては不安定=発信したりする、というのはScilab等の結果と同じになる→フィルタ係数も同じ→不安定にならない。と思ってよいのでしょうか?。例えばですが、あるサンプリング周波数の波形データをフィルタする為に、同じサンプリング周波数で作ったImplus波形をIIRフィルタに放り込んで周波数応答を確認したら、実際にフィルタする波形データの最初から最後までその周波数応答でフィルタされると私は理解しているのですが。  私のフィルタを使う用途の場合は、フィルタの計算速度は特に制限は無く、速いに越した事はありませんが得られた結果が正確な事が大切なので、安定性や係数誤差の事を考えるとIIRフィルタではなくFIRフィルタでも構わないのですが、FIRフィルタの場合だとタップ数が多くなるので波形の遅延量が無視出来ません。フィルタを通した波形は次定数fastのレベル波形にして100Hz位で出すとは言え、IIRよりは数秒かコンマ数秒遅延した結果になると思います。そのような場合、遅延量を補正するとしたらどうしたら良いのでしょうか?。個人的にはタップ数が(IIRの場合は次数が)遅延量と思っているのですが。  宜しくお願い致します。

  • 近似曲線と近似式の結果のちがい

    X軸1200、900、600、300 Y軸900、600、480、300 これを散布図でグラフ化して、多項式(3次)で近似曲線を表示すると ちゃんと4点を通過する曲線が表示されます。 ところが、この近似曲線の近似式を表示させて、その式にXの値を入力すると、 グラフとまるでかけ離れた数値になります。 データ数が少なすぎるためでしょうか。

  • バンドパスIIRフィルタの低域におけるエラー

    バンドパスIIRフィルタの低域におけるエラー 申し訳ないのですが教えて下さい。  波形データのオクターブバンド分析結果を出す為に、ScilabやOctaveなどMatlabクローンのソフトを使ってバンドパスIIRフィルタを使用して各バンドでフィルタを通過させるのですが、ナイキスト周波数に対して通過域が低域にありすぎるとエラーを起こすのか、結果が出てきません。サンプリング周波数の値を変えて遮断周波数との差を縮めればそのようなエラーは起きません。例えば、480Hzサンプリングでも、1Hzと2Hzの中心周波数のバンドパスフィルタは値が帰っていなかったり、波形がおかしかったりします。  フィルタ次数は4で行っていて、1などに下げればそのナイキスト周波数と遮断帯域の差ではエラーを起こさなくなりますが、もっと差が広がった場所では起きますし、JISで定めるオクターブフィルターの遮断性能を考えると次数を下げる訳にも行きません。  本家Matlabはもっていないので判りませんが、会社のLabviewですと問題はありません。解決策はデサンプリングしてエラーを起こす帯域ではサンプリング周波数を落とすしか無いのかな?と思うのですが、実際はどうなのでしょうか?お教え頂けると幸いです。 宜しくお願い致します。

  • 完全楕円積分のHastings公式

    完全楕円積分の数値計算プログラムを作成しています. 完全楕円積分を(多項式+対数×多項式)の形に近似するHastings公式というものがあるそうなのですが,その多項式の係数の値の表を探しております. 多項式は4次式以上で可能なら有効数字が15桁ほどある数表がいいのですが参考になる文献やWEBページなどがあれば教えていただけないでしょうか.

  • フーリエ変換後の解析について

    フーリエ変換後の解析について ある振動の波形を測定していたとします。 No.1 最初は特に何も振動を加えず、ありのままを測定したとします。 No.2 そして次に周期的に弱い振動を与えたとします。 1と2の結果得られた振動波形を見比べた結果、ほとんど違いは見られなかった場合 FFT解析を行う意味はあるのでしょうか? 波形にほとんど違いがなかったということは本当に微妙な振動が加わっただけということですよね? そんな微妙な違いしかない結果をFFTしたところでほとんどスペクトルにも差がでないと思うのですが・・・。 それともたとえ微妙であっても周期的に加えてる以上どこかしらにピークがでてくるものなのでしょうか?