Использование FFT2 на графическом процессоре для моделирования дифракционных шаблонов

Этот пример использует Parallel Computing Toolbox™, чтобы выполнить двумерное Быстрое Преобразование Фурье (FFT) на графическом процессоре. Двумерное преобразование Фурье используется в оптике для вычисления дифракционных шаблонов дальнего поля. Эти дифракционные шаблоны наблюдаются, когда монохроматический источник света проходит через небольшую апертуру, например, в двухщелевом эксперименте Юнга.

Определение системы координат

Прежде чем мы симулируем свет, который прошел через апертуру, мы должны задать нашу систему координат. Чтобы получить правильное численное поведение, когда мы вызываем fft2, мы должны тщательно договориться x и y чтобы нулевое значение находилось в правильном месте.

N2 это половина размера в каждой размерности.

N2 = 1024;
[gx, gy] = meshgrid( gpuArray.colon( -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' );