MATLAB实验牛顿环实验的MATLAB仿真

更新时间:2023-09-22 23:58:01 阅读量: 经管营销 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验三 牛顿环实验的MATLAB仿真

一、实验目的

MATLAB在光学实验的计算机仿真方面有着重要的应用。使用MATLAB可以仿真大多数光学实验,例如杨氏双缝干涉实验、牛顿环实验、夫琅和费衍射等,使得原本抽象的必须借助实验仪器才能感知的光学现象可以直观而且动态的显示在计算机上,从而获得对某一特定光学现象充分的感性认知,加深我们对抽象光学现象的理解和认识。这里将以牛顿环实验的MATLAB仿真为例,向大家介绍光学实验的MATLAB动态仿真的基本方法并通过上机练习以达到如下几个目的:

1. 掌握用imshow实现光强度二维分布的可视化显示方法; 2. 掌握MATLAB动态仿真技术—影片动画技术;

二、实验原理

1. 牛顿环干涉原理

右图所示为牛顿环装置的示意图。R为牛顿环透镜的曲率半径,d为空气膜的厚度(R??d)。垂直入射光经空气膜的上下两表面反射后产生干涉,干涉后的光强

I?I1?I2?2I1I2cos(??) (1)

其中I1和I2是两束相干光的光强,可近似认为 I1 = I2 = I0。??为两束光相遇时的位相差

???2?(2d?) (2)

?2?由图中的几何关系以及R??d条件可得

r2d? (3)

2R(2)、(3)式代入(1)式后有

图1

I?2I0sin2(?r?r)?sin2() (4) R?R?22上式中为了方便取系数2I0 =1。在直角坐标系中r2?x2?y2,(x,y)代表光强的二维分布

点的坐标。(4)式是实验仿真的基础,对于任意给定点(x,y),如果该点的光强I取最大值1,则该点为明条纹所在;若光强I取最小值0,则是暗纹所在;其他值则介于两者之间。

(4)式给出了牛顿环干涉光强的二维平面分布,那么如何将光强的平面分布(数值)可视化显示出来?下面介绍一种简单的实现方法。

2. 光强分布的可视化实现

对于数据的可视化,MATLAB提供了很多实现方法,比如前面介绍的plot、plot3、surf函数等。对于牛顿环实验来说,虽可以使用surf函数将光强I在xy平面上的分布表现出来,但是得到的是3维曲面图,和实验观察到的2维环状的干涉条纹图形不一致,达不到仿真的目的。所谓仿真,也就是把实验观察屏上二维的干涉条纹图像通过计算机再现出来,这就是图像显示技术。图像显示是一种特殊的图形绘制,MATLAB提供了一系列创建和显示图像对象的命令,例如image, pcolor,imshow等。考虑到干涉条纹的明与暗可用白与黑来显示,而强度介于两者之间的条纹则可用不同层次的灰度来显示,因此选择灰度图像来显示牛顿环的干涉条纹比用彩色图像显示效果更逼真;此外,相对来说用imshow创建灰度图像比用image和pcolor在语句上要简单些,所以这里我们选择imshow指令来进行光强的可视化操作(即干涉图像的再现),至于image和pcolor指令亦可实现不过语句稍复杂些,感兴趣的同学可以参考有关的资料。

使用imshow建立灰度图像的使用格式:imshow(I,N)

其中参数N为正整数,指定灰度的层次,当缺省该参数时,系统默认为256级的灰度级;参数I为数值矩阵,imshow的作用就是将数值矩阵I的元素值用N个灰度级的黑白图像可视化显示出来。实际上是在数值矩阵I和N个灰色调之间建立了一种颜色映射关系:I当中元素值最大者映射为白色(将该元素值作为白色显示),元素值最小者映射为黑色(将该元素值作为黑色显示),元素值介于最大和最小之间的则按照某种约定的规则映射到其它的灰度级(显示为不同灰度的灰色)。

为了方便叙述,假定再现的图像尺寸2mm×2mm,使用上述指令可以很方便的将牛顿环干涉条纹在该区域内再现:

? 首先,利用(4)式获取干涉光强I在该区域(?0.001?x?0.001, ?0.001?y?0.001,

假定观察屏是xy平面)的数值分布 x=linspace(-0.001,0.001,200); y=linspace(-0.001,0.001,200);

[X,Y]=meshgrid(x,y); %将xy平面2mm×2mm的区域分割为200×200的网

%格(像素),矩阵X、Y分别输出格点的x和y坐标

r2=X.^2+Y.^2 ;

I=abs(sin(pi*r2/R/?)).^2;

% 200×200的数值矩阵;计算格点上光强I,得到光强的数值分布

? 接下来使用imshow指令将数值矩阵I可视化

imshow(I) 3. 动态仿真技术

牛顿环实验(也包括其他光学实验)的仿真有2个环节,其一是将观察屏(xy平面)上

干涉光强的分布可视化显示;其二是动态仿真,比如当空气薄膜的厚度连续改变时(通过向上移动牛顿环中的透镜),干涉条纹也会随之移动,采用动态仿真可以再现这一过程。前者我们在第2小节中做了介绍,下面介绍一种MATLAB动态仿真技术—影片动画技术。

顾名思义,影片动画技术类似于电影的制作,其原理是首先对仿真的过程按时间次序进行“拍照”,获得一帧一帧的画面(称为帧),并将之存档,然后再按时间顺序以高于视觉暂留的帧频率播放帧,即可获得类似于电影的动画效果。这种动画技术适用于难以实时快速绘制的复杂画面,但计算量大,占用内存较多。在MATLAB中实现影片动画依次要用到下列几个函数:

① moviein函数 该函数将产生一个结构体数组(structure,以下称帧结构体)来存放动画的帧(即所拍摄的一幅幅画面),每帧画面作为结构体的一个元素保存。调用格式 fmat = moviein (N)

作用是创建一个能存放N个帧的(1×N)结构体数组fmat。该结构体包含两个域cdata和colormap,前者用于存放帧的图像数据,后者存放帧使用到的颜色表。

② getframe函数 该函数作用是对当前的图像进行快照(“抓拍”),通常有两种使用格式: A. getframe 该格式不带参数,“抓拍”当前坐标轴里的内容;

B. getframe(h) “抓拍”某个图形窗口或坐标轴里的内容,该图形窗口或坐标轴以句柄h标识(图形窗口和坐标轴都是一种图形对象,每一种图形对象都有自己特有的句柄handle,即标识,类似于“身份证”)。例如

>> fmat(1) = getframe (gcf)

抓拍当前图形窗口下的内容,并将该帧画面存放于帧结构体fmat的第一个元素中;gcf为Get handle to current figure的缩写,意思是获取当前图形窗口的句柄。在命令窗口中输入gcf可显示当前图形窗口的句柄值,是个整数。 ③ movie函数

作用是按顺序回放帧结构体fmat中存放的各帧画面以产生动画感。一般格式:

movie(h, famt, n, fps)

h 是播放动画的图形窗口或坐标轴的句柄,缺省时表示在当前的坐标轴中播放动画; famt 是帧结构体名,不可省;

n 是重复播放的次数,缺省时,只播放一次;

fps 代表每秒播放的帧数(即帧频),一般应快于视觉暂留,缺省时系统默认fps=12。

在动画播放前,movie函数首先将每帧图像的数据载入内存(此时图像会一帧一帧的显示出来),然后再按照用户设定的参数(重复次数n、帧频fps等)播放动画。

除了movie函数,MATLAB还提供了一个函数movie2avi,该函数能够在当前的工作目录下创建一个avi视频格式的动画文件。一般的调用格式: movie2avi(fmat, filename)

famt 为前述的帧结构体名,filename是字符串,指定avi格式的文件名。 例1:

Z=peaks; % MATLAB提供的三维函数 surf(Z);

TheAxis=axis; % 保存坐标值,使得下面所有帧都在同一坐标系。变量TheAxis

% 为6个元素的向量,分别代表x、y、z轴的最小、最大值

F=moviein(20); % 创建可以存放20帧的帧结构体 for j=1:20 % 该循环“抓拍”20帧画面并存放到F中

surf(sin(2*pi*j/20)*Z,Z); % 画出每一步的曲面(帧) axis(TheAxis); % 使用相同的坐标系。

F(j)=getframe; %“抓拍”帧,并存在到帧结构体 end

movie(F,10) % 回放保存在帧结构体F中的画面,重复10次,帧频12(缺省值) movie2avi(F,’example’); % 制作avi格式的视频动画

注意:“抓拍”到的画面总帧数对动画的播放速度、连续感会产生影响,请将帧数修改为10,重新运行程序观察结果。另,帧数越大帧结构体的内存开销也跟着增加。

四、实验内容及要求

1. 绘制牛顿环干涉条纹图

在牛顿环实验中,假定透镜的曲率半径R=0.855m,入射光波长为589.3nm的钠黄光,实验观察到一幅6mm×6mm大小的牛顿环干涉条纹图。请结合(4)式使用imshow指令对该图像进行静态仿真。

要求:以M文件的形式编写程序,并调试通过,得到的干涉图像存为.jpg文件格式。 2. 空气膜厚度连续变化时的动态仿真

若将图1中的透镜缓慢的向上移动,则每个点处空气薄膜厚度d将连续增加,假设空气膜厚度的变化用?d表示,则薄膜上下表面的反射光之间的位相差由(2)式变化为(5)式:

???2??(2d???2?d)???0???' (5) 2其中,??'?4??d?2代表空气膜厚度变化导致的附加位相差。相应地光强表达式也要修正为:

?r22??dI?sin(?) (6)

R??假设?d的初终值分别为?dstart?0,?dend?2?m。空气膜厚度每变化0.04?m时,绘制一次干涉条纹图像,然后使用getframe命令“抓拍”并存在帧结构体中,直到?d=2?m(使用

循环控制语句,参照例1)。最后用movie命令回放存贮的“画面”形成动画。

要求: 在实验内容1的基础上,结合影片动画技术修改程序,实现空气膜厚度连续增加时

牛顿环实验的动态仿真,观察条纹的变化规律。尝试做思考题2。 提交程序。

五、思考题

1. 在内容1中,如何提高仿真图像的像素使得再现图像更清晰?

2. 在内容2中,假设透镜从上往下移动,即让?d的初终值分别为?dstart?2?m,?dend?0,修改你的程序,观察干涉条纹将如何变化?

本文来源:https://www.bwwdw.com/article/stcd.html

Top