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