• ベストアンサー

フーリエ変換(FFT)後に各スペクトルの電圧値を求めるには?

初めて質問いたします。よろしくお願いいたします。 連続した電圧信号をフーリエ変換して、その信号にどういった周波数の信号が含まれているかを調べたいのですが、その際に、各スペクトルを電圧値に変換した数値も調べたいと思っています。 参考書等をあたったところフーリエ変換をして、振幅スペクトルを求めるところまではできたのですが、実際の電圧値に変換することができません。 どなたか、よい方法、書籍などがありましたらご教授いただけないでしょうか? よろしくお願いいたします。 使用環境は、OS…Win2kpro、BorlandC++5.5.1(Borlandからフリーでダウンロードしたもの)です。

質問者が選んだベストアンサー

  • ベストアンサー
  • hkinoko
  • ベストアンサー率100% (1/1)
回答No.3

はじめまてお便りだします。よろしくお願い致します。 どのような用途でFFTを作成しているか存じませんが、ディジタルオーディオや計測用データ解析にしても、連続した信号をFFTにする場合は、ある一定時間でのサンプリングを行い、切り出した波形の位置によりスペクトルの形状が変わってきます。そのため、切り出した時間波形にウインドウ(窓)を掛け、切り出しによるスペクトルの影響を小さくする必要があります。そのあとにフーリエ変換を行います。あとは、ご回答の通り、振幅は実部と虚部の絶対値、位相は虚部÷実部のアークタンジェントです。あと振幅はこのままだと大きい値なので、DCで振幅÷(サンプリング数(2048や4096など)÷2)でACで振幅÷(サンプリング数)ですがDCでよいと思います。y=sin(2πft)などで確かめてください。また、振幅のモードでは、実効値、0-peek,peek-peekがあり、各々、1/sqr(2),1,2倍すれば求まります。長くなりましたが、FFTを参考にされるならば計測機器メーカでFFTアナライザを扱っているところがあるのでそちらを参照をするのも一つの手だと思います。あとわからなければ個人的に質問してくださっても結構です。

参考URL:
http://www.onosokki.co.jp/HP-WK/whats_new/onoreport/back_10/sv_4.htm
nikka
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 いただいたアドバイスを元に、ネット上をさまよった結果、 参考にできるプログラムを発見することができました。 それと自分の作成したものとを比較した結果、ご指摘いただいた窓関数の扱いを 間違っていたようです。そのほかにもミスがちらほら・・・。 ということで何とか目的を達成することができました。 どうもありがとうございました。

その他の回答 (2)

  • tsumoru
  • ベストアンサー率0% (0/1)
回答No.2

何の電圧信号を計測しているか分からないので、「とんでもなく大きな数字になってしまう」といわれても何とも言えません。答えが分かっているものを、FFTして確かめてみるのが一番でしょう。またFFTの他にも、DFT(離散フーリエ変換)が良かったりする場合があります。また解析する数によっても結果が変ってきます。そこら辺を注意してみてください。 FFTのプログラムは、ネット上でいろいろとソースを公開しているみたいです。検索エンジンで探せば、沢山出てきます。それらを参考にしてみてください。

nikka
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 いただいたアドバイスを元に、ネット上をさまよった結果、 参考にできるプログラムを発見することができました。 どうもありがとうございました。

  • tsumoru
  • ベストアンサー率0% (0/1)
回答No.1

FFTしたら、実数部と虚数部の2つの値が出てきます。その値の大きさ(絶対値)をとると電圧値になります。全ての周波数に対してその計算をすることで、周波数に対する電圧の値を求めることが出来ます。

nikka
質問者

お礼

tsumoruさん、ご回答ありがとうございます。 複素数の絶対値を取るという意味だと思うのですが、 r = 実数部、i = 虚数部とすると √r*r + i*i で求められるものですよね? それが、とんでもなく大きな数値になってしまうのです。 その場合、FFTの計算が間違っているのでしょうか?

関連するQ&A