フーリエ変換は信号処理に欠かせない。
フリーの高速フーリエ変換としてfftwが有名である。しかしその係数についてパッと検索しただけではわからなかったので自分で調べてみた。
Mathematicaには係数を明示的に定義できる。
In[1]:= data = {1, 0, -1, 0, 2, 0, -2}
In[2]:= Fourier[data, FourierParameters -> {1,-1}] // TableForm
Out[2]=
0. +0. I
-1.8264+0.279032 I
3.59299 -3.9474 I
1.73341 +0.300257 I
1.73341 -0.300257 I
3.59299 +3.9474 I
-1.8264-0.279032 I
他方、Rでは
library("fftw", lib.loc="/Library/Frameworks/R.framework/Versions/3.3/Resources/library")
data=c(1, 0, -1, 0, 2, 0, -2);
fft(data)
[1] 0.000000+0.000000i -1.826396+0.279032i 3.592990-3.947403i
[4] 1.733406+0.300257i 1.733406-0.300257i 3.592990+3.947403i
[7] -1.826396-0.279032i
と同じになりました。これはMathematicaの説明ではデータ解析で全体の係数は1、Expの係数は-2πですね。ここでもう一つわかるのは、第1項は同じDC成分です。
フリーの高速フーリエ変換としてfftwが有名である。しかしその係数についてパッと検索しただけではわからなかったので自分で調べてみた。
Mathematicaには係数を明示的に定義できる。
FourierParameters->{a,b}の設定で,Fourierにより計算される離散フーリエ変換は 1/n^((1-a)/2)Underoverscript[\[Sum], r=1, n]Subscript[u, r] e^(2\[Pi] ib(r-1)(s-1)/n)となる. »
よく使われる{a,b}の選択として,{0,1}(デフォルト),{-1,1}(データ解析),{1,-1}(信号処理)がある.
In[1]:= data = {1, 0, -1, 0, 2, 0, -2}
In[2]:= Fourier[data, FourierParameters -> {1,-1}] // TableForm
Out[2]=
0. +0. I
-1.8264+0.279032 I
3.59299 -3.9474 I
1.73341 +0.300257 I
1.73341 -0.300257 I
3.59299 +3.9474 I
-1.8264-0.279032 I
他方、Rでは
library("fftw", lib.loc="/Library/Frameworks/R.framework/Versions/3.3/Resources/library")
data=c(1, 0, -1, 0, 2, 0, -2);
fft(data)
[1] 0.000000+0.000000i -1.826396+0.279032i 3.592990-3.947403i
[4] 1.733406+0.300257i 1.733406-0.300257i 3.592990+3.947403i
[7] -1.826396-0.279032i
と同じになりました。これはMathematicaの説明ではデータ解析で全体の係数は1、Expの係数は-2πですね。ここでもう一つわかるのは、第1項は同じDC成分です。
コメント