迈克尔逊干涉条纹的计算机采集与处理

1 引 言

迈克尔逊干涉实验是通过对干涉条纹变化的计数进行物理量的测量。实验者用肉眼注视干涉图的变化,并测得条纹的淹没或冒出次数。实验教学中通常要求计满500个,这是一个较长时间的多次数重复的操作,随着实验者的疲劳度增加,计数的误差就会增大,这就降低了测物理量的准确性。为了避免该缺点,研制出了各种条纹变化自动计数仪[1, 2]。大多是一种用电路采集并处理的方法,特点是响应快、精度高,但电路调试比较麻烦。现在CCD摄像头的应用已经相当普遍[3, 4],普通的摄像头都能达到500万像素,以及30帧/s的响应速度,这基本能满足本实验的数据采集要求。若选用免驱动的USB接口的摄像头,只要连上计算机便能实时地显示在屏幕上,配上相应的软件便可实现信号的实时处理。与电路实现的计数器相比,虽然响应速度慢了点,但功能上用软件方法实现,简化了调试的复杂与维护的困难,并且便于功能上的升级,并且还能在实验时通过计算机屏幕看到实验现象,比用肉眼直视激光安全得多了。

2 工作原理

迈克尔逊干涉仪的工作原理如图1所示,光源S发出的光束被分光板G1分成2束光强近似相等的反射光1和透射光2,又分别被平面镜反射后在E处相遇产生干涉。在迈克尔逊仪器实际使用中,迈克尔逊干涉仪的工作原理的是利用产生的环形等倾干涉圆条纹来测量单色光的波长。根据干涉原理, E处的干涉条纹空间分布与由M2和M1反射的2列相干光波的光程差有关,

Δ=2dcosi (1)

式中,i为反射光1在平面镜M2上的入射角。对于第k条纹,则有

2dcosik=kΔ(2)

M2和M′1的间距d逐渐增大时,对任一级干涉条纹,例如k级,必定是以减少cosik的值来满足式(2),故该干涉条纹间距向ik变大(cosik值变小)的方向移动,即向外扩展。这时,观察者将看到条纹好像从中心向外“涌出”,且每当间距d增加λ/2时,就有一个条纹涌出。反之,当间距由大逐渐变小时,最靠近中心的条纹将一个一个地“陷入”中心,且每陷入一个条纹,间距的改变亦为λ/2。因此,当M2镜移动时,若有N个条纹陷入中心,则表明M2相对于M1移近了,

Δd =N·λ/2(3)

所以实验的关键点是N的测量,用人工目测的方法稳定性不高。而利用CCD把图像数据实时采集下来,由计算机软件控制计数以及信号的处理,则更能适应各环境变化的要求。

3 干涉条纹的采集原理

计算机图像采集装置,如数码相机、图像采集卡、CCD摄像头等,其选择余地比较大。对于一般的物理实验中可以选择带USB接口的CCD摄像头,使用较方便,在W indowsXP平台上大都是免驱动的。若只检测光学图像的条纹数,参数上只要满足200万以上的像素和30帧/s的反应速度就可以了,在W indows系统中,Microsoft为数字视频的应用提供了一个功能强大的VFW(Video forW indows)

SDK包[5],其中的AVICAP.DLL就包含了执行视频捕获的函数,它给AVI文件I/O和视频的驱动提供了一个基于消息的高级接口。通过调用该动态连接库实现对视频设备的连接、控制和视频数据的实时采集[6, 7]。MicrosoftVisualBasic6. 0支持VFW,它在进行与视频设备通讯时,必须遵循这样的基本的流程,如图3示。具体实现的部分代码:

  (1)被调用的W indowsAPI函数。

Private Declare Function SendMessageA Lib (ByVal hwnd AsLong, ByValwMsgAs Long, ByValwParam As Long, lParam AAny) As Long//用于建立视频捕捉窗口的函数,函数返回视频窗口的句柄。

Private Declare Function capCreateCaptureW indowA Lib "avi-cap32. dll" " avicap32. dll" (ByVal lpszW indowName As String,ByVal dwStyleAsLong, ByValX AsLong, ByValY AsLong, By-Val nW idthAs Long, ByVal nHeightAs Long, ByVal hwndParentAs Long, ByVal nID As Long) As Long//这是一个消息发送函数,用于软件与摄像头的通讯。
(2)视频设备的连接。

CapHwnd = capCreateCaptureW indowA("CaptureW indow",0, 0, 0, 640, 480, Me. hwnd, 0) //创建视频捕捉窗口DoEvents//将控制权传给操作系统
SendMessageA CapHwnd, CONNECT, 0, 0//连接视频设备

(3)图像的采集。为便于计算机进行处理,把图像数据采集到一个即定的容器中(指Picture控件)。SendMessageA CapHwnd, GET_FRAME, 0, 0 //设定视频采集的帧速

SendMessageA CapHwnd, COPY, 0, 0//把捕捉到的视频内容拷贝到剪贴板
Picture1. Picture = Clipboard.GetData() //剪贴板的内容拷贝到图片框
为满足实时采集的要求,图片框的内容要不断地更新,故这段代码可放在Timer控件中,注意控件的Interval属性设置,使其采集频率>2倍摄像头帧频。

(4)像素点光强的确定。光学图像的某点光强由该点像素点的灰度值描述。先由控件的Picture的Point方法则读取图像(X,Y)处的像素值Pi,然后提取该像素点的RGB值。