質問: ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値に ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので σ(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(0)=f(2)=0,f(1)=-2i,f(3)=2iとなり、2つの成分にスペクトルが現れる。」 >というのは、標本化定理を満たさなかったためにエリアシングが生じた、 >という理解でよろしいのでしょうか。 f(1)およびf(3)すなわち、5hzと15hzにスペクトルが現れていますが、 サンプリング周波数の半分10hzに対して、振幅スペクトルが対称に 現れていることの一例です。 つまり、f(3)の分はaliasing周波数成分です。 >私の例の場合ですと、信号周波数5[hz]に対してサンプリング周波数20[hz]ですので、 >元信号復元のために必要なサンプリング周波数は満たしています。 >この場合でも、説明して下さったような現象(?)が起こるのでしょうか? >(この状態でフーリエ変換を行った場合、 >サンプリング周波数20[hz]の半分、つまり10[hz]を中心にして >左右対称なフーリエスペクトルが生成されると考えられます。) 信号周波数がサンプリング周波数の半分よりも小さく(※)ても、aliasing周波数 成分は発生し、左右対称な振幅スペクトルとなります。 ただしご指摘のように条件(※)を満たしていますので、alias「歪み」が生ずる ことはありません。したがって、信号の復元はサンプリング周波数の半分以下の 成分だけからも可能ですが、その場合には振幅スペクトルを2倍にする必要があ ります(2倍が不要なのは、直流成分および、サンプリング周波数のちょうど半分の 周波数を持つ成分の場合です)。 以下は参考になると思います。 http://www.cqpub.co.jp/hanbai/books/30/30901/30901_2syo.pdf (特に35,36ページ目)