您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > matlab衍射程序
一、衍射积分相关程序如下:1.单缝衍射clearlamba=500e-9;%波长a=1e-3;D=1;ym=3*lamba*D/a;%屏幕上y的范围n=51;%屏幕上的点数ys=linspace(-ym,ym,n);n=51;%屏幕上的点数yp=linspace(0,a,n);fori=1:nsinphi=ys(i)/D;alpha=pi*yp*sinphi/lamba;sumcos=sum(cos(alpha));sumsin=sum(sin(alpha));B(i,:)=(sumcos^2+sumsin^2)/n^2;endN=256;%确定灰度的等级Br=(B/max(B))*N;subplot(1,2,1)image(ym,ys,Br);colormap(gray(N));%色调处理subplot(1,2,2)plot(B,ys,'k');2.多缝衍射clearlamda=500e-9;%波长N=2;%缝数,可以随意更改变换a=2e-4;D=5;d=5*a;ym=2*lamda*D/a;xs=ym;n=1001;ys=linspace(-ym,ym,n);fori=1:nsinphi=ys(i)/D;alpha=pi*a*sinphi/lamda;beta=pi*d*sinphi/lamda;B(i,:)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;B1=B/max(B);endNC=256;%确定灰度的等级Br=(B/max(B))*NC;subplot(1,2,1)image(xs,ys,Br);colormap(gray(NC));%色调处理subplot(1,2,2)plot(B1,ys,'k');3.矩孔衍射clearlamda=500e-9;a=1e-3;b=1e-3;f=1;m=500;ym=8000*lamda*f;ys=linspace(-ym,ym,m);xs=ys;n=255;fori=1:msinth1=xs(i)/sqrt(xs(i)^2+f^2);sinth2=ys./sqrt(ys.^2+f^2);angleA=pi*a*sinth1/lamda;angleB=pi*b*sinth2./lamda;B(:,i)=(sin(angleA).^2.*sin(angleB).^2.*5000./(angleA.^2.*angleB.^2));endsubplot(1,2,1)image(xs,ys,B)colormap(gray(n))subplot(1,2,2)plot(B(m/2,:),ys,'k')4.正弦光栅clearallxm=10*pi;ys=xm;xs=linspace(-xm,xm,500);B=cos(xs)+1;N=255;Br=B/2*N;image(xs,ys,Br);colormap(gray(N));***还可以编写成GUI具体参考:二、傅里叶变换(1)基本思想:在傅立叶变换光学中夫琅和费衍射场的强度分布就等于屏函数的功率谱。因此我们可以直接将光屏进行傅立叶变换,再处理得到衍射图样。(2)具体操作:首先,物体图像的生成:(1)直接由矩阵运算生成(2)也可利用Windows下的画图工具,生成一幅黑白图像。其次,并调用命令函数imread()输入图像,输入的图像是一个巨大的二维矩阵,利用MATLAB函数库中的fft2()命令对该矩阵进行二位离散傅立叶变换,得到图像的频谱,该频谱是一个复数矩阵,然后用取模函数abs()对该复数矩阵取模,得到振幅谱矩阵,利用函数fftshift()对取模后的矩阵进行频谱位移,这是因为变换后的二维矩阵的直流分量位于图像的周边角,该函数交换矩阵的1、3象限和2、4象限,使直流分量移到频谱中心,从而使FFT频谱可视效果与实际图像相吻合。最后利用imshow()函数将图像显示出来。***具体图像参考:基本的程序:cleara=imread('***');%你的图像的位置或直接编写孔生成gridonfigure(1)imshow(a,[])afft=fft2(a);aabs=abs(afft);aabss=fftshift(aabs);figure(2)imshow(aabss,[])colormap(gray);colorbarfigure(3)plot(aabss)colormap(gray);figure(4)meshc(aabss)maxx1=max(max(aabss));
本文标题:matlab衍射程序
链接地址:https://www.777doc.com/doc-5189812 .html