Используя 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' );