質問: フーリエスペクトルの振幅について ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの 振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので ς(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(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になっています。