模拟夫琅禾费衍射的matlab源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

源代码:

N=512;

disp('衍射孔径类型 1.圆孔 2.单缝 3.方孔')

kind=input('please input 衍射孔径类型:');% 输入衍射孔径类型

while kind~=1&kind~=2&kind~=3

disp('超出选择范围,请重新输入衍射孔径类型');

kind=input('please input 衍射孔径类型:');% 输入衍射孔径类型

end

switch(kind)

case 1

r=input('please input 衍射圆孔半径(mm):');% 输入衍射圆孔的半径

I=zeros(N,N);

[m,n]=meshgrid(linspace(-N/16,N/16-1,N));

D=(m.^2+n.^2).^(1/2);

I(find(D<=r))=1;

subplot(1,2,1),imshow(I);

title('生成的衍射圆孔');

case 2

a=input('please input 衍射缝宽:');% 输入衍射单缝的宽度

b=1000;% 单缝的长度

I=zeros(N,N);

[m,n]=meshgrid(linspace(-N/4,N/4,N));

I(-a

subplot(1,2,1);imshow(I);

title('生成的衍射单缝');

case 3

a=input('please input 方孔边长:');% 输入方孔边长

I=zeros(N,N);

[m,n]=meshgrid(linspace(-N/4,N/4,N));

I(-a/2

subplot(1,2,1),imshow(I);

title('生成的方孔');

otherwise kind=input('please input 衍射孔径类型:');% 输入衍射孔径类型

end

% 夫琅禾费衍射的实现过程

L=500;

[x,y]=meshgrid(linspace(-L/2,L/2,N));

lamda_1=input('please input 衍射波长(nm):');% 输入衍射波长;

lamda=lamda_1/1e6

k=2*pi/lamda;

z=input('please input 衍射屏距离衍射孔的距离(mm):');% 衍射屏距离衍射孔的距离

h=exp(1j*k*z)*exp((1j*k*(x.^2+y.^2))/(2*z))/(1j*lamda*z);%脉冲相应H =fftshift(fft2(h));%传递函数

B=fftshift(fft2(I));%孔频谱

G=fftshift(ifft2(H.*B));

subplot(1,2,2),imshow(log(1+abs(G)),[]);

title('衍射后的图样');

figure

meshz(x,y,abs(G));

title('夫琅禾费衍射强度分布')

实验输入:衍射孔径类型1.圆孔 2.单缝3.方孔

please input 衍射孔径类型:1

please input 衍射圆孔半径(mm):3

please input 衍射波长(nm):632

lamda =6.3200e-04

please input 衍射屏距离衍射孔的距离(mm):1000000

实验结果:

程序说明:本实验可以选择孔径类型、孔径半径、输入波长、衍射屏和衍射孔的距离等。当衍射屏和衍射孔的距离相对较小时,此衍射为菲涅耳衍射,当距离相对较大时满足夫琅禾费衍射的条件,两者的程序一样,只是距离Z的大小不一致。又由于夫琅禾费衍射与傅里叶变换成正比,只差一个系数关系。所以程序中的衍射既是直接对物光进行傅里叶变换即可。

相关文档
最新文档