任意孔型菲涅尔衍射matlab仿真
菲涅尔衍射Matlab 仿真
——《高等物理光学》实验报告
学院:物理学院 姓名:廖宝鑫 学号:[**************]
目录
1. 菲涅尔衍射衍射原理 ......................................................................................... 3 2. 实验想法及步骤 ................................................................................................. 3
2.1实验思路 ................................................................................................... 3 2.2实验步骤 ................................................................................................... 4 3. 程序源代码: ..................................................................................................... 4 4. 运行结果展示 ..................................................................................................... 5 5. 结论 ..................................................................................................................... 7
1. 菲涅尔衍射衍射原理
假设一个有限孔径,设孔径屏的直角坐标系为(x0,y0),并且观察平面与孔屏平行,两个平面间的间距为z ,观察平面的坐标系为(x,y ),这时,观察平面上的场可以表示为
U (x , y , z )=⎰df x df y ⎰dx 0dy 0U 0(
x 0, y 0,0)-∞
∑
∞
(1)
⋅exp{j2π⎡⎣f x (x -x 0)+f y (y -y 0)⎤⎦}
根据近轴近似条件
1
≈1-λ2(f x 2+f y 2)(2)
2
同时利用傅里叶变换关系先对f x , f y 进行积分,得到如下的菲涅尔公式
U (x , y , z )=
exp (jkz )π⎡22
⎤}(3) dx dy U x , y ⋅exp{jx -x +y -y ()()()0000000⎰⎦j λz ∑λz ⎣
令h (x , y )=
exp (jkz )π22
exp{j⎡(x )+(y )⎤}
⎦j λz λz ⎣
则式(3)可以写为
U (x , y , z )=⎰U 0(x 0, y 0)h (x -x 0, y -y 0)dx 0dy 0=U (x , y )*h (x , y )(4)
∑
对(4)做傅里叶变换可以得到
A (f x , f y , z )=A 0(f x , f y )H (f x , f y , z )(5)
式中:A 0f x , f y =FFT U 0(x , y )
对于单位振幅入射平面波A 0f x , f y =FFT t 0(x , y )
(){}
(){}
H (f x , f y )=FFT {h (x , y )}
2. 实验想法及步骤 2.1实验思路
根据以上原理,传递函数H f x , f y 已知,只需要求得透射孔径的透过率函数t 0(x , y ),然后对透过率函数进行傅里叶变换得,并与传递函数相乘得到A f x , f y , z ,最后做一个逆傅里叶变换得到U (x , y , z )=IFFT{A f x , f y , z }。
()
()
()
2.2实验步骤
1) 用ps 绘图软件做出1024*1024的像素点图,在上面绘制各种孔径图形,然后用imread()
读入图像得到二维矩阵,即孔径的透过率函数;
2) 对孔径二维矩阵做傅里叶变换,然后与传递函数相乘,最后对乘积做一次傅里叶逆变换
得到菲涅尔衍射图像。
3. 程序源代码:
N=1024; %图像像素点为1024*1024
i=imread('star.jpg');%将读入图像用01二值矩阵表示 lev = graythresh(i); u = im2bw(i,lev);
subplot(2,2,1),imshow(u); %绘制孔径图像 title('孔径图像');
lam=600e-6; %入射波长(mm ) k=2*pi/lam; %波矢
z=5000000; %观察屏距离(mm ) [x,y]=meshgrid(linspace(-N/4,N/4,N));
U=fftshift(fft2(u)); %对透过率函数做傅里叶变换
h=exp(1j*k*z)*exp((1j*k*(x.^2+y.^2))/(2*z))/(1j*lam*z); %空间域传递函数 H=fftshift(fft2(h)); %空间频率域传递函数
A=fftshift(ifft2(H.*U)); %通过逆傅里叶变换得到衍射波的振幅 subplot(2,2,2),imshow(log(1+abs(A))); title('衍射图像');
I=abs(A).^2; %光强
subplot(2,2,3),mesh(x,y,I),title('光强分布');
subplot(2,2,4),plot(x(1,:),I(512,:)),title('光强二维分布');
4. 运行结果展示
图1 圆孔的菲涅尔衍射
图2 方形孔的菲涅尔衍射
图3 星形孔的菲涅尔衍射
图4 字母B 的菲涅尔衍射
图5 光栅菲涅尔衍射
5. 结论
采用这一方法理论上可以模拟任意孔型的菲涅尔衍射图像,对于学习菲涅尔衍射有了更直观、形象的认识。