Main Content

2 次元フーリエ変換

関数 fft2 は、2 次元データを周波数空間に変換します。たとえば、2 次元の光マスクを変換して回折パターンを明らかにすることができます。

2 次元フーリエ変換

次の式は、m 行 n 列の行列 X の離散フーリエ変換 Y を定義します。

Yp+1,q+1=j=0m1k=0n1ωmjpωnkqXj+1,k+1

ωm と ωn は、次の方程式によって定義される 1 の複素根です。

ωm=e2πi/mωn=e2πi/n

i は虚数単位、p と j は 0 から m–1 までのインデックス、q と k は 0 から n–1 までのインデックスです。X と Y のインデックスは、MATLAB® の行列インデックスを反映して、この式では 1 シフトしています。

X の 2 次元フーリエ変換を計算することは、まず X の各列の 1 次元変換を計算してから、結果の各行の 1 次元変換を行うことと等価です。つまり、コマンド fft2(X)Y = fft(fft(X).').' と等価です。

2 次元回折パターン

光学では、フーリエ変換を使用して、小さな開口部をもつ光マスク上への平面波の入射によって生成される回折パターンを記述できます [1]。この例では、光マスク上で関数 fft2 を使用して回折パターンを計算します。

小さな円形の開口部をもつ光マスクを定義する logical 配列を作成します。

n = 2^10;                 % size of mask
M = zeros(n);
I = 1:n; 
x = I-n/2;                % mask x-coordinates 
y = n/2-I;                % mask y-coordinates
[X,Y] = meshgrid(x,y);    % create 2-D mask grid
R = 10;                   % aperture radius
A = (X.^2 + Y.^2 <= R^2); % circular aperture of radius R
M(A) = 1;                 % set mask elements inside aperture to 1
imagesc(M)                % plot mask
axis image

fft2 を使用してマスクの 2 次元フーリエ変換を計算し、関数fftshiftを使用して、ゼロ周波数成分が中央に来るように出力を並べ替えます。結果の回折パターン周波数をプロットします。青は小さい振幅を示し、黄色は大きい振幅を示します。

DP = fftshift(fft2(M));
imagesc(abs(DP))
axis image

振幅が小さい領域の詳細が強調されるように、回折パターンの 2 次元対数をプロットします。非常に小さい振幅は数値の丸め誤差の影響を受け、四角形のグリッドによって放射形非対称が生じています。

imagesc(abs(log2(DP)))
axis image

参照

[1] Fowles, G. R. Introduction to Modern Optics. New York: Dover, 1989.

参考

| | | |

関連するトピック