複素 ふくそ 関数 かんすう f (x ) の離散 りさん フーリエ変換 へんかん である複素 ふくそ 関数 かんすう F (t ) は以下 いか で定義 ていぎ される。
F
(
t
)
=
∑
x
=
0
N
−
1
f
(
x
)
exp
(
−
i
2
π ぱい
t
x
N
)
.
{\displaystyle F(t)=\sum _{x=0}^{N-1}f(x)\exp \left(-i{\frac {2\pi tx}{N}}\right).}
このとき、{x = 0, 1, 2, ..., N − 1} を標本 ひょうほん 点 てん と言 い う。
これを直接 ちょくせつ 計算 けいさん したときの時間 じかん 計算 けいさん 量 りょう は、ランダウの記号 きごう を用 もち いて表現 ひょうげん すると O (N 2 ) である。
高速 こうそく フーリエ変換 へんかん は、この結果 けっか を、次数 じすう N が2の累乗 るいじょう のときに O (N log N ) の計算 けいさん 量 りょう で得 え るアルゴリズムである。より一般 いっぱん 的 てき には、次数 じすう が N = ∏ ni と素因数 そいんすう 分解 ぶんかい できるとき、O (N ∑n i ) の計算 けいさん 量 りょう となる。次数 じすう が 2 の累乗 るいじょう のときが最 もっと も高速 こうそく に計算 けいさん でき、アルゴリズムも単純 たんじゅん になるので、0 詰 つ めで次数 じすう を調整 ちょうせい することもある。
高速 こうそく フーリエ変換 へんかん を使 つか って、畳 たた み込 こ み積分 せきぶん などの計算 けいさん を高速 こうそく に求 もと めることができる。これも計算 けいさん 量 りょう を O (N 2 ) から O (N log N ) まで落 お とせる。
現在 げんざい は、初期 しょき の手法 しゅほう [1] をより高速 こうそく 化 か したアルゴリズムが使用 しよう されている。
逆 ぎゃく 変換 へんかん は正 せい 変換 へんかん と同 おな じと考 かんが えて良 よ いが、指数 しすう の符号 ふごう が逆 ぎゃく であり、係数 けいすう 1/N が掛 か かる。
高速 こうそく フーリエ変換 へんかん のプログラム中 ちゅう 、どの符号 ふごう が逆転 ぎゃくてん するかを一々 いちいち 分岐 ぶんき させると、分岐 ぶんき の判定 はんてい に時間 じかん がかかり、パフォーマンスが落 お ちる。一方 いっぽう 、正 せい 変換 へんかん のプログラムと、逆 ぎゃく 変換 へんかん のプログラムを両方 りょうほう 用意 ようい しておくことも考 かんが えられるが、共通 きょうつう 部分 ぶぶん が多 おお いため、無駄 むだ が多 おお くなる。このため、複素 ふくそ 共役 きょうやく を使 つか った次 つぎ のような方法 ほうほう が考 かんが えられる。
離散 りさん フーリエ変換 へんかん を
F
(
t
)
=
∑
x
=
0
N
−
1
f
(
x
)
exp
(
−
i
2
π ぱい
t
x
N
)
{\displaystyle F(t)=\sum _{x=0}^{N-1}f(x)\exp \left(-i{\frac {2\pi tx}{N}}\right)}
で定義 ていぎ したとき、逆 ぎゃく 変換 へんかん は
f
(
x
)
=
1
N
∑
t
=
0
N
−
1
F
(
t
)
exp
(
i
2
π ぱい
t
x
N
)
=
1
N
∑
t
=
0
N
−
1
F
(
t
)
¯
exp
(
−
i
2
π ぱい
t
x
N
)
¯
{\displaystyle f(x)={\frac {1}{N}}\sum _{t=0}^{N-1}F(t)\exp \left(i{\frac {2\pi {tx}}{N}}\right)={\frac {1}{N}}{\overline {\sum _{t=0}^{N-1}{\overline {F(t)}}\exp \left(-i{\frac {2\pi tx}{N}}\right)}}}
となる。
このため、F (t ) の離散 りさん フーリエ逆 ぎゃく 変換 へんかん を求 もと めるには、
(1) 複素 ふくそ 共役 きょうやく を取 と り、F (t ) を求 もと める、
(2) F (t ) の正 せい 変換 へんかん の離散 りさん フーリエ変換 へんかん を高速 こうそく フーリエ変換 へんかん で行 おこな う、
(3) その結果 けっか の複素 ふくそ 共役 きょうやく を取 と り、N で割 わ る
とすれば良 よ く、正 せい 変換 へんかん の高速 こうそく フーリエ変換 へんかん のプログラムがあれば、逆 ぎゃく 変換 へんかん は容易 ようい に作 つく ることができる。
クーリー–テューキー型 がた アルゴリズムは、代表 だいひょう 的 てき な高速 こうそく フーリエ変換 へんかん (FFT) アルゴリズムである。
分割 ぶんかつ 統治 とうち 法 ほう を使 つか ったアルゴリズムで、N = N 1 N 2 のサイズの変換 へんかん を、より小 ちい さいサイズである N 1 , N 2 のサイズの変換 へんかん に分割 ぶんかつ していくことで高速 こうそく 化 か を図 はか っている。
最 もっと もよく知 し られたクーリー–テューキー型 がた アルゴリズムは、ステップごとに変換 へんかん のサイズをサイズ N /2 の2つの変換 へんかん に分割 ぶんかつ するので、2 の累乗 るいじょう 次数 じすう に限定 げんてい される。しかし、一般 いっぱん 的 てき には次数 じすう は 2 の累乗 るいじょう にはならないので、素因数 そいんすう が偶数 ぐうすう と奇数 きすう とで別々 べつべつ のアルゴリズムに分岐 ぶんき する。
伝統 でんとう 的 てき なFFTの処理 しょり 実装 じっそう の多 おお くは、再帰 さいき 的 てき な処理 しょり を、系統 けいとう だった再帰 さいき をしないアルゴリズムにより実現 じつげん している。
クーリー–テューキー型 がた アルゴリズムは変換 へんかん をより小 ちい さい変換 へんかん に分解 ぶんかい していくので、後述 こうじゅつ のような他 ほか の離散 りさん フーリエ係数 けいすう のアルゴリズムと任意 にんい に組 く み合 あ わせることができる。とりわけ、N ≤ 8 あたりまで分解 ぶんかい すると、固定 こてい 次数 じすう の高速 こうそく なアルゴリズムに切 き り替 か えることが多 おお い。
データ数 すう 12の離散 りさん フーリエ変換 へんかん の模 も 式 しき 図 ず 。時計 とけい を模 も した図形 ずけい は1の12乗 じょう 根 ね の一 ひと つを表 あらわ している。時計 とけい の針 はり の向 む きと色 いろ は1の12乗 じょう 根 ね の偏 へん 角 かく を表 あらわ す。この図 ず で表 あらわ される行列 ぎょうれつ をデータ列 れつ にかけることで離散 りさん フーリエ変換 へんかん が得 え られる。上 うえ 図 ず で表 あらわ されるような列 れつ の並 なら べ替 が えを行 おこな うことで、元 もと の行列 ぎょうれつ のパターンはデータ数 すう 6の離散 りさん フーリエ変換 へんかん のパターンに分解 ぶんかい できる。この繰 く り返 かえ しにより最終 さいしゅう 的 てき にはデータ数 すう 3のフーリエ変換 へんかん に帰着 きちゃく される。
データ数 すう 100の離散 りさん フーリエ変換 へんかん の模 も 式 しき 図 ず 。色 いろ は1の100乗 じょう 根 ね の偏 へん 角 かく を表 あらわ す。バタフライ演算 えんざん により元 もと の行列 ぎょうれつ のパターンは最終 さいしゅう 的 てき にデータ数 すう 5の離散 りさん フーリエ変換 へんかん のパターンに分解 ぶんかい される。
FFTのバタフライ演算 えんざん
離散 りさん フーリエ係数 けいすう は、1 の原始 げんし N 乗 の 根 ね の1つ WN = e −2π ぱい i /N を使 つか うと、次 つぎ のように表 あらわ せる。
F
(
t
)
=
∑
x
=
0
N
−
1
f
(
x
)
W
N
t
x
.
{\displaystyle F(t)=\sum _{x=0}^{N-1}f(x)W_{N}^{tx}.}
例 たと えば、N = 4 のとき、
F
(
t
)
=
X
t
{\displaystyle F(t)=X_{t}}
、
f
(
k
)
=
x
k
{\displaystyle f(k)=x_{k}}
とすれば、離散 りさん フーリエ係数 けいすう は行列 ぎょうれつ を用 もち いて表現 ひょうげん すると(W = W 4 と略記 りゃっき )
[
X
0
X
1
X
2
X
3
]
=
[
W
0
W
0
W
0
W
0
W
0
W
1
W
2
W
3
W
0
W
2
W
4
W
6
W
0
W
3
W
6
W
9
]
[
x
0
x
1
x
2
x
3
]
{\displaystyle {\begin{bmatrix}X_{0}\\X_{1}\\X_{2}\\X_{3}\end{bmatrix}}={\begin{bmatrix}W^{0}&W^{0}&W^{0}&W^{0}\\W^{0}&W^{1}&W^{2}&W^{3}\\W^{0}&W^{2}&W^{4}&W^{6}\\W^{0}&W^{3}&W^{6}&W^{9}\end{bmatrix}}{\begin{bmatrix}x_{0}\\x_{1}\\x_{2}\\x_{3}\end{bmatrix}}}
となる。入力 にゅうりょく 列 れつ xk を添字 そえじ の偶奇で分 わ けて、以下 いか のように変形 へんけい する。
[
X
0
X
1
X
2
X
3
]
=
[
W
0
W
0
W
0
W
0
W
0
W
2
W
1
W
3
W
0
W
4
W
2
W
6
W
0
W
6
W
3
W
9
]
[
x
0
x
2
x
1
x
3
]
=
[
W
0
W
0
W
0
W
0
W
0
W
0
W
0
W
2
W
1
W
0
W
1
W
2
W
0
W
0
W
2
W
0
W
2
W
0
W
0
W
2
W
3
W
0
W
3
W
2
]
[
x
0
x
2
x
1
x
3
]
{\displaystyle {\begin{aligned}{\begin{bmatrix}X_{0}\\X_{1}\\X_{2}\\X_{3}\end{bmatrix}}&={\begin{bmatrix}W^{0}&W^{0}&W^{0}&W^{0}\\W^{0}&W^{2}&W^{1}&W^{3}\\W^{0}&W^{4}&W^{2}&W^{6}\\W^{0}&W^{6}&W^{3}&W^{9}\end{bmatrix}}{\begin{bmatrix}x_{0}\\x_{2}\\x_{1}\\x_{3}\end{bmatrix}}\\&={\begin{bmatrix}W^{0}&W^{0}&W^{0}W^{0}&W^{0}W^{0}\\W^{0}&W^{2}&W^{1}W^{0}&W^{1}W^{2}\\W^{0}&W^{0}&W^{2}W^{0}&W^{2}W^{0}\\W^{0}&W^{2}&W^{3}W^{0}&W^{3}W^{2}\end{bmatrix}}{\begin{bmatrix}x_{0}\\x_{2}\\x_{1}\\x_{3}\end{bmatrix}}\end{aligned}}}
(
∵
W
k
+
N
=
W
k
{\displaystyle \because W^{k+N}=W^{k}}
)
すると、サイズ 2 のFFTの演算 えんざん 結果 けっか を用 もち いて表現 ひょうげん でき、サイズの分割 ぶんかつ ができる。
[
X
0
X
1
X
2
X
3
]
=
[
1
0
W
0
0
0
1
0
W
1
1
0
W
2
0
0
1
0
W
3
]
[
W
2
0
W
2
0
0
0
W
2
0
W
2
1
0
0
0
0
W
2
0
W
2
0
0
0
W
2
0
W
2
1
]
[
x
0
x
2
x
1
x
3
]
{\displaystyle {\begin{bmatrix}X_{0}\\X_{1}\\X_{2}\\X_{3}\end{bmatrix}}={\begin{bmatrix}1&0&W^{0}&0\\0&1&0&W^{1}\\1&0&W^{2}&0\\0&1&0&W^{3}\end{bmatrix}}\,{\begin{bmatrix}W_{2}^{0}&W_{2}^{0}&0&0\\W_{2}^{0}&W_{2}^{1}&0&0\\0&0&W_{2}^{0}&W_{2}^{0}\\0&0&W_{2}^{0}&W_{2}^{1}\end{bmatrix}}\,{\begin{bmatrix}x_{0}\\x_{2}\\x_{1}\\x_{3}\end{bmatrix}}}
また、この分割 ぶんかつ 手順 てじゅん を図 ず にすると蝶 ちょう のような図 ず になることから、バタフライ演算 えんざん とも呼 よ ばれる。
バタフライ演算 えんざん は、計算 けいさん 機上 きじょう ではビット反転 はんてん で実現 じつげん される。DSP の中 なか には、このバタフライ演算 えんざん のプログラムを容易 ようい にするため、ビット反転 はんてん アドレッシング を備 そな えているものがある。
FFTの原理 げんり は、N = PQ として、N 次 じ 離散 りさん フーリエ変換 へんかん を、P 次 じ 離散 りさん フーリエ変換 へんかん とQ 次 じ 離散 りさん フーリエ変換 へんかん に分解 ぶんかい することである[2] 。
N 次 じ 離散 りさん フーリエ変換 へんかん :
F
(
n
)
=
∑
k
=
0
N
−
1
f
(
k
)
exp
(
−
2
π ぱい
i
n
k
N
)
{\displaystyle F(n)=\sum _{k=0}^{N-1}f(k)\exp \left(-2\pi i{\frac {nk}{N}}\right)}
を、n = 0, 1, ..., N − 1 について計算 けいさん することを考 かんが える。n , k を次 つぎ のように書 か き換 か える。ただし 0 ≤ n ≤ N − 1 また 0 ≤ k ≤ N − 1 である。
n
=
s
Q
+
r
0
≤
s
≤
P
−
1
,
0
≤
r
≤
Q
−
1
k
=
q
P
+
p
0
≤
p
≤
P
−
1
,
0
≤
q
≤
Q
−
1
{\displaystyle {\begin{aligned}n&=sQ+r\qquad 0\leq s\leq P-1,\,0\leq r\leq Q-1\\k&=qP+p\qquad 0\leq p\leq P-1,\;0\leq q\leq Q-1\end{aligned}}}
すると
F
(
n
)
=
F
(
s
Q
+
r
)
=
∑
p
=
0
P
−
1
∑
q
=
0
Q
−
1
f
(
q
P
+
p
)
exp
(
−
2
π ぱい
i
(
q
P
+
p
)
(
s
Q
+
r
)
P
Q
)
=
∑
p
=
0
P
−
1
∑
q
=
0
Q
−
1
f
(
q
P
+
p
)
exp
(
−
2
π ぱい
i
(
r
q
Q
+
s
p
P
+
p
r
P
Q
)
)
=
∑
p
=
0
P
−
1
[
exp
(
−
2
π ぱい
i
(
s
p
P
+
p
r
P
Q
)
)
∑
q
=
0
Q
−
1
f
(
q
P
+
p
)
exp
(
−
2
π ぱい
i
r
q
Q
)
]
{\displaystyle {\begin{aligned}F(n)&=F(sQ+r)=\sum _{p=0}^{P-1}\sum _{q=0}^{Q-1}f(qP+p)\exp \left(-2\pi i{\frac {(qP+p)(sQ+r)}{PQ}}\right)\\&=\sum _{p=0}^{P-1}\sum _{q=0}^{Q-1}f(qP+p)\exp \left(-2\pi i\left({\frac {rq}{Q}}+{\frac {sp}{P}}+{\frac {pr}{PQ}}\right)\right)\\&=\sum _{p=0}^{P-1}\left[\exp \left(-2\pi i\left({\frac {sp}{P}}+{\frac {pr}{PQ}}\right)\right)\sum _{q=0}^{Q-1}f(qP+p)\exp \left(-2\pi i{\frac {rq}{Q}}\right)\right]\end{aligned}}}
ここで、
f
1
(
p
,
r
)
=
exp
(
−
2
π ぱい
i
p
r
P
Q
)
∑
q
=
0
Q
−
1
f
(
q
P
+
p
)
exp
(
−
2
π ぱい
i
r
q
Q
)
{\displaystyle f_{1}(p,r)=\exp \left(-2\pi i{\frac {pr}{PQ}}\right)\sum _{q=0}^{Q-1}f(qP+p)\exp \left(-2\pi i{\frac {rq}{Q}}\right)}
と置 お くと、
F
(
n
)
=
F
(
s
Q
+
r
)
=
∑
p
=
0
P
−
1
exp
(
−
2
π ぱい
i
s
p
P
)
f
1
(
p
,
r
)
{\displaystyle F(n)=F(sQ+r)=\sum _{p=0}^{P-1}\exp \left(-2\pi i{\frac {sp}{P}}\right)f_{1}(p,r)}
となる。即 すなわ ち、F (n ) = F (sQ + r ) の計算 けいさん は、次 つぎ の2ステップになる。
ステップ1
p = 0, 1, ..., P − 1 と r = 0, 1, ..., Q − 1 について
f
1
(
p
,
r
)
=
exp
(
−
2
π ぱい
i
p
r
P
Q
)
∑
q
=
0
Q
−
1
f
(
q
P
+
p
)
exp
(
−
2
π ぱい
i
r
q
Q
)
{\displaystyle f_{1}(p,r)=\exp \left(-2\pi i{\frac {pr}{PQ}}\right)\sum _{q=0}^{Q-1}f(qP+p)\exp \left(-2\pi i{\frac {rq}{Q}}\right)}
を計算 けいさん する。これは、Q 次 つぎ の離散 りさん フーリエ変換 へんかん
∑
q
=
0
Q
−
1
f
(
q
P
+
p
)
exp
(
−
2
π ぱい
i
r
q
Q
)
{\displaystyle \sum _{q=0}^{Q-1}f(qP+p)\exp \left(-2\pi i{\frac {rq}{Q}}\right)}
の実行 じっこう と、回転 かいてん 因子 いんし exp(−2π ぱい ipr /PQ ) の掛 か け算 ざん を、全 すべ ての p , r の組 くみ (PQ = N 通 とお り)に対 たい して行 おこな うことと見 み ることができる。
ステップ2
s = 0, 1, ..., P − 1 と r = 0, 1, ..., Q − 1 について
F
(
s
Q
+
r
)
=
∑
p
=
0
P
−
1
exp
(
−
2
π ぱい
i
s
p
P
)
f
1
(
p
,
r
)
{\displaystyle F(sQ+r)=\sum _{p=0}^{P-1}\exp \left(-2\pi i{\frac {sp}{P}}\right)f_{1}(p,r)}
を計算 けいさん する。ここで、右辺 うへん は r を固定 こてい すれば、P 次 つぎ の離散 りさん フーリエ変換 へんかん である。
ステップ1、2は、N = PQ 次 つぎ の離散 りさん フーリエ変換 へんかん を、Q 次 つぎ の離散 りさん フーリエ変換 へんかん と回転 かいてん 因子 いんし の掛 か け算 ざん の実行 じっこう により、Q 組 くみ (r = 0, 1, ..., Q − 1 ) の P 次 じ 離散 りさん フーリエ変換 へんかん に分解 ぶんかい したと見 み ることができる。
N 次 じ 離散 りさん フーリエ変換 へんかん の問題 もんだい ⇒ Q 次 じ 離散 りさん フーリエ変換 へんかん の実施 じっし ⇒ N /Q 次 じ 離散 りさん フーリエ変換 へんかん の問題 もんだい に帰着 きちゃく
特 とく に、Q が2 または4 の場合 ばあい は、Q 次 じ 離散 りさん フーリエ変換 へんかん は非常 ひじょう に簡単 かんたん な計算 けいさん になる。
Q = 2 の場合 ばあい は、exp(−2π ぱい irq /Q ) は 1 か −1 なので、Q 次 じ 離散 りさん フーリエ変換 へんかん は符号 ふごう の逆転 ぎゃくてん と足 た し算 ざん だけで計算 けいさん できる。
Q = 4 の場合 ばあい は、exp(−2π ぱい irq /Q ) は 1 , −1 , i , −i のいずれかなので、Q 次 じ 離散 りさん フーリエ変換 へんかん の計算 けいさん は、符号 ふごう の逆転 ぎゃくてん 、実 み 部 ぶ 虚 きょ 部 ぶ の交換 こうかん と足 た し算 ざん だけで計算 けいさん できる。
Q = 2 かQ = 4 の場合 ばあい のこの部分 ぶぶん のQ 次 じ 離散 りさん フーリエ変換 へんかん のことを、バタフライ演算 えんざん と言 い う。
また、N = Qk (P = Q k − 1 ) の場合 ばあい には、上 うえ を繰 く り返 かえ すことができ、Q 次 つぎ の離散 りさん フーリエ変換 へんかん と回転 かいてん 因子 いんし の掛 か け算 ざん を繰 く り返 かえ すことだけで次数 じすう を下 さ げられ、最終 さいしゅう 的 てき に1次 じ 離散 りさん フーリエ変換 へんかん (何 なに もしないことと同 おな じ)にまで下 さ げると、F (t ) を求 もと めることができる。
このため、2 の累乗 るいじょう あるいは4 の累乗 るいじょう 次 じ の離散 りさん フーリエ変換 へんかん は、両方 りょうほう の性質 せいしつ を利用 りよう でき、非常 ひじょう に簡単 かんたん に計算 けいさん できる。
また、Q = 2 かQ = 4 の場合 ばあい において、計算 けいさん を終了 しゅうりょう するまでに何 なん 回 かい の「掛 か け算 ざん 」が必要 ひつよう かを考 かんが える。符号 ふごう の逆転 ぎゃくてん 、実 み 部 ぶ 虚 きょ 部 ぶ の交換 こうかん は「掛 か け算 ざん 」として数 かぞ えなければ、回転 かいてん 因子 いんし の掛 か け算 ざん のみが「掛 か け算 ざん 」である。N = Qk の次数 じすう を1落 お とすためにN 回 かい の「掛 か け算 ざん 」が必要 ひつよう であり、次数 じすう をk から0 に落 お とすにはそれをk 回 かい 繰 く り返 かえ す必要 ひつよう があるため、「掛 か け算 ざん 」の数 かず は Nk = N logQ N となる。高速 こうそく フーリエ変換 へんかん の計算 けいさん において時間 じかん がかかるのは「掛 か け算 ざん 」の部分 ぶぶん であるため、これが「高速 こうそく フーリエ変換 へんかん では計算 けいさん 速度 そくど は O (N log N ) になる」ことの根拠 こんきょ になっている。
上記 じょうき の説明 せつめい で、
N
=
Q
k
(
P
=
Q
k
−
1
)
{\displaystyle N=Q^{k}(P=Q^{k-1})}
の場合 ばあい 、N = Qk 個 こ のデータ
f
(
q
Q
k
−
1
+
p
)
{\displaystyle f(qQ^{k-1}+p)}
から、N = Qk 個 こ の計算 けいさん 結果 けっか
f
1
(
p
,
r
)
=
exp
(
−
2
π ぱい
i
p
r
Q
k
)
∑
q
=
0
Q
−
1
f
(
q
Q
k
−
1
+
p
)
exp
(
−
2
π ぱい
i
r
q
Q
)
{\displaystyle f_{1}(p,r)=\exp \left(-2\pi i{\frac {pr}{Q^{k}}}\right)\sum _{q=0}^{Q-1}f(qQ^{k-1}+p)\exp \left(-2\pi i{\frac {rq}{Q}}\right)}
を計算 けいさん する場合 ばあい に、メモリの節約 せつやく のため、0 ≤ q ≤ Q − 1 と 0 ≤ r ≤ Q − 1 を利用 りよう し、計算 けいさん 結果 けっか
f
1
(
p
,
r
)
{\displaystyle f_{1}(p,r)}
を元 もと データ
f
(
r
Q
k
−
1
+
p
)
{\displaystyle f(rQ^{k-1}+p)}
のあった場所 ばしょ に格納 かくのう することが多 おお い。これが次 つぎ の次数 じすう Q k − 1 でも繰 く り返 かえ されるため、
p
=
q
2
Q
k
−
2
+
p
2
{\displaystyle p=q_{2}Q^{k-2}+p_{2}}
とすると、次 つぎ の次数 じすう の計算 けいさん 結果 けっか
f
2
(
p
2
,
q
2
,
q
)
{\displaystyle f_{2}(p_{2},q_{2},q)}
は
f
(
q
Q
k
−
1
+
q
2
Q
k
−
2
+
p
2
)
{\displaystyle f(qQ^{k-1}+q_{2}Q^{k-2}+p_{2})}
のあった場所 ばしょ に格納 かくのう される。繰 く り返 かえ せば、
t
=
q
1
Q
k
−
1
+
q
2
Q
k
−
2
+
⋯
+
q
k
{\displaystyle t=q_{1}Q^{k-1}+q_{2}Q^{k-2}+\cdots +q_{k}}
とすると、計算 けいさん 結果 けっか
f
k
(
p
k
,
q
k
,
q
k
−
1
,
…
,
q
2
,
q
1
)
{\displaystyle f_{k}(p_{k},q_{k},q_{k-1},\dots ,q_{2},q_{1})}
は
f
(
q
1
Q
k
−
1
+
q
2
Q
k
−
2
+
⋯
+
q
k
−
1
Q
+
p
k
)
{\displaystyle f(q_{1}Q^{k-1}+q_{2}Q^{k-2}+\cdots +q_{k-1}Q+p_{k})}
のあった場所 ばしょ に格納 かくのう される。
一方 いっぽう 、
F
(
s
Q
+
r
)
=
∑
p
=
0
Q
k
−
1
−
1
exp
(
−
2
π ぱい
i
s
p
Q
k
−
1
)
f
1
(
p
,
r
)
{\displaystyle F(sQ+r)=\sum _{p=0}^{Q^{k-1}-1}\exp \left(-2\pi i{\frac {sp}{Q^{k-1}}}\right)f_{1}(p,r)}
を、r を固定 こてい し s を変数 へんすう とした Q k − 1 次 じ 離散 りさん フーリエ変換 へんかん と見 み なして、
s
=
s
2
Q
+
r
2
{\displaystyle s=s_{2}Q+r_{2}}
とすると、
F
(
s
2
Q
2
+
r
2
Q
+
r
)
=
∑
p
2
=
0
Q
k
−
2
−
1
exp
(
−
2
π ぱい
i
s
2
p
2
Q
k
−
2
)
f
2
(
p
2
,
r
2
,
r
)
{\displaystyle F(s_{2}Q^{2}+r_{2}Q+r)=\sum _{p_{2}=0}^{Q^{k-2}-1}\exp \left(-2\pi i{\frac {s_{2}p_{2}}{Q^{k-2}}}\right)f_{2}(p_{2},r_{2},r)}
となる。繰 く り替 か えせば、
F
(
s
k
Q
k
+
r
k
Q
k
−
1
+
⋯
+
r
2
Q
+
r
1
)
=
∑
p
k
=
0
Q
k
−
k
−
1
exp
(
−
2
π ぱい
i
s
k
p
k
Q
k
−
k
)
f
k
(
p
k
,
r
k
,
r
k
−
1
,
…
,
r
2
,
r
1
)
{\displaystyle F(s_{k}Q^{k}+r_{k}Q^{k-1}+\cdots +r_{2}Q+r_{1})=\sum _{p_{k}=0}^{Q^{k-k}-1}\exp \left(-2\pi i{\frac {s_{k}p_{k}}{Q^{k-k}}}\right)f_{k}(p_{k},r_{k},r_{k-1},\dots ,r_{2},r_{1})}
となるが、左辺 さへん について
s
k
Q
k
+
r
k
Q
k
−
1
+
⋯
+
r
2
Q
+
r
1
<
Q
k
{\displaystyle s_{k}Q^{k}+r_{k}Q^{k-1}+\cdots +r_{2}Q+r_{1}<Q^{k}}
より sk = 0 , また右辺 うへん について
Q
k
−
k
−
1
=
0
{\displaystyle Q^{k-k}-1=0}
より pk = 0 。このため、
F
(
r
k
Q
k
−
1
+
⋯
+
r
2
Q
+
r
1
)
=
f
k
(
0
,
r
k
,
r
k
−
1
,
…
,
r
2
,
r
1
)
.
{\displaystyle F(r_{k}Q^{k-1}+\cdots +r_{2}Q+r_{1})=f_{k}(0,r_{k},r_{k-1},\dots ,r_{2},r_{1}).}
これは
f
(
r
1
Q
k
−
1
+
r
2
Q
k
−
2
+
⋯
+
r
k
−
1
Q
+
r
k
)
{\displaystyle f(r_{1}Q^{k-1}+r_{2}Q^{k-2}+\cdots +r_{k-1}Q+r_{k})}
のあった場所 ばしょ に格納 かくのう されている。
このように、求 もと める解 かい
F
(
r
k
Q
k
−
1
+
⋯
+
r
2
Q
+
r
1
)
{\displaystyle F(r_{k}Q^{k-1}+\cdots +r_{2}Q+r_{1})}
が
f
(
r
1
Q
k
−
1
+
r
2
Q
k
−
2
+
⋯
+
r
k
−
1
Q
+
r
k
)
{\displaystyle f(r_{1}Q^{k-1}+r_{2}Q^{k-2}+\cdots +r_{k-1}Q+r_{k})}
のあった場所 ばしょ に格納 かくのう されていることを、ビット反転 はんてん と言 い う。これは、Q 進 すすむ 法 ほう で表示 ひょうじ した場合 ばあい 、
r
k
Q
k
−
1
+
⋯
+
r
2
Q
+
r
1
{\displaystyle r_{k}Q^{k-1}+\cdots +r_{2}Q+r_{1}}
は
(
r
k
r
k
−
1
…
r
2
r
1
)
Q
{\displaystyle (r_{k}r_{k-1}\dots r_{2}r_{1})_{Q}}
となるのに対 たい し、
r
1
Q
k
−
1
+
r
2
Q
k
−
2
+
⋯
+
r
k
−
1
+
r
k
{\displaystyle r_{1}Q^{k-1}+r_{2}Q^{k-2}+\cdots +r_{k-1}+r_{k}}
は逆 ぎゃく から読 よ んだ
(
r
1
r
2
…
r
k
−
1
r
k
)
Q
{\displaystyle (r_{1}r_{2}\dots r_{k-1}r_{k})_{Q}}
となるためである。
以下 いか は、高速 こうそく フーリエ変換 へんかん のプログラムを Q = 4 の場合 ばあい にMicrosoft Visual Basic の文法 ぶんぽう を用 もち いて書 か いた例 れい である。
Const pi As Double = 3.14159265358979 '円周 えんしゅう 率 りつ
Dim Ndeg As Long '4^deg
Dim Pdeg As Long '4^(deg-i)
Dim CR () As Double '入力 にゅうりょく 実数 じっすう 部 ぶ
Dim CI () As Double '入力 にゅうりょく 虚数 きょすう 部 ぶ
Dim FR () As Double '出力 しゅつりょく 実数 じっすう 部 ぶ
Dim FI () As Double '出力 しゅつりょく 虚数 きょすう 部 ぶ
deg = 5 '任意 にんい に設定 せってい 。5ならN=4^5=1024で計算 けいさん
Ndeg = 4 ^ deg
ReDim CR ( Ndeg - 1 ) As Double '入力 にゅうりょく 実数 じっすう 部 ぶ
ReDim CI ( Ndeg - 1 ) As Double '入力 にゅうりょく 虚数 きょすう 部 ぶ
ReDim FR ( Ndeg - 1 ) As Double '出力 しゅつりょく 実数 じっすう 部 ぶ
ReDim FI ( Ndeg - 1 ) As Double '出力 しゅつりょく 虚数 きょすう 部 ぶ
'ここで、変換 へんかん される関数 かんすう の実 み 部 ぶ をCR(0)からCR(Ndeg-1)に、虚 きょ 部 ぶ をCI(0)からCI(Ndeg-1)に入力 にゅうりょく しておくこと
'フーリエ変換 へんかん
For i = 1 To deg
Pdeg = 4 ^ ( deg - i )
For j0 = 0 To 4 ^ ( i - 1 ) - 1
For j1 = 0 To Pdeg - 1
j = j1 + j0 * Pdeg * 4
'バタフライ演算 えんざん (Q=4)
w1 = CR ( j ) + CR ( j + Pdeg ) + CR ( j + 2 * Pdeg ) + CR ( j + 3 * Pdeg )
w2 = CI ( j ) + CI ( j + Pdeg ) + CI ( j + 2 * Pdeg ) + CI ( j + 3 * Pdeg )
w3 = CR ( j ) + CI ( j + Pdeg ) - CR ( j + 2 * Pdeg ) - CI ( j + 3 * Pdeg )
w4 = CI ( j ) - CR ( j + Pdeg ) - CI ( j + 2 * Pdeg ) + CR ( j + 3 * Pdeg )
w5 = CR ( j ) - CR ( j + Pdeg ) + CR ( j + 2 * Pdeg ) - CR ( j + 3 * Pdeg )
w6 = CI ( j ) - CI ( j + Pdeg ) + CI ( j + 2 * Pdeg ) - CI ( j + 3 * Pdeg )
w7 = CR ( j ) - CI ( j + Pdeg ) - CR ( j + 2 * Pdeg ) + CI ( j + 3 * Pdeg )
w8 = CI ( j ) + CR ( j + Pdeg ) - CI ( j + 2 * Pdeg ) - CR ( j + 3 * Pdeg )
CR ( j ) = w1
CI ( j ) = w2
CR ( j + Pdeg ) = w3
CI ( j + Pdeg ) = w4
CR ( j + 2 * Pdeg ) = w5
CI ( j + 2 * Pdeg ) = w6
CR ( j + 3 * Pdeg ) = w7
CI ( j + 3 * Pdeg ) = w8
'回転 かいてん 因子 いんし
For k = 0 To 3
w1 = Cos ( 2 * pi * j * k / Pdeg / 4 )
w2 = - Sin ( 2 * pi * j * k / Pdeg / 4 )
w3 = CR ( j + k * Pdeg ) * w1 - CI ( j + k * Pdeg ) * w2
w4 = CR ( j + k * Pdeg ) * w2 + CI ( j + k * Pdeg ) * w1
CR ( j + k * Pdeg ) = w3
CI ( j + k * Pdeg ) = w4
Next k
Next j1
Next j0
Next i
'ビット反転 はんてん
For i = 0 To Ndeg - 1
k = i
k1 = 0
For j = 1 To deg
k1 = k1 + ( k - Int ( k / 4 ) * 4 ) * 4 ^ ( deg - j )
k = Int ( k / 4 )
Next j
FR ( i ) = CR ( k1 )
FI ( i ) = CI ( k1 )
Next i
この例 れい では、最深 さいしん 部 ぶ (For k
、Next k
の間 あいだ の部分 ぶぶん )の繰 く り返 かえ し回数 かいすう が Ndeg
log4 Ndeg
となっている。