FFT (Chirp z-変換アルゴリズム)
長さが素数の場合はこの間書いたので,今回はどんな長さの場合にも適用できる FFT のアルゴリズムをまとめておく.これは Chirp z-変換アルゴリズムあるいは Bluestein の FFT と呼ばれるアルゴリズムで,Rader の FFT と同じく畳み込み演算を用いるが,使用方法が異なる.
準備
のスペクトルをとする.つまり
変形
回転子の指数を次のように変形する.
これを元の式に代入してやると,
となる.ここで,を次のように定める.
このを使うと,スペクトルの計算式が畳み込みの形に置き換えられることがわかる.
あとはこの畳み込み演算を FFT で行えばよい.
FFT による畳み込み演算
使用する FFT の長さ
FFT で畳み込み演算を行う場合,一般には巡回畳み込みになってしまう.しかし,ここでは線形畳み込みを行いたいので,FFT の長さ に条件が付く.畳み込み演算を行う 2 つの数列の長さをそれぞれ とすれば, であれば線形畳み込みを行うことができる.
今回の場合,なので,の条件は である.この条件を満たしていれば はどんな値でも構わないが,Bluestein の FFT では に 2 のべき乗の値を選ぶことが多い.これは長さが 2 のべき乗の FFT は,Cooley-Tukey の手法などを用いれば簡単に構成でき,であることが保証されているためである.
パディング
はともに長さであるため,長さの FFT を使用するには,パディング(いわゆるゼロ・パディング)を行い,長さをにしなければならない.
についてはあまり問題はない.新しい数列をとすれば,単純に
とすればよい.
ところが,の場合は畳み込みの式の中でが負になることがある.そのため,畳み込み演算を考慮して,新しい数列を次のように定める.
畳み込み
FFTを用い,これら 2 つの数列から,それぞれスペクトルを得る.それぞれ掛け合わせたを要素とする数列から IFFT でを得る.これでとの畳み込み演算を行ったことになる.
残った係数をかける
最終的なスペクトルは,にを掛けることで得られる.
まとめ
Chirp z-変換アルゴリズムによる FFT (長さ ) の計算方法(Bluestein の FFT)
- 新しく数列を 2 つ考える.
- を満たすを定める.多くの場合,2 のべき乗値.
- を長さになるようパディング.のパディングには注意が必要.
- 長さの FFT および IFFT でパディング済みの 2 つの数列の線形畳み込みを計算し,その結果をとする.