• ベストアンサー

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

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

  • nikka
  • お礼率100% (8/8)

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

  • ベストアンサー
  • 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

  • フーリエ変換により得られる周波数スペクトルの単位

    離散フーリエ変換(デジタル信号に対して行う周波数解析)により得られる 周波数スペクトルの単位について教えて頂きたいと思い,質問させて頂きました. デジタル信号処理やフーリエ変換に関する書籍,またはホームページを調べてみますと 周波数スペクトルには ・振幅スペクトル ・位相スペクトル ・パワースペクトル ・パワースペクトル密度 というような様々な表現方法があることがわかりました. しかし,それぞれが持つ意味や単位がはっきりと書かれた書籍をみつけることができませんでした. 離散フーリエ変換の定義式やホームページを参考にして考えてみますと 周波数解析を行う対象の波形の縦軸の単位がVで,横軸の単位が秒であれば, 求められるスペクトルの単位は,以下のようになると考えております. しかし,確信がなく不安な気持ちです. ・振幅スペクトル [VまたはdB] ・位相スペクトル [rad] ・パワースペクトル [V^2またはdB] ・パワースペクトル密度 [(V^2)/Hz] もしスペクトルに関してご存知の方がいらっしゃいましたら, 教えて頂けると本当にうれしいです. 参考になるホームページや書籍等も教えて頂けると助かります. つたない文章ですが,どうぞよろしくお願い致します.

  • フーリエスペクトルの振幅について

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの 振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、 サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、 今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から 元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは 数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、 正弦波の元の振幅値を正確に求めることは出来ません。 フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、 なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。

  • ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値に

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、正弦波の元の振幅値を正確に求めることは出来ません。 この例の場合、フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

  • フーリエ変換のスペクトル

    フーリエ変換を勉強しても、なかなかわからないことが多くて困っています。現在EXCELのフーリエ解析ツールで変換して、パワースペクトルまで求められるようになっていますが、パワースペクトルがよくわかりません。 パワースペクトルは周波数領域の比みたいなものと勝手に認識しているのですが、例えばsin波の振幅を2倍するとピークのパワースペクトルはどうなるのか等、法則みないなものはありますか?実際に色々試しているのですが、よくわかりません。また、周波数0以外のデータの総和に何か法則がありそうなのですが、やはりよくわかりません。 1次元の周期成分を持つデータをフーリエ変換して、ピークが出るのですが、その値が何を示してるのかを上司に説明できるようになりたいので、アドバイスお願いします。

  • フーリエ変換 位相の範囲

    フーリエ変換の位相の範囲について質問です. ある信号をフーリエ変換すると 周波数スペクトルがわかります. 周波数スペクトルには振幅スペクトルと位相スペクトルがあって それぞれ 振幅スペクトル: Xn=√An^2+Bn^2 位相スペクトル:θn=arctanBn/An で表されることは理解できたのですが、 この場合、 θnがとる範囲は0~πですか? 考え方がよくわからないので説明も一緒にわかる方いらっしゃいましたら 教えてください. よろしくお願いいたします.

  • フーリエ変換についてF(ω)

    フーリエ変換についてF(ω) 次の信号のフーリエ変換と振幅スペクトルを求めたいのですが、算出式、解答を教えていただけますでしょうか。 f(t)={(e^(-at))+(e^(-2at),t≧0      {0,t<0 上の信号のフーリエ変換F(ω)と振幅スペクトルをお願いいたします。

  • 離散フーリエ変換のスペクトルについて

    関数f(x)=2sin(πx)をx=0~2まで等間隔1000点でサンプリングし、 離散フーリエ変換 Σ(k=0~N-1) f(k)exp(-2πkni/N) の式から、言語プログラムで計算する式をつくり、1000個の実数Reと虚数Imを得ました。 ピークはもちろん周波数πのときで、スペクトルの値が1000でした。 √(Re^2+Im^2)をスペクトル値、√なしをパワースペクトル値をいうそうですが、元の関数の振幅2とこのスペクトル値とはどのような関係があるのでしょうか? 異なる正弦波を混ぜれば、スペクトル値を見ることによって振幅の比は分かりますが、スペクトル値と振幅には式的になんらかの関係は存在するのでしょうか?  波のエネルギーは振幅の2乗になると思い、2^2=4がスペクトル値としてでる事を期待していましたが途方もなく異なる値が出てしまいました。 どうぞよろしくお願いします。

  • フーリエ変換と電力スペクトル密度

    ある信号の周波数スペクトルを調べたい場合は、その信号をフーリエ変換すれば求まります。 これに関連して、いまこの信号の電力スペクトル密度(横軸-周波数)を知りたい場合の計算方法がわからなくて困っています。 電力スペクトルの定義を与えている参考書はいくつかありましたが、漠然すぎて自分には理解できませんでした。 具体的に、大きさA、パルス幅Tの非周期信号の電力スペクトルを求める式はどうやって表すのか教えてください。

  • フーリエ変換における時間波形と振幅スペクトル

    ある電磁波で,時間波形を取得後,フーリエ変換し振幅スペクトルを得たとき, 時間波形の長さ(時間窓)が長くなればなるほど,振幅スペクトルのピーク値が下がってしまいます. これはいったいなぜなのでしょうか? どなたか教えていただけませんか? よろしくおねがいします.

  • フーリエ変換による周波数解析についてなのですが

    フーリエ変換による周波数解析についてなのですが 時々刻々と微小な変動がおこる測定量をセンサを用いて測定し、AD変換したのちにマイコンに取り込んだとします。 しかし画面上に表示される測定値の変動が本当に現象によるものなのか、それともノイズによるものなのか分からず、フーリエ変換を行い、周波数解析を行おうとおもったのですが フーリエ変換によって求められるパワースペクトルは振幅の二乗ですよね? ノイズによる振幅と現象による振幅がほぼ同じくらいのときは フーリエ変換を行っても何もわからないのでしょうか?