« ディスプレイ | メイン | Multi taper (2) »
2006年02月15日
Multi taper
Analysis of Dynamic Brain Imaging Data
PP Mitra and B Pesaran
Biophys J , 1999,76:691-708.
離散値フーリエ変換における Multi-taper method についての論文。
---
ブザキラボでは matlab での解析プログラムが蓄積されててとても便利である。(たとえば、ケン・ハリスがブザキラボ時代に書いたプログラム集「KenToolBox」はホームページで公開されていて、ここからダウンロードできる。)
これらのなかで、フーリエ変換を使う解析プログラムにはほぼすべてで「Multi-taper method」が使われている。(たとえば、KenToolBox にある mtpsg.m というコードでは Multi-taper を使って power spectrogram を作成する。)
これらのプログラムをただ使ってるだけなら別に問題ないのだが、先日、プログラムを少し改変しようと思ったところ、Multi-taper が何なのか分からずにつまづいてしまった。そこで、Multi-taper method について軽く勉強することにする。上の文献はアントンに教えてもらったもので、Multi-taper についての method 論文。
---
Multi-taper というのは、窓関数の一種らしい。窓関数といえば、Hamming Window とか Gaussian window とかが有名だが、Multi-taper では直交した複数の窓関数を用いる。
Multi-taper の窓関数の形は、こんな感じ(Mitra 論文の Fig4、左側の4つ)。それぞれの窓関数はお互いに直交している(つまり内積を計算すると 0 になる)。このそれそれの窓関数を使ってフーリエ変換した後に、得られたスペクトルを平均することによって、最終的なスペクトルを求める。
窓関数を使うのは、データ点数が比較的少なく、端点の影響が気になるときである。たとえば、2秒程度の長さのデータで FFT をして低周波成分(たとえば 3~8 Hzあたり)を注目するとき、どうしても端点の効果が気になる。このようなときは何らかの窓関数を用いた方が良いと思われる。データの長さが(注目する周波数に対して)とても長い場合は、べつに窓関数など用いなくてもふつうに FFT をすればよい。(窓関数に関してはこのページがけっこういい。Java が素敵。)
では普通の窓関数と比べて、 Multi-taper はどう良いのか。
<メリット(1)>
データ点数が少ないと低周波成分のデータが、どうしてもギザギザになってしまう。
たとえば、Mitra 論文の Fig5 に計算の途中経過が載っている。(Fig5 は Fig4 をそれぞれフーリエ変換したもの。)
見て分かるとおり、それぞれの窓関数で計算したデータはギザギザしてて、どれがノイズでどれが本当のピークか分かりづらい(Fig5の右側)。しかし、それぞれのデータを足しあわせて平均をとれば、ノイズ成分がとれてとても見やすくなる(Fig6)。ここで、それぞれの窓関数が直交している、というのがミソ。(直交しているからこそ、足しあわせによりノイズ成分が平坦化される。)
<メリット(2)>
窓関数を掛けてやると、端点近くでデータが0に押さえ込まれる分、power がある程度損失してしまう。しかし、Multi-taper method では、複数の窓関数を用いるために、窓関数の形に由来する Power の損失がある程度防げる。
<デメリット>
窓関数を作るのがめんどくさい。Hamming 窓や Gaussian 窓などは、自分の必要なデータ点数さえ決まればすぐに作ることができるが、Multi-taper の場合はいちいち固有方程式を解いて求めなければいけないので、自分で作ろうと思うとけっこう大変である。
つづく(かも)。
投稿者 sfujisawa : 2006年02月15日 20:54
コメント
コメントしてください
サイン・インを確認しました、 . さん。コメントしてください。 (サイン・アウト)
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)