• ベストアンサー
  • すぐに回答を!

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

ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの 振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(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をかける理由を)教えて頂けないでしょうか。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数4720
  • ありがとう数8

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

  • ベストアンサー
  • 回答No.4

離散フーリエ変換というのは、実質離散フーリエ級数展開なので、 フーリエ級数展開を考えます。 f(t) = a0/2 + Σ[n=1→∞] { an cos (nωt) + bn sin (nωt) } f(t)の周期をTとして、ω=2π/Tです。 直流成分の振幅といっているのはこの第1項a0/2のことで、 サイン成分の振幅はbnのことです。 問題文の離散フーリエ変換の式 >Σ(k=0~N-1) f(k)exp(-2πkni/N) は複素フーリエ級数展開なのでオイラーの公式 cos nωt = [e^{inωt}+e^{-inωt}]/2 sin nωt = [e^{inωt}-e^{-inωt}]/2i = = -i [e^{inωt}-e^{-inωt}]/2 を使って書き直すと、 f(t) = a0/2 + Σ[n=1→∞] { ([an -i bn]/2) e^{nωt} + ([an +i bn]/2) e^{-inωt} } an = a(-n), bn = -b(-n)の関係があるので、 cn = ([an -i bn]/2), c(-n) = ([an +i bn]/2) と置くことができ、a0/2をc0と定義し直せば、 f(t) = Σ[n=-∞→∞] cn e^{nωt} したがって、複素フーリエ係数が求めているのはcn = (an-ibn)/2で、その実数部はan/2、虚数部は-bn/2です。 こうなる理由は、サイン、コサインのときは正の整数だったnを複素数で取り扱うときにマイナス側に拡張したことで、同じ係数が+側と-側にわかれたためです。 離散的な場合は和が-N/2~N/2の範囲の有限項で打ち切られ、 -N/2~0の範囲が一周期ずらされてN/2~Nになっています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答、ありがとうございます。 おかげ様で納得することが出来ました。 皆様、丁寧に対応して下さり、ありがとうございました。

その他の回答 (3)

  • 回答No.3
  • Tacosan
  • ベストアンサー率23% (3656/15482)

また別の説明をしてみる: 今は, 与えられた波形を「exp(-2πkni/N)」の重ね合わせで表現しようとしています. つまり f(t) = a0 e^(i0t) + a1 e^[(iπ/2)t]) + a2 e^(iπt) + a3 e^[(i3π/2)t] の形で表わそうということですね. で, まず e^[(i3π/2)t] = e^[(-iπ/2)t] から上の式は f(t) = a0 e^(i0t) + a1 e^[(iπ/2)t]) + a2 e^(iπt) + a3 e^[(-iπ/2)t] と等価です. そして, この式と 1 = e^(i0t) 1・sin (π/2)t = {e^[(iπ/2)t] - e^[(-iπ/2)t]}/(2i) を比較すれば「なぜ直流分に対して正弦波のスペクトルが半分しかないのか」が分かります. 正弦波の方にいる, 分母の「2」が原因です. なお, この分母の「2」は「10 Hz 余弦波」でも消滅します. 従って, さらに「振幅 1 の 10 Hz 余弦波」を重畳すると, 10 Hz のフーリエスペクトルの振幅値として 4 が得られるはずです. 確認してみてください.

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答、ありがとうございます。 完全ではないですが、何となく理解できました。 後は自分で計算して、結果を追ってみます。 正弦波をフーリエ変換して得られたフーリエスペクトルの振幅値から 元の正弦波の振幅値を求めるには、 「フーリエスペクトルの振幅値*2」 をすれば良い、ということが間違っていないと確認できて、安心しました。

  • 回答No.2
noname#108260
noname#108260

基本的にフーリエ変換はある周波数の成分を掛けて積分すると、 同じ位相と周波数の成分のもののみ取り出せることを利用しています。 要するに、同じ周波数と位相のものは自乗されるので値が残ることになります。 ここら辺は基礎の所でやるので調べて下さい。 そして、その結果自乗の積分になるのですが、 直流の場合は常に一定値であるのに対して、正弦波の自乗はそれの半分の直流分しか持ちません。 ですので、積分した値を倍にすることで直流と等価になります。 ちょっと説明が下手ですが疑問点あれば教えて下さい。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答、ありがとうございます。 「正弦波をフーリエ変換して得られるスペクトルの振幅値 * 2」 で元の正弦波の振幅値が得られる、ということが間違っていないようで 安心いたしました。 もう少しだけ教えて頂きたいのですが、 「正弦波の自乗はそれの半分の直流分しか持ちません」 というのは、フーリエ変換の計算の特徴なのでしょうか。 フーリエ変換の定義式を眺めると、理解できる事項ですか・・・? このような質問をさせて頂いた事情を少しお話すると、 高調波が入り混じった電圧と電流の時間波形があり、 この電圧波形と電流波形の積(= 瞬時電力波形となります)に対して 離散フーリエ変換を適用し、どの周波数がどの程度の電力値があるのか、 を正確に知る必要がありました。 やはり正弦波同士の積をフーリエ変換した場合でも、 「計算して得られたフーリエスペクトルの振幅値*2」 で元の時間波形の振幅値が求められるのでしょうか。

質問者からの補足

自分で考えてみて、下のように理解したのですが合っているでしょうか。 振幅Aの正弦波の実効値は「A/sqrt(2)」ですよね。 フーリエ変換ではその実効値と「exp」の項との積が積分されるので、 結果的に「A/2」というフーリエスペクトルが生成されることになる。

  • 回答No.1
  • aokii
  • ベストアンサー率23% (4713/20011)

計算すると正弦波は「2 -> 0.5」になります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

迅速な回答、ありがとうございます。 確かに上記の例で正弦波のフーリエスペクトルを計算すると「0.5」となります。 しかし、元の正弦波の振幅値は1であり、 フーリエスペクトルの振幅値とは異なっています。 ここで言う「正弦波の振幅値」とは「peakの値」のことなのですが、 そもそも 「正弦波の振幅値(peak値) = フーリエスペクトルの振幅値」 という考え方が間違っているのでしょうか。

関連するQ&A

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

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(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をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

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

    関数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がスペクトル値としてでる事を期待していましたが途方もなく異なる値が出てしまいました。 どうぞよろしくお願いします。

  • 振幅を求めるのに最適な窓関数

    サンプリング周期1usで収集した10万点(0.1秒間連続測定)のデータがあります。 これは正弦波信号+ノイズというもので、正弦波の周波数は約100kHzです。 この正弦波の時間的なゆらぎを求めたいので、例えば5万点づつにデータを分割し、その5万点にDFTを行ってピークとなる振幅を求める方法を考えました。 この場合5万点のデータ数だと周波数分解能は100Hzとなるため、もし本来の周波数が例えば100.03kHzだとするとその振幅情報は本来の振幅に比べてかなりずれてしまいます。 これは解析対象区間に含まれる正弦波の数が整数個でないことに起因するのですが、このような場合窓関数を使うように言われていますが、振幅の誤差が1%以下とするためにはどのような窓関数を使ったらよいでしょうか? または、別の方法で振幅を1%以下の精度で求められるという情報でも助かります。

  • MATLABによるFFTと位相スペクトルについて

    純粋な正弦波信号 y=sin2πft ただし周波数f=500MHz をサンプリング周波数2.5GHz,サンプリング数128,256,512,1024の四パターンMATLABでFFTし、パワースペクトルと位相スペクトルを求めました。 結果、パワースペクトルは予想通り500MHzでピーク値をとったのですが、位相スペクトルは各サンプリング数ごとに全く違う値を取りました。 というわけで、 (1)理論上、正弦波の位相スペクトルはどのような値になるのか (2)なぜサンプリング数ごとに位相スペクトルの結果が大きく変わったのか この二点をご教授ください。よろしくおねがいします。

  • 連続時間正弦波信号と離散時間信号

    デジタル信号処理のレポートでこんな問題が出されたんですが解き方が解らなくて苦戦してます!!!。どなたか教えて頂けませんか? 問題: 周波数11[Hz]の連続時間正弦波信号をサンプリング周波数 8[Hz] でサンプリングした。 サンプリングによってこの離散時間信号と全く同じ波形となる連続時間正弦波信号の うち、最も低い正の周波数をもつ正弦波の周波数は何[Hz]か?

  • 振幅スペクトル グラフ

    振幅スペクトルが X(Ω)={1, |Ω|<ΩB,0, |Ω|>=ΩB である連続信号x(t)を考える.連続時間信号に含まれる最大周波数が10kHzの時,(a)32kHz,(b)16kHzでサンプリングした際のグラフの描き方を教えてもらえませんか?範囲は-50kHz~50kHzです.ΩBは原信号の最大角周波数です.周波数領域での位相がゼロである信号を仮定する.

  • H8マイコンでの正弦波の電圧振幅

    現在H8マイコンを用いて趣味で電子工作をしている者です。スピーカーを鳴らすために、H8マイコンのD/Aコンバータを用いて正弦波を発生させたいと考えております。私が持っている参考書では正弦波は以下のように発生させるものだと書いてあります。 unsigned char sindata[128] ={127,133,139,146,152,158,164,170, 176,181,187,192,198,203,208,212, 217,221,225,229,233,236,239,242, 244,247,249,250,252,253,253,254, 254,254,253,253,252,250,249,247, 244,242,239,236,233,229,225,221, 217,212,208,203,198,192,187,181, 176,170,164,158,152,146,139,133, 127,121,115,108,102,96,90,84, 78,73,67,62,56,51,46,42, 37,33,29,25,21,18,15,12, 10,7,5,4,2,1,1,0, 0,0,1,1,2,4,5,7, 10,12,15,18,21,25,29,33, 37,42,46,51,56,62,67,73, 78,84,90,96,102,108,115,121}; と定義して、(254が振幅の一番上、0が振幅の一番下、127がちょうど真ん中になります)このデータを割り込みを使って、自分の使いたい周波数の正弦波を出す、ということになっています。 ここでふと思ったのが、この正弦波は振幅5V(H8マイコンの動作電源が5V)しか出ないのではないんじゃないかと。振幅を変えるためにはどうしたらいいんでしょうか?上記の128個のデータを全て書き直すしかないのでしょうか?それとも×3/5とかにしてデータを小さくしたらいいんですか?でもそれだとデータが整数じゃなくなってしまいますよね?どうしたら振幅を変えられるのでしょうか?どなたかご教授願います。

  • FFTデータ数が少ないと直流成分が大きく変動する?

    FFTの振幅スペクトルから実効値算出のために単一正弦波をFFTしてみると、(1)のように計算データ点数が少ない場合、窓関数の位置によって「0Hz直流成分」のFFT結果値が大きく変動してしまいます。((2)(3)は窓関数がどの位置でも問題ありません。) この(1)(1サイクル64点=FFTデータ数64個)のような計算の場合、どのように実効値算出すればよいでしょうか?  また、正常な場合でもこれらのサンプル間隔(0、30Hz、60Hz等)の"すき間の部分”は考慮しなくても、全て計算結果に出力されているということでよいでしょうか? 単一正弦波(60Hz)   ((最大値5388.9v=実効値3810.5v)、サンプリング3.84KHz=1サイクル64点)   (実効値換算式=前半の√(実数^2+虚数^2)の合計/(FFTデータ数/2)/√2) (1)FFTデータ数 64個⇒0Hz(0.00~1905.2)???、60Hz(1905.2),120Hz(952.6)、180Hz(0.0)、          ⇒合計( ??? ) (2)FFTデータ数128個⇒0Hz(0.0), 30Hz(952.6),60Hz(1905.2),90Hz(952.6), 120Hz(0.0)、          ⇒合計(3810.4) ≒実効値 (3)FFTデータ数256個⇒0Hz(0.0),15Hz(0.0),30Hz(0.0)、                45Hz(952.6),60Hz(1905.2),75Hz(952.6), 90Hz(0.0),           ⇒合計(3810.4) ≒実効値

  • 振幅スペクトルと音階の関係

    楽器を演奏する際,A(ラ)の音を440~442Hzとなるよ うに合わせますが,通常,楽器の音は単純な正弦波では ないので,スペクトルのピークが一つでなく,たくさん あると思います. ピークの現れた周波数成分のうち,どの周波数成分が音 階を表しているのかわかりません.振幅スペクトルが最 大となる周波数成分が音階を表すものと単純に思い込ん でましたが,色々調べたところ,どうやらそうでもない ようなので,わからなくなってしまいました. また,チューナはどんな楽器の音でも音程のずれをメー タで表すことが出来ますが,これも不思議です.チュー ナはスペクトル解析を行っているのでしょうか?スペク トル解析とは全く異なるメカニズムで作られているよう な気もしますけど,全く検討がつきません. よろしくお願いします.

  • 離散フーリエ変換について

    離散フーリエ変換によって得られた値についての質問です。 多くのサイトでその値は Σ(k=0~N-1) f(k)exp(-2πkni/N) という式から求められるとあります。 離散フーリエ変換は本来、ある周期関数が、どのくらいの振幅でどのくらいの周波数の波からできているかを調べるために行うものだと思います。 しかし上記の公式から得られるスペクトル(sqrt(Re^2+Im^2))では振幅の値は得られません。振幅を得るには刻み幅Δ(関数をサンプリングした際の幅)を乗じて Σ(k=0~N-1) f(k)exp(-2πkni/N)*Δ とすれば得られることが分かりました。 最初の公式から得られるスペクトルはなにを表しているのでしょうか?またなぜ刻み幅Δを乗じることで、振幅が求まるのでしょうか? よろしくお願いします。m(__)m