Savitzky Golayによるノイズ除去法(1)


データの平滑化に関してInfo-LabVIEWで時々出てくる手法がSavitsky-Golayのアルゴリズムだ。Info-LabVIEWの中でのやり取りを2つ取り上げて翻訳してみたので参考にして欲しい。

Info-LabVIEWのアーカイブには、s_g_smth.zipとして提供されている。lv4.0のカテゴリーだったと思うので、興味のある方は参考にして欲しい。残念ながら手元の資料では作者は分からない。

Savitsky-Golayの方法について興味が出てきたのでネット上で詳しい情報を探してみたが、あいにく見つからなかった。Kurt M. Scudder氏の推薦する論文は私の周りでは見つかりそうもない。しかたなく自分の本棚をあさっていたら、「科学計測のための波形データ処理」南 茂夫編著CQ出版(ISBN4-7898-3031-4)に簡単な原理の説明と係数表が紹介されていることがわかった。
また、http://www.galactic.com/Algorithms/deriv_sav-gol.htmには行列で係数を求めるアルゴリズムの要旨が紹介されていたので、自分なりに検討してみることにした。Savitzky Golayによるノイズ除去法(2)

------------------------------

From: "Sergey Liberman" <liber@tiac.net>
To: <chenyk@yahoo.com>
Cc: "Info-LabVIEW" <info-labview@pica.army.mil>
Subject: Re: Data Analysis problem...
Date: Fri, 26 Jun 1998 15:10:07 -0400

Chen David <chenyk@yahoo.com> wrote:
ハイ! 初めて解析用のVIを作ろうとしているんだが、厄介な問題で困っています。それはスレッシュホルドに関する問題で、取り込んだデータのスレッシュホルドをデータの1次微分のスレッシュホルドに変更したいんだ。どうすればいいんだろう。簡単な方法はないかな?
------------------------------

ピーク(スレッシュホルド)を検出するためにはAnalysis/Additional Numerical MethodsにあるPeak Detector.viを使うと良い。

実験データを数値微分するのは、データにノイズが含まれている場合(いつだってそうなのだが)、かなりの困難を伴う。したがって、微分はフィルタリングとともに行わなければならないし、フィルタリングによって情報の一部は失われてしまう。
スレッシュホルドの検出のためには、かなり強いフィルターをかける必要があるだろう。


もしも、実験データが10-20点のデータ配列ならば、Savitsky-Golayのアルゴリズムを使って微分してみることも良いかもしれない。実行速度も速く、目的に応じてスムージングの程度を調節することができる。記憶では誰かが作ったVIがアーカイブされていたと思う。もし、なければ、私の作ったVIをあげてもいいよ。

--Sergey

--- Serge Liberman Solidus Integration, Inc. ---
--- mailto:liber@tiac.net http://www.tiac.net/users/liber ---


------------------------------
------------------------------

Date: Tue, 21 Jul 1998 00:24:59 +0100
To: info-labview@pica.army.mil
From: "Kurt M. Scudder" <kurs@novo.dk>
Subject: More on Savitsky-Golay convolutional smoothing/differentiation

LabVIEWを使っている皆さん、

最近コンボリューションでスムージングを行うSavitsky-Golayの方法の使い方に関して話題になっている。私の手元にはSavitsky-Golay(SG)の方法をプログラムで書こうとする人が見たいと思うような論文がいくつかあります。これらの論文はSGが広く使われている解析化学の分野のもので、この分野の文献を見ていない人にとっては馴染みがないかも知れない。"Numerical Recpies"に書かれているSGを適用する方法にはいくつかの点で不適切な点(後述)があるが、これらの論文では正しく書かれている。

SGを知らない人のために少しだけ説明しておこう。これはN次多項式による平滑化、微分、あるいは両者を同時に行うコンボリューション技法です。コンボリューションはLabVIEWに関数として用意されているのでSGのプログラミングはコンボリューション行列を組んでデータとコンボリューションするだけという簡単なものだ。

SGにかぎらずコンボリューションを使う時の欠点は、2N+1個のコンボリューションの場合、計算結果の前後にN個の不完全な部分ができることだ。これは両端で0になっているデータの場合は大きな問題ではないが、実際のデータの場合は0になっていることはほとんどない。この問題はP.A. Gorryの1990年と1991年に発行された"Analytical Chemistry"のジャーナルで克服されている。これらの論文の中で両端のデータに対しコンボリューションの重みをかけない方法について述べている。HulとGratzlの論文はその方法で生じる例外について述べている。1991年のGorryの論文のタイトルは残念ながら不明である。

おそらくGorryの論文で最も役に立つ点はスムージングの次数、コンボリューションの大きさ(N)、微分あり/なしに対するコンボリューションマトリックスの計算方法を述べていることだろう。ここに書かれている方法を使えば全ての組み合わせでマトリクスのファイルを用意しておかなくても必要な条件で計算することができる。LVで実際にプログラムを書いたわけではないが、簡単にできるはずだ。もう一つGorryの論文で役に立つのは不等間隔のデータに対する方法も書いてある点だ。

References:

Gorry PA. General Least-Squares Smoothing and Differentiation by the
Convolution (Savitsky-Golay) Method. Analytical Chemistry 62 (1990), pp
570-573.

Gorry, P.A. Title Unknown. Analytical Chemistry 63 (1991), pp 534-536.

Hui KY & Gratzl M. Anomalies of Convolutional Smoothing and
Differentiation. Analytical Chemistry 68 (1996) pp 1054-1057.

Happy Coding,

Kurt

________________________________________________________________________
Kurt M. Scudder, Research Scientist tel: +45 4442 1412
Novo Nordisk BioImage fax: +45 4442 1411
Moerkhoej Bygade 28 email: kurs@novo.dk
DK-2860 Soeborg, Denmark


------------------------------

 

Koji Ohashi 00/08/08


戻る