计算物理论文 下载本文

内容发布更新时间 : 2024/5/3 11:46:08星期一 下面是文章的全部内容请认真阅读。

白光和单色光干涉、衍射光学实验的Matlab模拟

摘要

光学的几个重要实验都可分为单色光和白光用Matlab模拟,为了使模拟的图样更符合实际,颜色的处理和颜色与光强的结合就成为关键。对于单色光的实验模拟,利用函数imread读取光谱图片,得到各个颜色对应的RGB值,将其与不同颜色光的波长对应起来。用光强公式得出的光强值之后,与RGB三个分量值相乘,实现光强和颜色的结合;对于白光的实验模拟,采用RGB图像红、绿、蓝三原色的思想,光强公式分为三部分,公式中的波长分别使用红绿蓝光的波长,两部分都用image或imshow函数来显示RGB图像。最后,使用Gui综合各个实验,使界面人性化。

关键词

单色光 白光 杨氏双缝干涉 牛顿环干涉 迈克尔逊干涉仪(等倾干涉) 圆孔夫琅禾费衍射 夫琅禾费单缝衍射

引言

Matlab 有着强大的图像处理与数值计算功能, 用它模拟光学课程教学中的几个典型实验,不仅可以方便的呈现于实验观察到的图样相符的结果,而且可以摆脱仪器的限制,成本低,方便教学演示。模拟时关键是颜色和光强如何同时呈现的问题,利用真彩色图像的RGB理论可以很好的解决单色光和白光的干涉衍射问题。

正文

一、光学原理

1、杨氏双缝干涉

设单缝光阑S到狭缝S1和S2距离相等,光屏离狭缝间距为z,假设S是单

色光源,考察屏幕上一点P,从S1和S2发出的光在该点叠加产生合振动的强度

为: ,若实验装置中S1和

S2狭缝宽度相等,有,则。

图一 杨氏双缝干涉 图二 牛顿环干涉 2、牛顿环干涉

牛顿环干涉属于分振幅干涉,是一种通过分振幅获取相干光的的等厚干涉现象。两相干反射光在某点P处叠加,合成光强I=4I0cos2(Δθ/2),I0表示两反射光的强度,Δθ=2πΔr/λ,Δr表示自空气间隙上下表面反射光的光程差,Δr=2t+2d+λ/2。t是透镜底部与平板之间空气层的厚度,d=R-√R2-r2,R是透镜的半径,r是干涉条纹的半径。

3、迈克尔逊干涉仪(等倾干涉)

迈克尔逊干涉仪利用分振幅法产生双光束以实现干涉。通过调整该干涉仪,可以产生等厚干涉条纹,也可以产生等倾干涉条纹。对于等倾干涉条纹. 根据光波的迭加原理可得出迈克尔逊干涉仪的等倾干涉的光强分布为:

I=I0cos2{2πdcos[arctan( r / f) ]/λ},d 为由分光板分束, 经相互垂直的两平面反射镜反射的二相干光束的光程差的一半, 相当于空气平行薄膜的厚度, f 为屏幕前透镜的焦距, r2=x2+y2。随着d的增加,干涉环从中心冒出,随着d的减小,干涉环向中心收缩。

图三 迈克尔逊干涉仪 图四 圆孔夫琅禾费衍射

4、圆孔夫琅禾费衍射

夫琅和费衍射,是指衍射屏与接受屏之间的距离均为无限远的场合。 一束平行光自左边入射到圆孔衍射屏上,经中间的透镜后在右边的接受屏上形成衍射条纹。利用菲涅尔-基尔霍夫积分公式得到接受屏上P点的光强I=I(02J1

2(x)/x),I0是衍射场中心的强度,J1(x)为一阶贝塞尔函数,x=2πasinθ/λ,

a是圆孔的半径,θ是衍射角。

5、夫琅禾费单缝衍射 光强

2

,其中,,a为单缝的宽度,θ为衍射角,

I0=a,沿不同衍射方向会有不同的光强。

二、RGB图像相关原理

本论文采用RGB图像。RGB图像,即真彩图像,在MATLAB中存储为数据矩阵。数组中的元素定义了图像中的每一个像素的红、绿、蓝颜色值,像素的颜色由保存在像素位置上的红、绿、蓝灰度值的组合确定。任意像素点(r,c)颜色的显

示由三数组(r,c,1:3)决定。每一像素的三个颜色值保存在数组的第三维中。

Matlab的RGB数组可以是双精度的浮点类型、8位或16位无符号的整数

类型。在RGB的双精度型的数组中,每一种颜色是用0到1之间的数值表示。例如,颜色值为(0,0,0)时为黑色,(1,1,1)对应白色。8位RGB图像的颜色数据是[0 255]之间的整数,而不是[0 1]之间的浮点值,颜色值为(255,255,255)的像素显示为白色。将unit8类型转换为double类型时,首先要除以255。即:RGB64=double(RGB8)/255。

在Matlab中可以调用image或imshow函数来显示RGB图像。RGB是m*n*3的矩阵。格式为image(RGB),imshow(RGB)。

在Matlab中用函数imread来读取图像文件,函数调用格式为:A=imread(filename,fmt)。大多数图像用8位或更少位颜色来存储像素点值,当把这些图像数据加载到内存中时,Matlab会根据不同的文件类型保存为不同数据类型。 三、核心代码(单色光)

单色光的各个实验的编程原理相似,不同的只是光强公式,以单色光的杨氏双缝干涉为例。

首先要解决颜色和光波波长一一对应的问题,使用真彩色的RGB理论, 使用imread函数读入存在MATLAB默认路径中的光谱图“guangpu.bmp”,该产生一个三维数组,对应颜色的RGB值。运行后可知该三维数组为26*444*3的,可以理解为三个页面依次保存各像素点的红、绿、蓝颜色值,每页上有26行444列,每个像素点的颜色为这三个值组合而成的。同时,每页上的各行数值相同,因此只需要将每页的第一行提取出来使用。

光谱图(“guangpu.bmp”)

guangpu1=double(imread('guangpu.bmp'));

guangpu=[guangpu1(1,:,1);guangpu1(1,:,2);guangpu1(1,:,3)];

接下来就是将提取出的RGB值与波长对应起来,不妨设定光谱图波长范围[380 780],结合round取整实现输入一个波长找出它在数组中的位置的效果,由于8位RGB图像的颜色数据是[0 255]之间的整数,而不是[0 1]之间的浮点值,将其除以255,即可将其转换为[0 1]之间的浮点值,以利于接下来的画图。

yanse=guangpu(:,round(((lambda*1e6-380)/400*444)))/255;

然后设置屏幕宽度、屏幕到缝的距离的大小,编写有关相位差、光强的计算公式。

ym=1.25; %国际单位,米

y=linspace(-ym,ym,101); z=1000; L1=sqrt((y-1).^2+z^2); L2=sqrt((y+1).^2+z^2); phi=2*pi*(L2-L1)/lambda; I=4.*(cos(phi/2)).^2;

最后,从yanse中提取出RGB的红、绿、蓝三个分量值,并通过光强I值与RGB

分量值的乘积实现光强和颜色的结合。用image或imshow函数画出干涉条纹。

zong(:,:,1)=I*yanse(1); zong(:,:,2)=I*yanse(2); zong(:,:,3)=I*yanse(3); image(zong/4)

实验模拟的结果在GUI中显示,程序中将所有实验用到的参数统一起来,都呈现在面板上,但同时又设置模拟某个实验时只出现它对应的参数,用不到的参数不显示滑动条,方便用户知道每个实验对应的参数。

GUI使用时,先用滑动条把edit text调出数值,这样才运行处正确的结果。接下来选择实验项目,设置参数,之后再点击一次实验项目,就可出现图样,参数选择得当才可得到漂亮的图样。 结果如下:(1)、杨氏双缝干涉