
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絶対値 で、良いのでしょうか?
よろしくお願いします。
No.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点目までは、同じ周波数情報が折り返して並んでいますので、この部分は不要になります。
お礼が遅れてすみませんでした。
おかげさまで、プログラムを完成させることが出来ました。
また、よろしくおねがいします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
エクセルVBA 他の仕事を止...
-
移動平均を計算するプログラム
-
人生、宇宙、すべての答えとは...
-
fortran dlog2
-
【fortran77】データ行数のカウ...
-
Visual C++でdebugとreleaseで...
-
点と折れ線との間の距離を求める
-
matlabで計算終了
-
引き放し法による除算アルゴリ...
-
階乗のマクロ
-
CCurの引値を文字列にする時と...
-
VBAで関数をつくる
-
ExcelのVBAで複素数は扱えない...
-
VBAの再計算が反映されない件に...
-
趣味で「乗換案内」みたいなソ...
-
プログラムから開く・・・DPP
-
正しい五十音順について
-
ファイルの開き方
-
C++ で、「)」が必要 というエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
VBAで関数をつくる
-
[急募]Pythonについてです。
-
数値計算の高速化 (cos, sin, exp)
-
C言語についての質問です。 ル...
-
切り上げたい
-
DLL(VC++で作った)で稼動中の...
-
CとFORTRANの計算速度はどちら...
-
趣味で「乗換案内」みたいなソ...
-
CGIの実行権限(ディスク容...
-
エクセルで特定のセルのみを任...
-
functionを含んだプログラムを...
-
時間差を求める
おすすめ情報