• ベストアンサー

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

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

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

  • ベストアンサー
  • 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