Main Content

本页采用了机器翻译。点击此处可查看英文原文。

使用 GPU 上的 FFT2 仿真衍射图案

此示例使用 Parallel Computing Toolbox™ 在 GPU 上执行二维快速傅里叶变换 (FFT)。二维傅里叶变换在光学中用于计算远场衍射图案。当单色光源穿过小光圈时(例如杨氏双缝试验),可以观察到这些衍射图案。

定义坐标系

在仿真穿过光圈的光线之前,先定义一个坐标系。为了获得调用 fft2 的正确数值行为,请安排 xy,以便零值位于正确的位置。

N2 在每个维度上都是大小的一半。

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

仿真矩形孔径的衍射图案

仿真并行单色光束穿过小矩形光圈的效果。二维傅里叶变换描述了距离光圈较远的光场。首先根据坐标系形成 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");

仿真杨氏双缝试验

光学中最著名的试验之一是杨氏双缝试验,该实验显示了当光圈由两个并行狭缝组成时会发生光干涉。在发生建设性干扰的地方可以看到一系列亮点。形成代表两个狭缝的光圈。限制 y 方向的光圈,以确保生成的图案不会完全集中在水平轴上。

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

显示杨氏双缝的光强度

像前面一样计算并显示强度。

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

另请参阅

| |

相关主题