Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

GPU での FFT2 を使用した回折パターンのシミュレーション

この例では Parallel Computing Toolbox™ を使用して、GPU で 2 次元の高速フーリエ変換 (FFT) を実行します。この 2 次元フーリエ変換は、光学における遠視野回折パターンの計算に使用されます。こうした回折パターンは、Young の二重スリット実験のように、単色光源の光が小さな開口部を通過するときに観察されます。

座標系の定義

開口部を通過した光のシミュレーションを行う前に、座標系を定義します。fft2 の呼び出しで正しい数値的な動作を得るには、ゼロ値が適切な位置に来るように xy を調整します。

N2 は各次元で半分のサイズになります。

N2 = gpuArray(1024);
[gx,gy] = meshgrid(-1:1/N2:(N2-1)/N2);

矩形開口部における回折パターンのシミュレーション

単色の平行光線が小さな矩形開口部を通過する際の効果をシミュレートします。2 次元フーリエ変換により、開口部から遠く離れた光照射野を記述します。座標系を基に論理マスクとして aperture を形成することから始めます。光源は開口部の倍精度バージョンにします。遠視野の光信号は fft2 を使用して求められます。

aperture = (abs(gx)<4/N2).*(abs(gy)<2/N2);
lightsource = double(aperture);
farfieldsignal = fft2(lightsource);

矩形開口部における光強度の表示

光照射野の振幅二乗から、遠視野の光強度を計算します。fftshift を使用して可視化を補助します。

farfieldintensity = real(farfieldsignal.*conj(farfieldsignal));

imagesc(fftshift(farfieldintensity));
axis("equal");
axis("off");
title("Rectangular Aperture Far-field Diffraction Pattern");

Young の二重スリット実験のシミュレーション

光学において最も有名な実験の 1 つである Young の二重スリット実験では、開口部が 2 つの平行なスリットで構成されている場合の光の干渉が示されます。干渉により光が強めあう場所に、一連の明るい点が見られます。2 つのスリットを表す開口部を形成します。y 方向の開口を制限して、結果のパターンが横軸沿いにのみ現れることのないようにします。

slits = (abs(gx)<=10/N2).*(abs(gx)>=8/N2);
aperture = slits.*(abs(gy)<20/N2);
lightsource = double(aperture);
farfieldsignal = fft2(lightsource);

Young の二重スリットにおける光強度の表示

前と同様に強度を計算して表示します。

farfieldintensity = real(farfieldsignal.*conj(farfieldsignal));
imagesc(fftshift(farfieldintensity));
axis("equal"); 
axis("off");
title("Double Slit Far-field Diffraction Pattern");

参考

| |

関連するトピック