2010년 8월 10일 화요일

회절 무늬

빛의 회절에는 프레넬 회절(Fresnel diffraction, near-field diffraction)프라운호퍼 회절(Fraunhofer diffraction, far-field diffraction)이 있는데, 흔히 회절이라 하면 프라운호퍼 회절을 일컫는다. 프라운호퍼 회절 무늬를 계산해보면 입사하는 빛의 2차원 푸리에 변환이 되는 것을 알 수 있다. 따라서, Fast Fourier Transform(FFT)을 이용해서 회절 무늬를 쉽게 그려볼 수 있다.

구멍에 들어가는 빛의 세기가 일정하다는 가정을 사용하면, 구멍의 모양이 바로 구멍을 통과하는 빛의 모양이므로 구멍의 모양을 바로 푸리에 변환하면 된다. 김프(GIMP)를 이용해서 구멍의 모양을 미리 만들어 두었다.
김프로 만든 임의의 슬릿 모양
이 이미지 파일을 불러들여, 수치 자료로 변환한다.
img = Import["spiral_aperture.png"]
data = img // ImageData;
이 자료의 모양을 확인해보면,
Dimensions[data]
{400, 400, 3}과 같이 3차원인 것을 알 수 있다. 마지막 차원은 RGB 채널 정보인데, 빛의 세기만 고려하므로 이 채널 중 하나만 뽑아 쓰면 된다.
data = img // ImageData // #[[All, All, 1]] &;
이제 자료에 FFT를 적용하면 된다. 다만, FFT에선 파수(wave number)가 0부터 2k까지로 정의되므로, RotateLeft를 이용해서 파수의 범위가 -k에서 k까지 되도록 결과 배열을 조정해줘야 올바른 회절 무늬를 볼 수 있다. 또한, ListDensityPlot은 이미지 자료와 y축 방향이 반대이므로 결과 배열을 y축에 대해서 거꾸로 그려야 한다.
data // Fourier // Abs // 
   RotateLeft[#, Ceiling[Dimensions[#]/2]] & // Reverse // 
 ListDensityPlot
꽈리 모양의 슬릿을 통과한 빛의 회절 무늬

댓글 없음:

댓글 쓰기