• ベストアンサー

Excelで、Savitzky Golay- データのノイズ除去 - を行うには?

データのノイズが大きく微分を取ることが難しいケースで、 エクセルを使ってスムージングを行う方法を探しています。 Savitzky-Golay の方法をやるには、計算に必要な係数などは どうやって決めたらいいのでしょうか。 数学カテゴリーにも本質的に同じ質問をしたのですが、 回答がなく、重複してしまいすみません。

  • Yui-s
  • お礼率90% (45/50)

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

  • ベストアンサー
  • SNAPPER
  • ベストアンサー率44% (151/337)
回答No.2

ふむ、平滑筋のCa2+測光かなんかですかね? いろいろ調べてみたんですがExcelだけでやろうとするにはプログラムの知識がいるような・・・。残念ながら私にはわかりません。 一つ確認しておきたいのですが、データ取り込みソフトにSavitzky-Golay filterがついているのなら、filterをかけた状態で出力したデータをエクセルで扱うことはできなかったんでしょうか、あるいはそのソフトをoff-lineで使ってこれからフィルターすることは出来ないんでしょうか?(MacLabか何かですか?)でなければMATLAB(http://www.mathworks.com/access/helpdesk/jhelp/toolbox/signal/signal.shtml)、Origin(http://www.originlab.jp/www/products/origin/features/analysis/analysis1.asp これはWindowsのみ)なんかの有料ソフトを買わないと厳しいかも。 一つ可能性があるのはKaleidaGraph(http://www.hulinks.co.jp/software/kaleida/section02.html)の回帰曲線の作成の中に「スムース」というのがありました。このフィルターはSavitzky-GolayかGaussianかあるいはもっと別のものか分かりませんがこれを使ってみては?Excelのデータをコピーして「スムース」をかける。これができた曲線のみでなくもとのプロットデータも表示してくれるならそれをExcelに戻して差分を取る・・・。では駄目でしょうか?

Yui-s
質問者

お礼

SNAPPERさん、迅速なご返答を再度ありがとうございます。 御察しの通り、平滑筋のカルシウム測光です。 データ取り込みはPTIの古い装置で、filter後のデータを出力できない ようです。 ただし、もう一度他のソフトへ移すという点では、 LabViewというソフトの使えるWindows機がありました。 KaleidaGraph も確認してみます。 いずれにせよ、明日は少し希望を持てそうです。 質問はもうしばらく開いたままにさせてもらいます。が、 有用な情報をありがとうございました。

その他の回答 (1)

  • SNAPPER
  • ベストアンサー率44% (151/337)
回答No.1

まず、もともとのデータはどんな種類のものでしょうか?普通はADコンバータに接続するデータ取り込みのコンピュータとソフトが付いていることが多いのですが、これはASCIデータのみで出力され、Excelで読むしか方法がないのですか? ノイズを取ることでなく、微分を計算するのが目的なんですよね?近似したい関数が決まっているのであれば(Exponentialなど)、フィルターをかけなくてもそのまま近似してしまえば結果はほとんど同じはずです(曲線自体をプレゼン用にきれいに見せたいのであれば別ですが)。たとえノイズだけ取っても微分を求めるためにはそのplotを近似(fitting)する関数がいずれ必要になるはずです(それとも別の方法があるのでしょうか?) 近似したい関数が決まっていれば下記のCurve Fittingソフトを使えば出来るのではないでしょうか(たしかMacでしたよね)。KaleidaGraphにもFittingの機能はありませんでしたか?(http://www.hulinks.co.jp/software/kaleida/section02.html 回帰曲線の作成というのがありますが) MacCurveFit(シェアウエア) http://www.macinsearch.com/infomac2/science/mac-curve-fit-13.html ここに無い関数でも自分で式を作ってFit出来るのでSavitzky-Golay も出来るのでは?私は経験が無いですが。 pro Fit ($95) http://www.quansoft.com/ 但し前回同様3万行が収まるかどうか知りませんが。 あとこの手の仕事が続くのであれば専用のソフトを購入されることをお勧めします。何でもExcelでやるのは無理があるような。 AxoGraph ($600) http://www.axon.com/CN_AxoGraph4.html

Yui-s
質問者

補足

SNAPPERさん、まずは応答してくださりありがとうございます。 元のデータは、具体的には、ある小さな生体組織で測定された張力と、luminescenceです。 後者は、2つの波長をphotomultiplier tubeで増幅して測定し、その比(405nm/485nm)を 取っています。張力の方は性質上連続的なのですが、luminescenceの方は、高電圧と比の評価という 2つの要素により、ノイズとバラツキはかなりのものになります。ただし、生データは、 smoothingの必要なく意味を伝えるものですのでこれ自体のプレゼンなどは問題ありません。 データは、15分程度の間に揺らぎのある規則的な収縮・弛緩を繰り返すようなもので、 「近似したい関数」を得るのは難しいと思います。関数なしに微分を行う件ですが、 微分ではなく差分と書くべきだったのかも知れません。 1/30秒毎に取られたデータから、単に差を計算し、1/30秒で割っています。(この方法で、 2次微分まで行いたいと思っています) 適切だと思われる方法として Savitzky Golayを見つけたのですが、その計算方法が分からないという訳です。 ある英語サイトにそれと思われる数字が並んでいたので、デタラメですが係数かも知れないと 思って、試しに40個のデータ(C5 から C45 とします)を用いて "=0.0323313*C5+0.00850822*C6-0.00829007*C7-0.0189799*C8-0.024428*C9 -0.0254516*C10-0.0228183*C11-0.0172464*C12-0.00940445*C13+0.0000884431*C14 +0.0106627*C15+0.0217983*C16+0.0330246*C17+0.0439208*C18+0.0541154*C19 +0.0632863*C20+0.0711613*C21+0.0775174*C22+0.0821813*C23+0.0850292*C24 +0.0859867*C25+0.0850292*C26+0.0821813*C27+0.0775174*C28+0.0711613*C29 +0.0632863*C30+0.0541154*C31+0.0439208*C32+0.0330246*C33+0.0217983*C34 +0.0106627*C35+ 0.0000884431*C36-0.00940445*C37-0.0172464*C38-0.0228183*C39 -0.0254516*C40 -0.024428*C41-0.0189799*C42-0.00829007*C43+0.00850822*C44 +0.0323313*C45" と入力し、コピーしてみました。すると、いちおうsmoothingされているのです。が、これが適切だと しても意味が分からないし、他の係数の取り方とか、全く計算しようがありません。 実は装置をコントロールするソフトにも同じ様なsmoothing (SavitzkyGolay)が付いているのですが 表示して印刷はできますが、書き出しはテキスト形式のみです。 そのため、データは別のパソコンに移してから処理(iMac G3)しています。 という状況です。ソフトの方の紹介も、ありがとうございました。

関連するQ&A

  • データのノイズ除去法 - Savitzky Golay- を表計算したいのですが

    Microsoft Excel に、時系列のデータが入っています。 2次微分までのデータが欲しいのですが、ノイズが多く、 きれいな曲線になりませんでした。 このような事情で、Savitzky Golayの方法(名前は知っていた)で データのスムージングを行おうとしていたところ、あるサイトで、 {0, 0.0323313, 0.00850822, -0.00829007,..., 0.0859867,...,0.0323313} というような数列のようなものを見つけました。 これを係数に41項からなる和算を行ったところ、全く何も根拠のないまま、 一見したところ目的を達しているかのような曲線が得られました。 これ、全くのデタラメでもないのでしょうか? それに、もう少し項目を 減らしたり増やしたりするには、どんな係数を使えばいいのでしょうか。 そもそも、適切な係数を知るにはどこを調べればいいのでしょうか。

  • 数値データへのノイズの混入について

    ちょっとカテゴリがわからないのですがここで質問したいと思います。 あるデータ系列があるとします。 このデータ系にノイズを加えたいのですがどうすればいいのかよくわかりません。 理論計算で求めた数値にノイズを加えてその数値でシミュレーション解析をしてみたいのですが PC、数学はちょっと苦手でしてここで質問してみました。 エクセルあるいは何かフリーのソフトウェアでできればベストなのですが...。 どなたかお分かりになる方は教えてください。お願いします。

  • エクセルで重複データを両方とも削除するには

    こんにちは。エクセルでデータを加工しています。 仮にA列のそれぞれのセルに 1 2 3 4 5 1 2 とあった場合、重複しているデータを両方とも削除するにはどうすればいいのでしょうか。 つまり、最終的に、 3 4 5 と重複していないデータのみを残す方法です。 重複しているデータを1つだけ削除するのはわかるのですが、 このケースはわからないので教えてください。

  • EXCELで重複行のデータを削除したいと思っています。

    EXCELで重複行のデータを削除したいと思っています。 フィルタの重複するレコードは無視するにチェックをいれる方法は知っているのですが、 この方法だと新しく出来たデータ列が数式ではなく数式の計算結果でデータ列が出来てしまいます。 どうしたら数式のままで重複データを削除出来るのでしょうか?

  • エクセルのデータが重過ぎて固まってしまいます。

    役4万5000件のデータベース(アクセス)に新たにデータを追加する際にそのデータが重複しているかどうかを調べるエクセルファイルを作りました。 簡単にエクセルファイルの内容を説明すると、 (1)4万5000件のデータ(名前の部分のみ)を貼り付ける。 (2)追加するデータの一覧(20件程度) (3)countifにより、重複しているデータの件数をカウントする。 (4)1以上のものを重複データとして認識する。 (1)のデータ(名前部)をカタカナのみ・空白部を削除・全角にするためにほかのセルに=JIS(phoetic(substitute((substitute("データ"," "))," ")))のようにしています。 問題は、(1)のデータを貼り付けた際にエクセルがとまってしまうことです。 普通に貼り付けるだけであれば、大丈夫なんですが、貼り付けた際にほかのセルで(1)のデータを加工する関数が入ってるためにとまってしまうようです。 どうにかして、固まらないようにしたいのですが、どのような方法が考えられるでしょうか? よろしければご回答お願いします。

  • Excel内の重複したデータを手軽に見つけるには?

    Excelでメールアドレスの管理をしようと思っています。 すでに保有しているメールアドレスデータがありまして、そこに毎月1回新しいメールアドレスを加えていきます。 その際に同じメールアドレスが重複するケースがあるので、できるだけ手間をかけずに見つけ出し、重複しているアドレスを削除したいのですが、どのような方法がベターでしょうか。量が多いのでできるだけ効率的な方法でやりたいと思っています。 最終的なメールアドレスの並び順はまったく気にしません。 よろしくお願いします。m(_ _)m

  • EXCELでSavitzky-Golay法

    EXCELでSavitzky-Golay法 仮にノイズを含むデータがEXELのA列に時系列で出力されているとします. これにSavitzky-Golay法を用いてスムージングを行いノイズを低減したいのですが,EXCELの機能で簡単にできないものかと考えています.ですが上記の式などを見ているとVBAでプログラムを組まないとできそうにない気もするのですが,EXCELの機能だけでSavitzky-Golay法を適用することはできるでしょうか? どなたか経験のある方回答をお願いします.

  • 凸凹曲線グラフをスムージングしてデータに落とす方法

    こんにちは。 曲線グラフをスムージングしてデータに落とす方法を模索しています。 実験データのグラフが凸凹で見づらく、それをスムージングして綺麗にしたいです。 視覚化だけならExcelでできそうなのですが、もう一歩踏み込んでスムージング後のグラフをデータ化したいのです。なぜなら解析を行いたいからです。 一々、スムージングしたグラフを見ながら、データを打ち込むのはやってられません。 C言語やC++でプログラムを組んでできるものなのでしょうか。参考urlなどありますか。他にいい方法がありましたらどうぞご教授ください。

  • エクセル データの抽出について教えてください。

    エクセルのデータの抽出について教えてください。 大量のデータ(数字のコード)がランダムに縦に並んでいるのを、並び替えで日付順にしたのですが。 重複しているのがとても多く重複しているのは日付が早いのだけを取り出したいのですが。なにかよい方法はないでしょうか? 重複しているのに(重複していらないのに)標しでわかりやすくしてあとでフィルタで抽出して削除でもしようかと思うのですが。 標しがつけれるようなやりかたおしえてください。 

  • エクセルデーターの重複するデーターを無視する方法

    エクセルの表の中に重複するデーターが含まれている場合一つにして 表示する方法がありましたら教えて下さい。フィルタオプションで重複するデーターを無視するにチェックを入れても変わりません。

専門家に質問してみよう