首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于Matlab与VB的光栅衍射综合实验仿真

作者:赵华芬 孔德明 来源:现代电子技术


  摘要:以光栅衍射为例,编写了基于Matlab的仿真程序。利用DLL接口技术,结合Matlab强大的科学计算功能以及Visual Basic的可视化功能,通过改变输入参数实现了对光栅衍射、单缝衍射、杨氏双缝干涉以及多光束干涉的光学实验进行生动形象的仿真模拟。实验结果的图样细致逼真,可为光学的理论分析和实验教学提供新的有效辅助手段,并为相关课件的设计提供了新的途径。
  关键词:Matlab; Visual Basic; 光栅; DLL
  中图分类号:G434; TP311文献标识码:A文章编号:1004373X(2012)04005705
  
  Synthetic Experiment Simulation of grating diffraction Based on MATLAB and VB
  ZHAO Huafen, KONG Deming
  (Dept. of Physical Science and Technology, Central South University, Changsha 410083, China)
  
  Abstract: Taking the grating diffraction as an example, the simulation program based on MATLAB is compiled, and then using the interfacing technology of DLL, combining MATLAB powerful function of scientific calculation and visualization function of Visual Basic, the optical experiments of grating diffraction, single slot diffraction, Young′s doubleslit interference and multibeam interference are imitated vividly by changing the input parameters. The patterns of the experiment are delicate and distinct. It offers a new effective supplementary means for optical theory analysis and experiment teaching. In addition, it provides a new way for courseware design.
  Keywords: Matlab; Visual Basic; grating diffraction; multibeam interference; DLL; interface
  
  
  收稿日期:20110910
  基金项目:教育部高等学校物理基础课程教学指导分委员会资助项目(WJZW2010472n)0引言
  随着信息技术的发展,光学实验的计算机仿真在科学工程以及光学教学方面引起了广大工作者的广泛关注[ 12]。但是,过去大多光学仿真软件的开发都是基于Flash,Photoshop,3DMax之类的图像软件,而这类软件对光学实验规律和过程很少涉及,很难做到真正的交互使用。因此,在开发波动光学仿真系统时应选择计算功能强、人机界面好的软件作为基础。
  目前,越来越多的教学工作者采用Matlab软件进行仿真软件的开发[ 36]。虽然Matlab软件提供了强大的科学运算、图像处理、高效灵活的程序设计方法、以及便捷的与其他软件间进行数据交换的功能,但是Matlab在交互式、可视化、高水平仿真图像、人性化仿真界面和快速开发等方面远远比不上Visual Basic(VB)。
  VB是一种超强的可视化编程语言,但是VB 只提供了基本的数学函数库,如果使用 VB 编写特殊功能的数学函数库,必须要求用户对算法有深入的理解。因此,如果能结合Matlab与VB各自的优势开发仿真软件是一种很好的方案。但是,鉴于Matlab及VB软件之间的接口存在一定的难度,目前将Matlab及VB结合仿真光学实验的报道还比较少见[7]。因此,还有大量的工作需要去探讨与研究。
  本文借助Matlab与VB各自的优势,通过Matlab及VB之间的接口技术,在VB界面改变输入参数并调用Matlab编写的函数程序,实现同一个程序仿真光栅衍射、单缝衍射、杨氏双缝干涉以及多光束干涉的实验现象。
  1Matlab与VB接口方法简介
  目前,VB调用Matlab的接口可以通过ActiveX自动化技术,COM Builder技术以及DLL动态链接库三种方法实现[8]。但是利用ActiveX自动化技术时会在后台启动一个Matlab进程,不能脱离Matlab环境,而且实时性差。通过COM Builder技术虽然可以脱离Matlab环境,但是一些工具箱函数还是无法编译,有一定的局限性,这两种方法都难以满足软件开发的要求[ 911 ]。而DLL动态链接库方法不仅可以脱离Matlab环境运行,并且可以大大提高程序的运行效率,降低对系统资源的占用率。它的原理主要就是将Matlab的.m文件转变成为VB可以调用的DLL文件,从而实现VB对Matlab的调用[89]。在此借助DLL动态链接库方法实现VB调用Matlab中的函数。
  2光栅衍射的光强分布
  光学实验的仿真模拟主要是根据光强分布的理论公式,通过编程得到仿真曲线,然后通过改变参数实现动态模拟[1213]。图1为光栅衍射示意图。
  图1光栅衍射示意图假设入射光的波长为λ,光栅的缝数为N,各缝的宽度为b,光栅常数为d,入射光与法线正方向的夹角为α(斜向上入射,规定α>0;斜向下入射,规定α<0)。可以得到观察屏上P点得光强分布函数[14]为:I=I0(sin φφ)2·(sin Nβsin β)2(1)式中:I0为屏中心的最大光强;(sin φ/φ)2为单缝衍射因子;(sin Nβ/sin β)2为多光束干涉因子;φ=πb/λ(sin θ-sin α),β=πd/λ(sin θ-sin α)。衍射角θ满足sin θ=y/y2+f2。其中y是P点y方向的坐标,f是凸透镜的焦距。
  (1) 当N=1时,式(1)变为I=I0(sin φ/φ)2,对应于单缝衍射的光强分布函数。
  (2) 当b<<λ,式(1)变为I=I0(sin Nβ/sin β)2,对应于多光束干涉的光强分布函数。
  (3) 当N=2且b<<λ时,式(1)变为I=4I0cos2 β,对应于杨氏双缝干涉的光强分布函数。
  由以上分析可知,单缝衍射、杨氏双缝干涉以及多光束干涉可以看作是光栅衍射的特例。因此,可以利用式(1)进行编程,然后通过改变输入参数,达到仿真多个实验的目的。这样避免了单个实验进行编程仿真的累赘,并且通过仿真可以让学生更清楚地了解光栅衍射的实质。
  另外,还可以利用杨氏双缝干涉或多光束干涉实验,通过调整入射光的入射角度,使得第j级干涉条纹移动到y轴的中心0处,记录此时光的入射角度α,然后计算入射光的波长,其
  
  
  3.2将Matlab函数转化为DLL文件
  用Matcom 4.5将.m文件转化成DLL的过程如下:运行Matcom 4.5,点击菜单File/ Compile to dll,选择写好的yanshe.m文件,点击OK。这时在对应的Debug目录下,有三个需要在VB开发环境中使用的文件yanshe.dll,yanshe.bas,yanshe.cls。
  3.3在VB中实现调用DLL文件
  为了能适应Matlab强大的矩阵运算功能,必须将MaxtrixVB库加入到工程中,过程为:点击菜单VB中的工程,选择引用,在可用的引用对话框中选中Mmatrix,点击OK。
  将yanshe.bas和yanshe.cls加入到工程中,过程为:
  (1) 点击VB中的工程/添加模块 /Matcom 4.5/Debug/yanshe.bas。
  (2) 点击VB中的工程/添加类模块 /Matcom 4.5/Debug/yanshe.cls。
  最后将生成的Matcom 4.5/Debug/目录下的yanshe.dll文件拷贝到Windows/System 32目录下,这样就可以实现VB与Matlab之间的接口链接,在VB中调用yanshe.m函数。
  3.4VB窗体及程序代码设计
  在VB中建一个工程窗体Form1,在窗体中添加控件,如图2所示。
  图2仿真主界面各控件的代码如下:
  
  在VB中新建第二个工程窗体Form2,如图3所示。
  图3仿真说明在窗体中添加文本框控件,并在其中给出仿真说明的内容。在Form2窗体中添加命令按钮控件,并编写程序代码如下:
  Private Sub Command1_Click()
  Form1.Show′ 弹出Form1窗体
  Form2.Hide ′ 关闭Form2窗体
  End Sub
  图3窗体与图2主窗体之间的运行方式是在图2主界面运行过程中,点击仿真说明按钮,弹出图3窗体,主界面隐藏。在图3窗体中点击返回按钮,弹出图2主界面,图3窗体隐藏。
  3.5仿真结果
  图4是N=5时的光栅衍射图样。由图可以看到,该衍射图样实际上是缝间的干涉条纹受到单缝衍射调制的结果。另外,作为一个特例,假定d/b=3,仿真结果中还可以看到±3,±6…级缺级的现象。
  图4光栅衍射的仿真结果图5是N=1时的单缝衍射图样。此时,不存在缝间的干涉现象,衍射图样中央明纹光强最大,随着级次的增大,各级明纹的光强迅速减小。另外,还可以看到中央明纹的宽度比其他明纹宽。在仿真过程中还可以发现:λ愈大或b愈小,各级明纹的宽度就越大,说明衍射作用愈明显。反之,λ愈小或b愈大,各级明纹的宽度就越小,并且各级明纹都向中央明纹靠拢,逐渐分辨不清,说明衍射作用也就愈不明显。
  图5单缝衍射仿真结果图6是缝宽b较小时的光栅衍射图样。该衍射图样类似于杨氏双缝干涉或多光束干涉的图样。该图样形成的主要原因是随着缝宽b的减小,单缝衍射作用下的中央明纹宽度将逐渐增大,其光强分布曲线将逐渐伸展,也即由于单缝衍射作用而形成的中央包络线越宽,进而使得在观察的视野中看到更多的明纹。当b<<λ,单缝衍射光强分布将伸展为一条直线,此时式(1)中的单缝衍射因子可以忽略不计,仿真得到的便是杨氏双缝干涉或多光束干涉的图样。在真实的实验情况下,条件b<<λ很难满足,杨氏双缝干涉以及多光束干涉实际上仍是缝间干涉被单缝衍射调制后结果。另外需要说明的是,在仿真过程中还发现随着缝数N逐渐增大,各明纹的宽度以及位置不变,但光强却逐渐增大。
  图6缝宽b较小时的仿真结果在对光栅衍射进行仿真时,当改变入射光的入射角度时,还可以看到衍射条纹的形状与光强不会发生改变,只是作整体平移。当增大斜向上的入射角度时,各级条纹将向y轴的正方向移动。反之,当增大斜向下的入射角度时,各级条纹将向y轴的负方向移动。另外,在缝宽b较小的情况下,通过调整入射光的入射角度,利用仿真图样还可以测量入射光的波长。作为特例,本文取N=5,d=6×10-7,b=1×10-9,λ=5×10-7,增大向上斜入射光的入射角度,通过仿真记录当入射角度为0.016 65 rad时,第j=-2级明条纹移动到轴的中央0处,利用公式λ=-dsin α/j便可计算出光的波长为λ=4.994 8×10-7,这一结果与λ=5×10-7之间的误差较小。在实际应用中,该方法对测量光的波长具有一定的指导意义。
  4结语
  本文利用DLL动态链接库方法实现VB与Matlab之间的接口连接,在VB界面可方便地改变输入参数,实现缝的干涉与衍射实验现象的仿真。通过仿真,可以很清楚地知道单缝衍射、杨氏双缝干涉以及多光束干涉实际上是光栅衍射在一定条件下的特例,并且该仿真可使更好地了解缝的干涉与衍射的本质。另外,在实际的杨氏双缝干涉与多光束干涉实验过程中,很难做到b<<λ,因此实际实验观察到的现象仍是光的干涉与衍射的结果。通过光学仿真,便可以观察到无衍射作用的杨氏双缝干涉与多光束干涉实验现象,弥补了实际实验的不足。同时,计算机仿真可逼真地显示各实验现象,能给学生提供形象直观的仿真图样,这在开拓学生的视野、激发学习兴趣,提高教学效率方面起到重要的作用。
  参考文献
  [1]黄笃之,周沛锋,付学政.光学偏振实验仿真设计[J].大学物理实验,2003,16(4):6668.
  [2]胡君辉,王修信,梁颖,等.大学物理波动光学仿真演示实验的设计与实现[J].广西物理,2004,25(1):4345.
  [3]庄建,青莉.基于Matlab的光学实验仿真平台[J].成都大学学报,2006,25(1):7072.
  [4]崔祥霞,杨兆华,陈君.基于Matlab的光学衍射与干涉实验仿真[J].泰山学院学报,2009,31(3):109113.
  [5]谢嘉宁,赵建林.光栅衍射现象的计算机仿真分析[J].佛山科学技术学院学报:自然科学版,2002,20(2):1518.
  [6]蓝海江.光栅衍射及其特例的Matlab仿真[J].柳州师专学报,2008,23(3):121124.
  [7]成丕富,周青,朱力,等.用Matlab和VB实现光学实验仿真系统的开发[J].现代电子技术,2009,32(4):169171.
  [8]严泽民,辛显雪.探讨VB与Matlab相结合的几种方法[J].辽宁工学院学报,2005,25(5):299301.
  [9]黄锡泉,姚竹亭.VB和Matlab无缝接口编程[J].微计算机应用,2005,26(2):238240.
  [10]谭炎,张凌燕.Matlab与VB混合编程技术研究[J].微计算机信息,2006,22(5):247249.
  [11]王正祥,刘载文,杨斌,等.Matlab 6.5与VB混合编程中接口技术研究[J].微计算机信息,2006,22(10):187189.
  [12]梁齐,许晓琳,王明虎.光干涉实验的计算机模拟[J].大学物理实验,2003,16(3):6163.
  [13]董太源,刘建生,卢敏,等.光学干涉实验的计算机仿真模拟[J].江西理工大学学报,2007,28(3):6567.
  [14]姚啟钧.光学教程[M].北京:高等教育出版社,1981.