Chapter Twenty Nine

第29話



前回info-lvアーカイブに送ったサウンドファイルの読み書きVIが登録されたので、興味のある人はFTPで取り出せるようになった。URLは
<ftp://ftp.pica.army.mil/pub/labview/vi/lv4/au_sound.llb>
<ftp://ftp.pica.army.mil/pub/labview/vi/lv4/au_sound.txt>

さて、今回はFFTについて調べてみよう。
自分も含め、あまり周波数解析に縁のない人は、FFTは難しそうだという漠然とした感覚を持っている。このような印象を与えているのは、説明書の数式が面倒そうだという事以外に、窓関数の存在にもあるような気がする。LabVIEWでは豊富な窓関数が用意されている。
しかし、人の名前にちなんだような関数名がたくさんころがっていても、どれを使ったら良いか区別がつかない。これらの窓関数の個性が見えてくればFFTに対する漠然とした感覚を整理することができるかもしれない。
窓関数の特性について説明している本が少ない中、NIのApplication Note 041は実用的な観点から分かりやすく説明している。日本語になっていないのが非常に惜しまれる。

FFTではサンプリングしたデータが無限に繰り返されることを前提に計算される。そのため、たまたま周期とサンプリング時間が整数倍のときは正しいが、それ以外の大部分の場合は不連続になってしまう。
この影響を最小限に防ぐのが窓関数の役割なのだろう。窓関数を通すことによってデータの端部をゼロにして不連続を防ぐことができる。
窓関数の違いを確認するため、二つのサインカーブを合成し4種類の窓関数を通してパワースペクトルを計算してみた。まず、周期とサンプリング時間が整数倍の例で計算してみたのが下のパネルだ。窓関数によって微妙に違う減衰特性を示している。
パワースペクトルの分解能も微妙に異なっているのが分かると思う。
次にサインカーブBの方を周期とサンプリング時間が整数倍にならない値(12.5サイクル)に変えてみた。
窓関数を通さなかったデータのパワースペクトルは、スペクトルが分散してピーク値が半減している。窓関数を通したものは、比較的影響が少ないようだ。
また、対数スケールでパワースペクトルを見ると窓関数の違いがより分かりやすくなる。
はじめに書いたようにFFTについては専門的な経験がないので間違ったことを書いてしまったかもしれないが、NIのApplication Note 041を参考にして、自分でいろいろ試してみることを勧めます。ブロック遊びのように手軽に組み立てて試してみることができるLabVIEWは便利なツールだと思う。

See you!


Nigel Yamaguchi

戻る