2次元高速フーリエ変換のテスト(矩形関数)

0\leq x, y \leq Lの範囲で定義される2変数実関数 f(x, y)を正規直交系を成す三角関数の和で表される指数関数を用いて、次の通りに展開することを考えます。

f(x, y)=\sum\limits_{n_x=0}^{N-1}\sum\limits_{n_y=0}^{N-1} c_{n_x,n_y}\exp\left (i\,\frac { 2\pi n_x }{ L }\, x\right)\,\exp\left (i\,\frac { 2\pi n_y }{ L }\, y\right)

展開係数c_{n_x,n_y}は一般的に複素数です。 展開係数c_{n_x,n_y}は指数関数の完全性から、元の関数から一意に

c_{n_x,n_y}= \frac{1}{N}\,\sum\limits_{m_x=0}^{N-1} \sum\limits_{m_y=0}^{N-1} f(x_m, y_m) \exp\left (-i\,\frac { 2\pi n_x }{ L }\, x_m\right)\, \exp\left (-i\,\frac { 2\pi n_y }{ L }\, y_m\right)

と与えられます。これはフーリエ級数展開と呼ばれ、もとの関数が空間分布であれば波数成分が、時間分布であれば周波数成分を取得することができます。 この2次元の展開係数の計算は「高速フーリエ変換のテスト(矩形関数)」で示した1次元FFTを2段階で適用することで行うことができます。上記の式を次のとおり変形します。

c_{n_x,n_y}= \frac{1}{N}\,\sum\limits_{m_x=0}^{N-1} \exp\left (-i\,\frac { 2\pi n_x }{ L }\, x_m\right)  \left[ \sum\limits_{m_y=0}^{N-1} f(x_m, y_m) \exp\left (-i\,\frac { 2\pi n_y }{ L }\, y_m\right) \right]
c_{n_x,n_y}= \frac{1}{N}\,\sum\limits_{m_x=0}^{N-1} \exp\left (-i\,\frac { 2\pi n_x }{ L }\, x_m\right)\, c_{n_y}(x_m)

このように変更することで、上記のc_{n_y}(x_m)を1次元FFTで計算することができ、さらにその結果も1次元FFTで計算することができます。

高速フーリエ変換の例:矩形関数

0\leq x, y \leq Lの範囲で定義される実関数の例として矩形関数

f(x,y)= \left\{ \matrix{ 1 & \cr 0 & }  \right. \frac{L}{2}-\frac{w}{2}\leq x\leq\frac{L}{2}+\frac{w}{2}かつ\frac{L}{2}-\frac{w}{2}\leq y\leq\frac{L}{2}+\frac{w}{2}
上記以外

の展開係数を高速フーリエ変換を用いて計算します。wは矩形の幅を表します。 以下の結果はN=128の場合(2のべきである必要があります)です。

展開係数

逆フーリエ変換

上記で計算した展開係数を用いて逆フーリエ変換を行って元の関数を再現した結果です。元の矩形関数をほぼ再現していることがわかります。