アプリ版:「スタンプのみでお礼する」機能のリリースについて

FFTについて勉強しています。
「教えてgoo」でFFTで、検索したら、
http://momonga.t.u-tokyo.ac.jp/~ooura/fft-j.html
の、計算パッケージが良いと分かったのですが、計算結果の、読み方?が、分かりません。fftsg.c か、fft8g.c を利用して、計算結果を利用してグラフを描こうと考えています。それで、質問なのですが、
1.サンプリング周波数 44.1KHz
 16ビットで 8192個のデータを計算させた場合、計算値として得られる、配列は、周波数の小さい順に並んでいるらしいことは、分かるのですが、それぞれのデーターの周波数は、どうなっているんでしょうか?
 単純に0Hzから22050Hzを8192で、割った小さい順で良いのでしょうか?
2. また、パワースベクトルは、どの様に計算したらいいのでしょうか? 20log絶対値 で、良いのでしょうか?
 よろしくお願いします。

A 回答 (1件)

質問文に記載のFFTパッケージの内容を見ていないので、無責任に「一般的なFFTプログラム」の場合でお答えさせていただきます(Excel内蔵の[フーリエ解析]機能も同じです)。



ご質問の数値例を使うと、

 全観測時間=1sec/44.1kHz×8192=0.1857596・・・sec

です。この8192点をFFTして得られる周波数は、最も低い方がこの全観測時間約0.18576sec内にたった1周期だけの波で、最も高い方はサンプリングの定理(1周期を表現するのに最低2点のデータが必要というもの)より全観測時間約0.18576sec内に4096周期の波、になります。周波数に直すと、

 fmin=1/0.18576・・・sec≒5.3833Hz
 fmax=4096/0.18576・・・sec=22050Hz

となります。

つまり、一般的にはFFT結果の頭の4097点に、0Hz、5.3833Hz、10.7666Hz、・・・、22050Hzのデータが並んでいます。ご質問のように「22050Hzを8192で割る」ではなく、「4096で割る」ということです。なので、パワースペクトルは、この頭の4097点の結果(複素数!)を絶対値化して2乗すればよく、デシベル表示したいのであればご質問の通り20log(絶対値)とすればいいはずです。パワースペクトルとしては、それ以降の4098点目~最後の8192点目までは、同じ周波数情報が折り返して並んでいますので、この部分は不要になります。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみませんでした。
おかげさまで、プログラムを完成させることが出来ました。
また、よろしくおねがいします。
ありがとうございました。

お礼日時:2005/08/10 09:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!