《基于MATLAB光学信息处理结果的模拟学士学位论文(20页).doc》由会员分享,可在线阅读,更多相关《基于MATLAB光学信息处理结果的模拟学士学位论文(20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于MATLAB光学信息处理结果的模拟学士学位论文-第 - 20 - 页主要符号表 入射光的波长 狭缝到接收屏的距离a 缝宽(矩形孔的长度)b 矩形孔的宽度d 缝间距r 圆孔半径 衍射角 f 透镜的焦距x 屏上横向坐标y 屏上纵向坐标 点的光强 I P点的光强毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,
2、均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解XX大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 1 绪论1.1 MATLAB语言用于计算机模拟的优势有过计算机语言编程经验的人可能都会有这样的体会,当我们进行程序设计时,特别是当程序涉及到矩阵运算或绘图时,程序的编程过程
3、是比较繁琐的,尤其是当我们需要编出一个通用程度较高的程序时就更为麻烦。它不仅要求我们深刻了解所要求解的问题以找到一个可靠性较好的算法,还必须研究各种可能的边界条件,特别是要考虑各种范围的数据大小等。另外,还要熟练掌握所使用的计算机语言。即便如此,所编写出的程序仍有可能会由于这样 或那样的原因出错,或得不到满意的结果。因此,对于非计算机专业的科研和教学人员,更渴望有一种能让他们省时省力就能编写出解决专业问题的软件,从而避免资源浪费,提高工作效率。MATLAB就是顺应这一需求产生的,而且从它诞生之日起,就受到用户的欢迎,并且很快在各个领域得到推广。 MATLAB语言是Mathworks公司推出的一
4、套高性能的数值计算可视化软件,它集数值分析、矩阵运算和图形显示于一体,被称为演算纸式的语言,是当今国际上最具活力的软件开发工具包。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形生成及模拟、便捷的与其它程序和语言接口的功能。高质量的图形生成及模拟包括完成2D和3D数据图示、图像处理、动画生成、图形显示等功能的高层MATLAB命令,也包括用户对图形图像等对象进行特性控制的低层MATLAB命令,以及开发GUI应用程序的各种工具。MATLAB提供了一个人机交互的系统环境,与利用语言或FORTRAN语言作数值计算的程序设计相比,可以节省大量的编程时间。通过MATLAB高质量的图形生成及模拟功能
5、对抽象物理现象的细致模拟,使这些过程变得非常直观明了,从而把一些抽象的理论简明化,而且这种方法的实现要比其它的一些仿真软件简单、易行。因为MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台,它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,可以在它的集成环境中交互或编程以完成各自的计算及图形生成与模拟。MATLAB中的Simulink是用来对真实世界的系统建模、模拟和分析的部件,提供了基于MATLAB核心的数值、图形、编程功能的一个块状图界面,对模型进行分析和模拟。通过利用MATLAB的编译器、/+数学库和图形
6、库,可以自动地将包含数值计算和图形的MATLAB语言的源程序转换为/+的源代码。这些代码根据需要既可以当作子模块嵌入大的应用程序中,也可以作为一个独立的程序脱离环境单独运行。这样把一些复杂的物理现象通过MATLAB模拟出来并生成可执行的程序,可以拿来直接MATLAB使用,这是非常方便的。 MATLAB软件包括基本部分和专业扩展部分。基本部分包括:矩阵的运算和各种变换,代数和超越方程的求解。数据处理和傅立叶边变换,数值积分等等。专业扩展部分称为工具箱。它实际上是用MATLAB的基本语句编成的各种子程序集,用于解决某一方面的专门问题,或实现某一类的新算法。易扩展性是MATLAB最重要的特点,每一个
7、MATLAB用户都可以成为对其有贡献的人。在MATLAB的发展过程中,许多科学家、数学家、工程人员就用它来开发一些新的、有价值的应用程序,所有的程序完全不需要使用低层代码来编写。通过这些工作,已经发展起来的工具箱有控制系统、信号处理、图像处理、系统辨识、模糊集合、神经员网络、小波分析等20余个。如果使用MATLAB来开发光学方面的应用程序,在不久的将来,也可能出现专门用来解决光学问题的工具箱。1.2 光学信息处理发展概况近几十年来,现代光学的最新进展之一是光学信息处理和数字光计算的飞速发展。光学信息处理是以傅立叶分析方法为核心研究光学成像和光学变换的理论和技术。它以光子传递信息,利用光学或光电
8、子器件进行操作运算,用光的折射、干涉和衍射等特性来实现对输入信息的各种变换和处理。光学信息处理是以光子传递信息,以光学或光电子器件进行操作运算,利用光的透射、干涉和衍射等光学现象来实现对输入信息的各种变换或处理.因此,它也是一门基于实验的科学.随着计算机的广泛使用,计算机仿真实验得到了大量研究,各类CAI软件应运而生,给光学信息处理的研究和教学带来极大方便.但笔者在调研中发现,大部分的仿真程序由VB,C和Fortran等高级语言编写.使用这些语言编程,需要编者具有良好的计算机编程能力并花费较多的时间.因此,本文探讨利用Matlab软件实现对光学信息处理实验的计算机仿真方法。在计算机飞速发展的今
9、天,光学信息处理结果的模拟受到越来越多的科研工作者和教育工作者的广泛关注。其应用主要有两个方面:第一是在科学计算方面,利用模拟实验的结果指导实际实验,减少和避免贵重仪器的损伤;第二是在光学教学方面,将抽象难懂的光学概念和规律,由模拟实验过程直观地描述,让学生饶有兴趣的掌握知识。空间滤波和光学信息处理可以追溯到1873年阿贝提出二次成像理论。阿贝于1893年,波特于1906年为验证这一理论所做的实验,科学地说明了成像质量与系统传递的空间频谱之间的关系。1935年策尼克提出的相衬显微镜是空间滤波技术早期最成功的应用。1946年杜费把光学成像系统看作线性滤波器,成功地用傅立叶方法分析成像过程,发表了
10、傅立叶变换及其在光学中的应用的著名论著。50年代,艾里亚斯及其同事的经典论文光学和通信理论和光学处理的傅立叶方法为光学信息处理提供了有力的数学工具。60年代由于激光的出现和全息术的重大发展,光学信息处理进入了蓬勃发展的新时期。1.3 光学实验模拟研究的意义在工程设计领域中,人们通过对研究对象建立模型,用计算机程序实现系统的运行过程和得到运算结果,寻找出最优方案,然后再予以物理实现,此即为计算机模拟科学。在计算机日益普及的今天,计算机模拟技术作为虚拟实验手段已经成为计算机应用的一个重要分支。它是继理论分析和物理实验之后,认识客观世界规律性的一种新型手段。计算机模拟过程是以模拟程序的运行来实现的。
11、模拟程序运行时,首先要对描述系统特性的模型设置一定的参数值,并让模型中某些变量在指定的范围内变化,通过计算可以求得这种变量在不断变化的过程中,系统运动的具体情况及结果。模拟程序在运行过程中具有以下多种功能:(1)计算机可以显示出系统运动时的整个过程和在这个过程中所产生的各种现象和状态。具有观测方便,过程可控制等特点; (2)可减少系统外界条件对实验本身的限制,方便地设置不同的参数,便于研究和发现系统运动的特性; (3)借助计算机的高速计算能力,可以反复改变输入的实验条件、系统参数、大大提高实验效率。 因此,计算机模拟具有良好的可控制性(参数可根据需要调整)、无破坏性(不会因为设计上的不合理导致
12、器件的损坏或事故的发生)、可复现性(排除多种随机因素的影响,如温度、湿度等)、易观察性(能够观察某些在实际实验中无法或者难以观察的现象和难以实现的测量,扑捉稍纵即逝的物理现象,可以记录物理过程的每一个细节)和经济性(不需要贵重的仪器设备)等特点。 模拟光学实验也可应用于基础光学教学。光学内容比较抽象,如果借助实验,学生很难理解,如光的干涉、夫琅和费衍射等。一些著名的光学教材配有大量的图片,来形象说明光学中抽象难懂的理论。光学实验一般需要稳定的环境,高精度的仪器,因此在教室里能做的光学实验极为有限,而且也受到授课时间的限制。为了克服光学实验对实验条件要求比较苛刻的缺点,可采用计算机模拟光学实验,
13、特别是光学演示实验,配合理论课的进行,把光学课程涉及的大多数现象展示在学生面前,以加深对光学内容的理解。如光学夫琅和费衍射,初学者不易理解,如果通过光学模拟实验,可以得到其衍射图样和光强曲线分布。可以根据光学原理和规律,设置在模拟光学实验中的可控参数,通过改变这些参数,观察模拟实验结果的变化,加深对光学实验的理解。1.4本论文的主要工作 本文的主要目的是利用MATLAB软件对光的干涉、衍射和空间滤波等这些比较复杂抽象的光学实验的动态模拟,首先对光学实验过程进行数学抽象,建立适合程序实现的数学模型,然后利用MATLAB软件包中的有关工具编写m文件,通过制作用户图形界面,输入并运行m文件得出光的干
14、涉图样及光强分布曲线图、夫琅和费衍射图样及光强分布曲线和光空间滤波图像。最后通过调整有关输入参数,可以观察到模拟结果的变化。进而加深对光学实验原理概念和图像的理解。从而实现把抽象的光学实验进行简明直观的动态展现。并能完成一般光学实验中较难实现的操作。2 光的干涉实验模拟 光的干涉实验是当两个或多个光波(光束)在空间叠加时,在叠加区域内出现的各点强度稳定的强弱分布现象。光的干涉是光的波动性的主要标志之一。本章主要讨论使用MATLAB软件模拟最具代表性的单色光双缝干涉实验,给出干涉图样分布和光强分布曲线图。2.1单色光双缝干涉实验的数学模型图2.1单色光双缝干涉实验示意图为简单起见,我们以频率是单
15、值的、振幅不随传播距离变化的单色光为例来建立光的双缝干涉实验的数学模型。单色简谐波可以用余弦函数表示。单色光双缝干涉实验示意图如图2.1所示.设从空间两定点A、B发出的两个这样的光波,振幅的振动用下面的式子来表示: (2.1) (2.2) 式子中和分别为A和B两点振动的初位相,此后当两列光波同时到达空间另一定点p时,p点的振动可以用下式表示: (2.3) (2.4)式子中=,和是两光波在和两段路程上的传播速度。两光波在p点相遇后,在任何时刻的位相差为。= (2.5)式子中为真空中的波长,和为介质的折射率,记,则在最简单情况下,n=1,此时有,。从图1可以计算出 (2.6) (2.7)从而能够计
16、算出相位差的分布。设两束相干光在屏幕上产生的振动的振幅相同,则夹角为的两个分量叠加后的光强为 (2.8) 2.2单色光双缝干涉实验的MATLAB模拟程序 在建立了单色光双缝干涉实验的数学模型后,依据所建立的数学模型很容易在MATLAB环境下编写可以直接执行的m文件。使用用户界面开发环境设计应用程序,应用程序的设计包括两个方面,首先是图形界面的设计,应当考虑到整个图形界面的布局以及控件的使用和布置事件的响应等;其次是功能的设计,通过一定的设计思路和计算方法,完成程序的设计功能。在程序中,输入光的波长表示为bc(即),双缝间的宽度表示为fk(即d),光栅到接收屏的距离表示为jl(即),则单色光双缝
17、干涉实验的MATLAB模拟程序的m文件如下:bc=str2double(get(handles.bc_input,String); %从界面输入参数fk=str2double(get(handles.fk_input,String); %从界面输入参数jl=str2double(get(handles.jl_input,String); %从界面输入参数yMax=5*bc*jl/fk; xs=yMax;Ny=101;ys=linspace(-yMax,yMax,Ny);for i=1:Ny r1=sqrt(ys(i)-fk/2).2+jl2); r2=sqrt(ys(i)+fk/2).2+jl
18、2); phi=2*pi*(r2-r1)/bc; B(i,:)=4*cos(phi/2).2; %计算光强endNCLevels=255; %指定调色板Br=(B/4.0)*NCLevels;axes(handles.tiaowen1_axes)image(xs,ys,Br) %显示干涉图样set(handles.tiaowen1_axes,XMinorTick,on)grid onaxes(handles.tiaowen2_axes)colormap(gray(NCLevels)plot(B(:),ys) %绘制光强分布曲线set(handles.tiaowen2_axes,XMinorTi
19、ck,on)grid on2.3单色光双缝干涉实验的模拟结果与讨论在程序运行时,从图形界面输入光的波长,双缝间的距离d,光栅到接收屏的距离这些参数的不同数值,可以从程序的输出结果观察到单色光双缝干涉实验的模拟结果,如图2.2所示图2.2单色光双缝干涉实验模拟结果图 观察模拟结果可以得到这样的结论:(1)当一定波长的单色光入射时,干涉条纹的间距大小与成正比,而与d成反比;(2)当,d一定时,干涉条纹的间距大小与光的波长成正比;(3)要得到清晰、稳定的干涉条纹,相对一定的波长而言,必须使d小到可以与波长相比拟,且使d;2.4本章小结 通过利用MATLAB对单色光双缝干涉这一比较复杂、抽象的光学实验
20、的动态模拟实现,我们认为利用MATLAB对抽象物理现象进行计算机模拟时,首先必须对物理过程进行数学抽象,建立适合程序实现的数学模型。然后利用MATLAB软件包中的有关工具编制m文件,可以通过改变输入参数的数值,进而改变模拟结果。很好地证明了使用MATLAB模拟光学实验是行之有效的。3光的衍射实验模拟 光波在传播过程中遇到障碍物时,会偏离原来的传播方向弯入障碍物的几何影区内,并在障碍物后的观察屏上呈现出光强的不均匀分布,这种现象称为光的衍射。由于夫琅和费衍射问题的计算比较简单,并且在光学系统的成像理论和现代光学中,夫琅和费衍射有着特别重要的意义,所以本章主要讨论五种衍射屏的夫琅和费衍射。3.1单
21、缝衍射的模拟3.1.1单缝衍射实验的数学模型 单缝衍射实验原理图如图3.1所示。图3.1单缝衍射实验示意图由于这一单缝的ba,所以入射光在y方向的衍射效应可以忽略,衍射图样只分布在x轴上。由衍射图样的照片显然可知单缝衍射在x轴上的衍射强度分布公式为I= (3.1)其中,a是缝宽,是入射光的波长,是衍射角,是点的光强。设观察屏位于单缝后正透镜的焦平面上,f为透镜的焦距,x为屏上横向坐标。3.1.2单缝衍射实验的MATLAB模拟程序 在建立了单缝衍射实验的数学模型后,依据所建立的数学模型很容易在MATLAB环境下编写可以直接执行的m文件。在程序中,输入光的波长表示为bc(即),单缝的宽度表示为fk
22、(即a),正透镜的焦距表示为jj(即f),则单色光双缝干涉实验的MATLAB模拟程序的m文件如下:bc=str2double(get(handles.bc_input,String); %从界面输入参数fk=str2double(get(handles.fk_input,String); %从界面输入参数jj=str2double(get(handles.jj_input,String); %从界面输入参数range=20;Np=800; %设置接收屏的范围及点数xp=linspace(-range,range,Np);yp=xp/2; %确定接收点,坐标存入矩阵xp、ypfor i=1:Np
23、 %计算各点光强,存入矩阵I thr=atan(xp(i)./jj); phi=(pi*fk*sin(thr)/bc; I(i,:)=(sin(phi)/phi).2;end NCLevels=255; %指定调色板Ir=I*NCLevels;axes(handles.axes1);image(xp,yp,Ir); %显示衍射图样set(handles.axes1,XMinorTick,on);grid onaxes(handles.axes2);colormap(gray(NCLevels);plot(I(:),xp); %绘制光强分布曲线set(handles.axes2,XMinorTi
24、ck,on);grid on3.1.3单缝实验的模拟结果与讨论 在程序运行时,从图形界面输入光的波长,单缝的宽度a,透镜的焦距f,这些参数的不同数值,可以从程序的输出结果观察到单缝衍射实验的模拟结果,如图3.1.2所示。观察模拟结果可以得到这样的结论:(1) 在观察平面上得到一些与单缝平行的直线衍射条纹,它们是线光源上各个相干点光源产生的图样的总和;(2) 在单缝衍射中,衍射条纹的间距(相邻两暗纹之间的距离)(3) 在单缝衍射图样中,中央亮纹是在公式决定的两个暗点范围内,这一范围集中了单缝衍射的绝大部分能量,在宽度上也是其他条纹宽度的两倍。图3.2单缝衍射模拟结果图3.2双缝衍射的模拟3.2.
25、1双缝衍射实验的数学模型 在图3.3.1所示的单缝衍射原理图中,将单缝衍射屏换成两个平行等宽狭缝的屏,就变成一个研究双缝衍射的原理图、,如图3.3所示,在衍射屏上所形成的衍射图样就是一些平行于y轴的亮暗条纹。利用夫琅和费衍射计算公式来计算双缝衍射强度,强度分布公式为 : (3.2) 其中,a是缝宽,d是双缝的中心间距,是入射光的波长,是衍射角。设观察屏位于双缝后正透镜的焦平面上,f为透镜的焦距,x为屏上横向坐标,。图3.3双缝衍射实验示意图3.2.2双缝衍射实验的MATLAB模拟程序 在建立了双缝衍射实验的数学模型后,依据所建立的数学模型很容易在MATLAB环境下编写可以直接执行的m文件。在程
26、序中,输入光的波长表示为bc(即),双缝的宽度表示为fk(即a),双缝的中心间距为fj(即d)正透镜的焦距表示为jj(即f),则双缝衍射实验的MATLAB模拟程序的m文件如下:bc=str2double(get(handles.bc_input,String); %从界面输入参数fk=str2double(get(handles.fk_input,String); %从界面输入参数fj=str2double(get(handles.fj_input,String); %从界面输入参数jj=str2double(get(handles.jj_input,String); %从界面输入参数rang
27、e=20;Np=800; %设置接收屏的范围及点数xp=linspace(-range,range,Np);yp=xp/2; %确定接收点,坐标存入矩阵xp、ypfor i=1:Np %计算各点光强,存入矩阵I thr=atan(xp(i)/jj); phi=(pi*fk*sin(thr)/bc; phj=(pi*fj*sin(thr)/bc; I(i,:)=(sin(phi)/phi).2*cos(phj).2;endNCLevels=255; %指定调色板Ir=I*NCLevels;axes(handles.tuxing1_axes);image(xp,yp,Ir); %显示衍射图样set
28、(handles.tuxing1_axes,XMinorTick,on);grid onaxes(handles.tuxing2_axes);colormap(gray(NCLevels);plot(I(:),xp); %绘制光强分布曲线set(handles.tuxing2_axes,XMinorTick,on);grid on3.2.3双缝衍射实验的模拟结果与讨论 在程序运行时,从图形界面输入光的波长,双缝的宽度a,双缝的中心间距d,透镜的焦距f,这些参数的不同数值,可以从程序的输出结果观察到双缝衍射实验的模拟结果,如图3.4所示。图3.4双缝衍射模拟结果图 观察模拟结果可以得到这样的结论
29、:(1) 双缝衍射图样是单缝衍射图样和双光束干涉图样的组合,是衍射和干涉两个因素共同作用的结果;(2) 当双缝的距离比缝宽大得多时,即da时,单缝衍射中央亮条纹区包含的干涉条纹数目是很多的,因而条纹的强度随级次增大的衰减缓慢。3.3 光栅衍射实验的模拟3.3.1光栅衍射实验的数学模型 光栅衍射原理图如图3.3.1所示,s是与图面垂直的线光源,位于透镜的焦平面上,G是缝距为d的衍射光栅,光栅的方向与线光源平行。光栅的衍射图样在透镜的焦平面上观察。假定光栅的方向是方向,那么光栅衍射图样的强度分布只沿x方向变化,衍射条纹是一些平行于y轴的亮暗条纹。用夫琅和费衍射公式计算光栅衍射图样的强度分布。衍射光
30、强公式为 (3.3) 其中,a是缝宽,d是双缝的中心间距,是入射光的波长,是衍射角。设观察屏位于双缝后正透镜的焦平面上,f为透镜的焦距,x为屏上横向坐标,。N是光栅的狭缝数目。图3.5光栅衍射实验示意图3.3.2 光栅衍射实验的MATLAB模拟程序 在建立了光栅衍射实验的数学模型后,依据所建立的数学模型很容易在MATLAB环境下编写可以直接执行的m文件。在程序中,输入光的波长表示为bc(即),双缝的宽度表示为fk(即a),双缝的中心间距为fj(即d)正透镜的焦距表示为jj(即f),则光栅衍射实验的MATLAB模拟程序的m文件如下:bc=str2double(get(handles.bc_inp
31、ut,String); %从界面输入参数 fk=str2double(get(handles.fk_input,String); %从界面输入参数fj=str2double(get(handles.fj_input,String); %从界面输入参数jj=str2double(get(handles.jj_input,String); %从界面输入参数fs=str2double(get(handles.fs_input,String); %从界面输入参数range=20;Np=800; %设置接收屏的范围及点数xp=linspace(-range,range,Np);yp=xp/2; %确定接
32、收点,坐标存入矩阵xp、ypfor i=1:Np %计算各点光强,存入矩阵I thr=atan(xp(i)/jj); phi=(pi*fk*sin(thr)/bc; phj=(pi*fj*sin(thr)/bc; I(i,:)=(sin(phi)./phi).2*(sin(fs*phj)./sin(phj).2;EndNCLevels=255; %指定调色板Ir=I*NCLevels;axes(handles.tuxing1_axes);image(xp,yp,Ir); %显示衍射图样set(handles.tuxing1_axes,XMinorTick,on);grid onaxes(han
33、dles.tuxing2_axes);colormap(gray(NCLevels);plot(I(:),xp); %绘制光强分布曲线set(handles.tuxing2_axes,XMinorTick,on);grid on3.3.3光栅实验的模拟结果与讨论在程序运行时,从图形界面输入光的波长,双缝的宽度a,双缝的中心间距d,透镜的焦距f,光栅的狭缝数目N这些参数的不同数值,可以从程序的输出结果观察到光栅衍射实验的模拟结果,如图3.6所示。图3.6光栅衍射模拟结果图 观察模拟结果可以得到这样的结论:(1) 主极大的半角宽度为,表明缝数愈大,主极大的宽度愈小;(2) 次极大的强度与它离开主极
34、大的远近有关,次极大的宽度随N增大而减小;(3) 当缝数N增大时,衍射图样最显著的改变是亮纹变成很细的亮线;3.4矩孔衍射实验的模拟3.4.1矩孔衍射实验的数学模型 矩孔衍射实验原理图如图3.7所示,在透镜的后焦面上获得矩孔衍射图样,衍射亮斑集中分布在互相垂直的x轴和y轴上,并且x轴上亮斑的宽度比y轴上的亮斑宽度大。利用夫琅和费衍射计算公式计算矩孔衍射图样的强度分布为 (3.4) 其中,a、b分别是矩孔的长和宽,f是透镜的焦距, 、是二维衍射角。图3.7矩孔衍射实验示意图3.4.2矩孔衍射实验的MATLAB模拟程序 在建立了矩孔衍射实验的数学模型后,依据所建立的数学模型很容易在MATLAB环境
35、下编写可以直接执行的m文件。在程序中,输入光的波长表示为bc(即),矩孔的长和宽分别为a和b,正透镜的焦距表示为jj(即f),则矩孔衍射实验的MATLAB模拟程序的m文件如下:bc=str2double(get(handles.bc_input,String); %从界面输入参数kc=str2double(get(handles.kc_input,String); %从界面输入参数kk=str2double(get(handles.kk_input,String); %从界面输入参数jj=str2double(get(handles.jj_input,String); %从界面输入参数rang
36、e=100;Np=200; %设置接收屏的范围及点数xp=linspace(-range,range,Np);yp=xp; %确定接收点,坐标存入矩阵xp、ypfor x=1:Npfor y=1:Np %计算各点光强,存入矩阵I thr=atan(xp(i)/jj); ths=atan(yp(i)/jj); phi=(pi*kc*sin(thr)/bc; phj=(pi*kk*sin(ths)/bc;I(i,:)=(sin(phi)/phi).2*(sin(phj)/phj).2;endendNCLevels=255; %制定调色板Ir=I*NCLevels;axes(handles.tuxi
37、ng1_axes);imshow(Ir,); %显示衍射图样set(handles.tuxing1_axes,XMinorTick,on);grid onaxes(handles.tuxing2_axes);colormap(gray(NCLevels);mesh(I); %绘制光强分布曲线set(handles.tuxing2_axes,XMinorTick,on);grid on3.4.3矩孔衍射实验的模拟结果与讨论 在程序运行时,从图形界面输入光的波长,矩孔的长和宽分别为a和b,透镜的焦距f,这些参数的不同数值,可以从程序的输出结果观察到矩孔衍射实验的模拟结果,如图3.8所示。图3.8矩
38、孔衍射模拟结果图观察模拟结果可以得到这样的结论:(1) 如果矩孔的a和b不等,那么沿x轴和y轴相邻暗点的间距不同;(2) 衍射扩展与矩孔的宽度成反比,而与光波波长成正比;(3) 当孔宽时,衍射效应可以忽略,所得结果与几何光学的结果一致。3.5圆孔衍射实验的模拟3.5.1圆孔衍射实验的数学模型圆孔衍射的实验原理图如图3.5.1所示,圆孔的半径为a,圆孔中心c位于光轴上。观察屏上衍射条纹呈同心圆环条文分布。利用夫琅和费衍射计算公式计算圆孔衍射图样的强度分布为: (3.5)其中,是一阶贝塞尔函数,MATLAB有相应的库函数besselj(1,Z)可供调用,Z=,a是圆孔的半径,对于屏上衍射场点(x,
39、y),有。图3.9圆孔衍射实验示意图3.5.2圆孔衍射实验的MATLAB模拟程序在建立了圆孔衍射实验的数学模型后,依据所建立的数学模型很容易在MATLAB环境下编写可以直接执行的m文件。在程序中,输入光的波长表示为bc(即),圆孔的半径为bj(即a)正透镜的焦距表示为jj(即f),则圆孔衍射实验的MATLAB模拟程序的m文件如下:bc=str2double(get(handles.bc_input,String); %从界面输入参数bj=str2double(get(handles.bj_input,String); %从界面输入参数jj=str2double(get(handles.jj_input,String); %从界面输入参数range=200;Np=200; %设置接收屏的范围及点数xp=linspace(-range,range,Np);yp=xp; %确定接收点,坐标存入矩阵xp、ypfor x=1:Np %计算各点光强,存入矩阵I(x,y)for y=1:Np phi=atan(sqrt(xp(x)2+yp(y)2)/jj); Z=2*pi*bj*sin(phi)/bc; I(x,y)=(2*besselj(1,Z)/Z)2;endendNCLevels=255; %指定调色板Ir=I*NCLevels;axes(handles.tuxing1_ax