빛의 회절에는
프레넬 회절(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
|
꽈리 모양의 슬릿을 통과한 빛의 회절 무늬 |
댓글 없음:
댓글 쓰기