次バージョン予告:FFT パラメータの設定方法の変更2009年11月28日 18:54

今までは、FFT のパラメータは「FFT ブロックサイズ」と「解析間隔」で指定するようになっていました。
 http://cessna373.asablo.jp/blog/2008/06/04/3562431

次バージョンでは、これを「FFT データ点数(ライン数)」と「オーバーラップ率」で指定するように変更する予定です。
これまでのパラメータとの関連は、以下のようになります。
 「FFT データ点数」を大きくする <--> 「FFT ブロックサイズ」を大きくする
 「オーバーラップ率」を大きくする <--> 「解析間隔」を小さくする

ただ問題は、内部パラメータは元のままということです。
すなわち、「FFT データ点数」と「オーバーラップ率」を内部で「FFT ブロックサイズ」と「解析間隔」に変換して、内部的にはそれらの値を使用しています。
「解析間隔」は、内部的に 1 以上 1000 以下の整数という制限があるので、有効な「オーバーラップ率」(実効オーバーラップ率) は、指定した値とは異なる場合があります。

問題もあるかもしれませんが、少しこれで様子を見てみようと思います。

FFT ブロックサイズと解析間隔2008年06月04日 22:45

ブロックサイズと解析間隔\ブロックサイズと解析間隔
ブロックサイズと解析間隔については、今までも何回か話題に出てきました。
 http://cessna373.asablo.jp/blog/2006/01/27/228287
 http://cessna373.asablo.jp/blog/2006/02/05/241826
 http://cessna373.asablo.jp/blog/2006/02/05/241844
 http://cessna373.asablo.jp/blog/2006/02/08/246067
 http://cessna373.asablo.jp/blog/2006/08/20/492817
 http://cessna373.asablo.jp/blog/2007/05/10/1499595
一般的に使われているであろう FFT のライン数(点数)とオーバーラップ率と、本質的には同じものです。

これで分かる人には分かるのでしょうが、もっと簡単に表現できないかと考えてみました。
 「ブロックサイズを大きくすると、ソノグラフが縦方向に細かくなる」
 「解析間隔を小さくすると、ソノグラフが横方向に細かくなる」
正確な表現ではありませんが、ソノグラフを見て「もっとこうしたい」と思ったときの指針にはなるでしょう。

図はある音声データによる例です。
ブロックサイズと解析間隔の関係は、以下のようになっています。
 左上               右上
  ブロックサイズ 23ms(小)   ブロックサイズ 23ms(小)
  解析間隔 23ms(大)      解析間隔 11ms(小)

 左下               右下
  ブロックサイズ 46ms(大)   ブロックサイズ 46ms(大)
  解析間隔 23ms(大)      解析間隔 11ms(小)

次バージョン予告:FFT 関連オプションの変更2008年02月03日 13:15

次バージョンでは、FFT の点数(ライン数)などを指定するオプションを変更します。
 1. [キャプチャー間隔/解析間隔] と [FFT 窓倍率] ではなく、[FFT ブロックサイズ] と [解析間隔] で指定する。
 2. リアルタイム解析用のオプションと録音データ解析用のオプションを統一する。

1 については、[FFT ブロックサイズ] = [解析間隔] × [FFT 窓倍率] の関係があるので、単に指定方法が変わっただけです。
ブロックサイズを固定したまま窓倍率(オーバーラップ率)を簡単に変更することができなかったのを、改善するのが目的です。

一般的にはライン数とオーバーラップ率で指定するもののようですが、設計の都合上、そこまですることはできませんでした。
データのサンプリングレートが一定の場合は、使い勝手はほぼ同じになるものと思います。
この辺りについては、以下の記事も参考にしてください。
 http://cessna373.asablo.jp/blog/2006/02/08/246067
 http://cessna373.asablo.jp/blog/2007/05/10/1499595

2 はまた別の話で、[リアルタイム] タブとその他のタブで、指定するオプションが分かれていたのを統一したというものです。
[リアルタイム] タブで解析間隔をあまり小さくすると、パフォーマンス上の問題が出る。一方、録音データに対しては、できるだけ詳細に解析したい。そういう事情を考えて、今までは別々に設定するようにしていました。
しかしあまり分かりやすくはなく、混乱もあったようなので、今回分かりやすさを優先して統一することになりました。

デフォルトのブロックサイズ(オーバーラップ率 0 のとき解析間隔と同じ)は、以前はリアルタイムが 100ms, 録音データが 20ms だったのを、46ms にしました。これは、サンプリングレート 44100Hz で、FFT 点数が 2048 にできるだけ近くなるようにした値です。

FFTの限界2007年08月05日 23:57

先日書き込んだ
http://cessna373.asablo.jp/blog/2007/08/02/1696232
の続きですが、
FFTアルゴリズムではブロックの大きさが固定なので、
低い周波数では波の数が少なく、高い周波数では波の数が多くなります。
これが本当に問題なのかは議論がありますが、
できるだけ同等にしようと発想で作られたのがウェーブレット変換です。
これは基底関数というものにウェーブレット関数を用いるものです。
この結果、広い周波数範囲で解析できることになります。
実はこの変換はJPEG2000やMPEG4等で利用されていて、
なかなか応用分野が広いものですね

FFTの限界2007年08月02日 01:03

FFTにはそのアルゴリズムの仕様からいくつかの限界があります。
例えば以前ここでも言及しましたが、
周波数分解能(1/Hz)Xデータブロックの長さ(sec)=1
という関係があります。
また、他にも1ブロックの大きさは周波数に関係なく一定というのもあります。
これはアルゴリズム上は当たり前の話なのですが、意外と不便です。
要するに低い周波数は1ブロックの中に存在する波の数が少ないのに、高い周波数では波の数が多くなります。
これは周波数により、感度のようなものが変化することを表し、すべての周波数で均等に評価していることにならなくなるような錯覚に陥ります。

しばらくこの点にていていくつか記事をのせていこうと思います

オーバーラップに関する説明(訂正版)2007年05月10日 22:52

http://cessna373.asablo.jp/blog/2006/02/09/247376
で説明しましたオーバーラップに関してですが、一部内容を訂正させていただきます。
解析間隔は一回のFFTの解析データの幅ではなく、解析と解析の間隔を表しています。従って解析間隔は(c)ではなく、(c-b)ということになります。
逆にいうと、解析間隔を一定に設定しておいてもFFTの解析データの幅は一定ではなく、窓倍率を変更するとそれに応じてかわります。例えば解析間隔5msecで窓倍率を10にすると解析データの幅は50msecになります。従って、同じ周波数分解能のデータが必要な場合は、窓倍率に応じて解析間隔を変更してください。
この件について、ご質問などありましたら、コメントなどにてご連絡ください。よろしくお願いします

オーバーラップに関する説明2006年02月09日 22:09

下記の記事については、
http://cessna373.asablo.jp/blog/2007/05/10/1499595
にて訂正を行っております。ご確認ください。
-----------------------------------------------------------------------------
オーバーラップに関して定義が出てきましたので、補足として図で説明してみます。
まず図の説明ですが。
横軸は時間とであり、矢印上に時系列データ(WAV等の音声データ)があると見てください。一回の解析は解析間隔で設定した幅(c)で計算されます。
図1にはオーバーラップしていない場合のFFTが計算される様子を表しています。一回目の解析データと二回目の解析データはまったく重なっていません(ラップしていません)。
図2ではオーバーラップした場合です。一回目の解析データと二回目の解析データが重なっています。重なり分はbです。この場合は ラップ率=b/cX100(%) となります。
この違いにより、時間当たりの解析回数はオーバーラップを設定した場合には大きくなります。
たとえば、解析間隔 1秒の場合、オーバーラップしない場合には10秒間では10/1=10回解析します。同じ条件でオーバーラップ率90%の場合には1+(10-1)/(1-0.9)=91回解析します。
したがってほぼ9倍解析回数が多くなるため、解析の応答性がいい、あるいは短時間で終わる解析にむくということなります。

オーバーラップ解析2006年01月27日 21:30

オーバーラップ解析は、一回のフレーム時間長が終わらないと次の解析を行わない通常のFFTに対して、終わらない内に次の解析を行うことです。例えば周波数レンジ400Hzでライン数400の場合、周波数分解能が 400Hz/400ライン=1Hzとなり、フレーム時間長は1Hzの逆数の1秒になります。
通常は最初の解析は0~1秒、次は1~2秒、2~3秒、………となります。
オーバラップ解析でラップ率を90%にすると1*0.9で0.9秒ラップするので
最初の解析は0~1秒、次は0.1~1.1秒、次は0.2~1.2秒………となります。
これにより、比較的短い時間で変化する現象を顕在化しやすくなります。