Fast Fourier Transform in Golang.
高速フーリエ変換/逆変換のライブラリです。
go.mod ファイルに次の行を追記してください。
require github.com/takatoh/fft v1.3.1
フーリエ変換には fft.FFT 関数を使います。
y := fft.FFT(x, n)x がデータ(複素数)、n がデータ数。n は 2 のべき乗である必要があります。
逆変換には fft.IFFT 関数を使います。
z := fft.IFFT(y, n)フーリエ変換による各成分に対応する周波数を得るには fft.FFTFreq 関数または fft.RFFTFreq 関数を使います。n はデータ数(2のべき乗)、dt は時間間隔です。
f := fft.FFTFreq(n, dt)
rf := fft.RFFTFreq(n, dt)fft.FFTFreq は n 個、fft.RFFTFreq は n/2+1 個の周波数を返します。
fft.FFTFreq では、ナイキスト周波数 f[n/2] が負値です。この振る舞いは Python の numpy ライブラリにある fft.fftfreq() に倣いました。何故このようになっているのかはわかりません。
fft.RFFTFreq では、ナイキスト周波数 rf[n/2] が正値です。
fft.FFT や fft.IFFT に与えるデータは、2のべき乗個の複素数である必要があります。
fft.PowerOf2 関数は、引数 n よりも大きく、かつ最も小さい2のべき乗の数を返します。
nn := fft.PowerOf2(n)fft.MakeComplexData 関数は、実数のデータを複素数に変換し、かつ2のべき乗個に拡張します。
complexData, nn := fft.MakeComplexData(realData)MIT License