이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
GPU에서 FFT2를 사용한 회절 패턴 시뮬레이션
이 예제에서는 Parallel Computing Toolbox™를 사용하여 GPU에서 2차원 FFT(고속 푸리에 변환)를 수행합니다. 2차원 푸리에 변환은 광학에서 원거리장 회절 패턴을 계산하는 데 사용됩니다. 이러한 회절 패턴은 Young의 이중 슬릿 실험과 같이 단색 광원이 작은 구멍을 통과할 때 관찰됩니다.
좌표계 정의하기
구멍을 통과한 빛을 시뮬레이션하기 전에 좌표계를 정의해야 합니다. fft2
호출 시 올바른 수치적 동작을 얻으려면 x
와 y
를 정렬하여 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");