SSブログ

2の基数のFFT [任意点数のFFT]

「♪FFTは知っててもぉ、それだけーじゃ困りますー♬」©JASRAC14924126。うそ。
ということでまず基本の2のベキのFFTから。

2の基数のFFT

2のベキのFFTは一番基本でこれが一番簡単。また、後から整理するChirp z変換を利用した任意基数のFFTでは、Nが2のベキのFFTを計算することに帰着させて、素直にDFTを計算するよりも計算量を減らすという方法をとっているので、Nが2のベキのFFTが効率よく計算できないとChirp z変換の効率にも影響する。

Nが2のベキの場合のFFTは「2の基数のFFT」と言われ、FFTを最初に考えたKooleyとTukeyが提案したアルゴリズムで、Kooley-Tukeyアルゴリズム(K-T型FFT)などとも言われる。

2のベキのFFTはいろいろなところで解説されているので簡単に。

基本的な考え方

さっき決めたノーテーションでのもとのDFTの定義
0905eq8b.png
0905eq9.png
であるとする。

kの偶数と奇数、nを前半と後半にわけて
0905eq10.png
これは
0905eq12.png
とおくと
0905eq13.png
となって、半分の長さNNのオーバーラインのつもり。書けない)のふたつのDFTに分解できたことになる。式がごちゃごちゃして見えるけど注意すれば右肩の乗数を書き換えているだけでそれほど難しくはない。

かけ算の回数を比べるともとのDFTがN2回なのに対して、二つにわけた場合2N2+Nに減る。さらに
0905eq15.png
であるならこれを入れ子にすればよい。入れ子にするときは式-12を計算して一つの列にしたものを入れ子の内側に渡してやればいい。Nが2のベキなら要素の数が2個になるまで繰り返すことができる。これが2の基数のFFTの考え方。

もうひとつのやり方

逆にnを偶数と奇数、kを前半と後半にわけてもよい。
0905eq16.png
こちらの場合は
0905eq18.png
とすると、
0905eq19.png
とできて、やはりふたつのDFTに分解できる。

混乱しそうだけど、こっちも同じように入れ子にすることができる。こっちの入れ子は入力配列を偶数添字と奇数添字の二つにわけてそれぞれ入れ子の内側に渡して、その結果から合成する。ややこしくて間違いそう。

ちなみに最初のnを前半と後半、kを偶数と奇数にわけるやりかたを「周波数間引き(decimation-in-frequency)」nを偶数と奇数、kを前半と後半にわけるやりかたを「時間間引き(decimation-in-time)」と呼ぶ。すぐどっちがどっちかわからなくなるけど。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立09/06献立09/07 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。