Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

GPU에서 FFT2를 사용한 회절 패턴 시뮬레이션

이 예제에서는 Parallel Computing Toolbox™를 사용하여 GPU에서 2차원 FFT(고속 푸리에 변환)를 수행합니다. 2차원 푸리에 변환은 광학에서 원거리장 회절 패턴을 계산하는 데 사용됩니다. 이러한 회절 패턴은 Young의 이중 슬릿 실험과 같이 단색 광원이 작은 구멍을 통과할 때 관찰됩니다.

좌표계 정의하기

구멍을 통과한 빛을 시뮬레이션하기 전에 좌표계를 정의해야 합니다. fft2 호출 시 올바른 수치적 동작을 얻으려면 xy를 정렬하여 0 값이 올바른 위치에 있도록 해야 합니다.

N2는 각 차원에서 크기의 절반입니다.

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

사각형 구멍의 회절 패턴 시뮬레이션하기

단색광의 평행 빔이 작은 사각형 구멍을 통과할 때의 효과를 시뮬레이션합니다. 2차원 푸리에 변환은 구멍에서 원거리에 있는 빛의 장(light field)을 설명합니다. 먼저 좌표계를 기반으로 한 논리형 마스크로 aperture를 형성합니다. 광원은 구멍(aperture)의 배정밀도 버전이 됩니다. 원거리장 광신호는 fft2를 사용하여 찾습니다.

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

사각형 구멍의 광도 표시하기

빛의 장(light field)의 제곱 크기로부터 원거리장 광도를 계산합니다. 시각화를 돕기 위해 fftshift를 사용합니다.

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

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

Young의 이중 슬릿 실험 시뮬레이션하기

광학 분야에서 가장 유명한 실험 중 하나는 구멍 하나가 두 개의 평행한 슬릿으로 되어 있을 때 빛의 간섭을 보여주는 Young의 이중 슬릿 실험입니다. 보강 간섭이 발생하면서 연속적으로 밝은 점이 보입니다. 두 개의 슬릿을 나타내도록 구멍을 형성합니다. 결과로 생성되는 패턴이 수평 축으로만 모이지 않도록 구멍을 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");

참고 항목

| |

관련 항목