VC++与Matlab混合编程实现光场光强的三维显示

时间:2024-01-16 点赞:52691 浏览:109449 作者原创标记本站原创

本文是一篇参考文献论文范文,参考文献有关毕业论文开题报告,关于VC++与Matlab混合编程实现光场光强的三维显示相关硕士学位毕业论文范文。适合参考文献及现代电子技术及引擎方面的的大学硕士和本科毕业论文以及参考文献相关开题报告范文和职称论文写作参考文献资料下载。

摘 要:基于VC++开发环境和Matlab引擎函数,实现了激光衍射光场光强的三维动态显示.给出了实现过程和实验结果并进行了讨论.

关 键 词:VC++;Matlab;引擎函数库;三维显示;衍射

中图分类号:TP391文献标识码:B文章编号:1009-3044(2012)08-1906-03

TheRealizationofThreeDimensionDisplayofOpticalFieldbyMixedProgrammingofVC++andMatlab

YANGRu-chao

(SchoolofElectricalEngineering,TonglingCollege,Tongling244000,China)

Abstract:ThreedimensiondynamicdisplayoflaserdiffractionlightintensityisrealizedbythemethodbasedonthedevelopmentenvironmentofVC++andenginefunctionsofMatlabinthepaper.Therealizationstepsandtheresultarepresentedandtheresultisdiscussed.

Keywords:VC++,Matlab,enginefunctionslibrary,threedimensiondisplay,diffraction

科研与工程实际中常常需要实时测量光场的光强分布规律,目前市场上尚无这方面的测量设备,本文结合实验室已有的设备进行了进一步开发,开发中采用了面阵CCD技术以及VC++与Matlab混合编程技术.

1MATLAB与VC++应用程序接口

1.1MATLAB与VC++应用程序接口

MATLAB与VisualC++之间有4种常见的接口:

1)在VisualC++程序中利用MATLAB引擎来调用MATLAB函数;

2)将MATLAB程序编译成MEX文件,与VC程序进行链接;

3)VisualC++程序直接利用MATLAB数学库调用MAILAB函数;

4)将MATLAB下的.m文件转换成VC可调用动态链接库(DLL).

方法1)、2)生成的程序需要在安装了Matlab软件的系统中运行,而由方法3)、4)生成的程序可以脱离Matlab环境.

本文采用的是方法1),即VisualC++调用MATLABengine.MATLABengine是一组函数,通过调用这组函数,用户可以在程序中实现对MATLAB的控制,完成计算或者绘制图形的任务,此时MATLAB软件就相当于一个计算引擎.


1.2MATLAB引擎程序建立

下面介绍如何在C/C++中调用MatlabEngine

1)在工程中加入MatlabEngine的头文件路径和库文件路径

在菜单中选择Tools->Options->Directories,添加engine.h所在的路径,在笔者的计算机上路径是D:\MATLAB6p5\extern\include.类似的,在这个对话框的“Showdirectorieor:”下拉菜单中选择LibraryFiles,然后添加库文件的路径,路径是D:\MATLAB6p5\extern\lib\win32\microsoft\msvc60.

2)接下来设定工程属性,在菜单中选择Project->Settings->Link,在Object/LibraryModules中加入库文件链接libmx.lib,libmex.

lib,libeng.lib.

程序执行时后台会启动一个Matlab进程,这是与Client通信的Server端,如果希望隐藏这个窗口,需要在代码中加入这样一句:

engSetVisible(ep,0),

1.3MATLAB引擎函数

在Matlab引擎函数库中,共提供了13个C语言引擎函数.这些引擎函数在头文件engine.h中进行了声明.下面是6个常用引擎函数:

1)engOpen:启动Matlab引擎;

2)engClose关闭Matlab引擎;

3)engGetVariable:从Matlab工作空间中获取一个变量;

4)engEvalString:执行一个用字符串表示的Matlab表达式;

5)engOutputBuffer:确定存放Matlab输出结果缓冲区域;

6)engPutVariable:将mxArray结构体类型变量输送到Matlab工作空间中,并命名mxArray结构体类型变量.

2三维显示程序的创建

该研究的应用背景立足于激光衍射光场光强的三维图像信息的抽取,需要进行三维图像的显示和数字滤波的实现.在Matlab的运行环境下,三维图象的显示只需要一个函数mesh()就可以实现.假设图象数据存放在iTemp二维数组中,VC与Matlab间的数据交换是通过Matlab引擎进行的.Matlab提供一种专门的对象类型数组mxArray完成数据传递的任务.这里注意的是Matlab的数据是按列存储的.部分程序如下:

inti,j,

doubleiTemp[300][740],

doublearray[740*300],

Engine*ep,

mxArray*T等于NULL,

//将二维数组iTemp的数据存储到一维数组array中f

or(i等于0,i<300,i++)

for(j等于0,j<740,j++)

array[j+i*740]等于iTemp[i][j],

//开始启动matlab引擎

if(!(ep等于engOpen(NULL)))

{

MessageBox((HWND)NULL,(LPSTR)"Can’tstartMATLABengine",

(LPSTR)"VC_MATLAB",MB_OK),

exit(-1),

}

//矩阵的构造与赋值

T等于mxCreateDoubleMatrix(740,300,mxREAL),

memcpy((char*)mxGetPr(T),(char*)array,740*300*sizeof(double)),

//将变量T输入到matlab工作空间

engPutVariable(ep,"T",T),

//通过matlab引擎库的库函数engEvalString()调用内建的绘图函数

engEvalString(ep,"mesh(T.’),"),

//关闭matlab引擎

engClose(ep),

//析构结构体变量T

mxDestroyArray(T),

3实验结果与讨论

实验装置见图1,选用交流电子稳压电源,可以提高激光器的稳定性.用偏振光减光器来调节激光光强,以便于CCD器件的采集.为了得到较好质量的三维光强分布曲线,可以在单缝与激光器之间放入一个小孔光阑限制激光束的大小.实验在暗环境中进行.光屏与单缝之间的距离尽可能的满足远场条件,缝宽在0.05~0.1mm时,Z>1m即可,这样就可以得到近似的夫琅和费衍射.

图1测量装置示意图

上述三维显示程序是整个系统软件的一个部分,我们采用CCD摄像头对单缝衍射光场进行采集,再通过调用三维显示程序,就可以很形象的显示出三维光强分布,如图2,Z轴表示衍射光场光强的灰度值大小,X轴和Y轴表示衍射光场的列数与行数.通过工具栏上的旋转按钮可以进行任何视点角度的观察.调用三维显示程序,能更准确,快速,方便的定量描述光的衍射.

从图2可以得知,当x等于0时,光强为主极大值,光强最强,说明绝大部分的光能都落在明纹上,暗条纹是以明纹为对称轴的左右对称分布的,明纹两侧的亮纹强度逐次减弱,除了一级亮纹和二级亮纹之外,其他级次的亮纹都不明显,近似为0.

图2激光衍射光强三维图

4小结

混合编程是综合使用多种开发工具技术优势的一种常用手段,本文通过对VC++和Matlab的集成开发,实现了对二维衍射光场光强的三维效果显示.Matlab具有强大的信号处理函数库能实现信号生成、信号重抽样、各种积分变换等,对衍射光场光强的数据的进一步处理提供了极大的方便.

相关论文

实现VC++与MATLAB混合编程

本文是一篇软件开发论文范文,软件开发方面有关自考毕业论文开题报告,关于实现VC++与MATLAB混合编程相关本科毕业论文范文。适合软件开发及参。

VisualC++与Matlab混合编程方法的对比

本文是一篇可靠性论文范文,可靠性相关本科毕业论文范文,关于VisualC++与Matlab混合编程方法的对比相关大学毕业论文范文。适合可靠性及方法。

C#,JA与MATLAB混合编程技术

本文是一篇计算机论文范文,计算机方面有关毕业论文格式范文,关于C ,JA与MATLAB混合编程技术相关研究生毕业论文开题报告范文。适合计算机及。

VB与MATLAB混合编程与实现

本文是一篇计算机论文范文,关于计算机类本科毕业论文范文,关于VB与MATLAB混合编程与实现相关学年毕业论文范文。适合计算机及自动化及参考文。

MATLAB与VC++混合编程的应用

本文是一篇软件开发论文范文,关于软件开发毕业论文模板,关于MATLAB与VC++混合编程的应用相关毕业论文参考文献格式范文。适合软件开发及文件。