x=y=[X,Y]=meshgrid(x,y)%生成x-y平面的自变量“格点”矩阵Z= %根据Z=f(x,y),surf(X,Y,Z)%绘制曲面图
毫无疑问,一篇优秀论文的必备要素之一就是精美的插图(仅针对理工类论文,文科不清楚)。插图也被称作论文的眼睛,起着画龙点睛的作用。 首先,个人经验,优秀的论文插图应该有以下特点。 1. 图片大小合理,清晰/美观 ;(这是最重要的!) 2. 坐标轴有标注和单位; 3. X轴不要有留白,Y轴可以有留白; 4. 有图例、网格; 5. 所有汉字、字母、数字的字体大小合适,一般 与正文字体相当或小一号 ; 6. 同一篇文章内的风格要一致,比如坐标轴与图片边界的距离一致,这样图片显得整齐; 7. 配色是点睛之笔。(红配绿什么的,还是算了吧...) 一个常见的问题是,用MATLAB精心画好的图像,保存为图片并插入到Word中,总是不清晰,不够美观。本文就介绍如何设置MATLAB导出图片的格式、大小、分辨率等等(画图的技巧很多,一次可能写不完,以后有机会再写点。)
图片的 分辨率 需要设置很好理解,但为何图片的大小也需要设置?完全可以在Word中把图片拉大或者缩小啊?导出的矢量图完全可以任意放大缩小而不会失真啊。这是常见的错误想法, 在Word中放缩图片会导致图中字体大小、线宽、坐标轴与图片边界的距离等发生变化 ,导致图片不够清晰美观。 举一个简单的例子,下图是没有设置图片的大小,分辨率设为300dpi,另存为jpg格式的结果。可以看到,字体太小(虽然设置的是11号字,但由于图片太大,插入到文中必须要压缩,导致字体变小。)
在图片的菜单栏,文件->导出设置,对图片的大小、分辨率等进行设置。 关于 图片大小 ,应该通过计算得到宽度和高度。例如A4纸的宽度为21cm,如果左右页边距各为,正文的宽度就是16cm。如果页面是单栏,设为宽度14cm,高度比较合适( 黄金比例 )。双栏的话,宽7cm,高即可。
注意:emf文件可以用Visio打开,“取消组合”后进行二次编辑。
这里上一下最后导出的图片。
总结 :
直接plot3(x,y,z)就行了,比如:
x=0:pi/50:10*pi;
>> y=sin(x);
>> z=cos(x);
>> plot3(x,y,z)
普通的毕业流程图,用Microsoft Office Visio,我的毕业设计论文用的Microsoft Office Visio 2003,更多怎么画、论文插图教程直接在附件,因为图太多了、字数太多了,就不举例了。
直接plot3(x,y,z)就行了,比如:
x=0:pi/50:10*pi;
>> y=sin(x);
>> z=cos(x);
>> plot3(x,y,z)
word可以画,但是扩展性不好。推荐visio,微软的专业作图工具,使用类似Office套件
中是图片格式导致不能编辑为啥呢?因为很多人写论文都是网上找的素材,有的根本就没有数据,可能只是一张图而已。直接拿来用,肯定是不符合老师要求的。这时候也分两种情况:一种是从图上可以看出源数据的比如有数据标签啊,我们就可以根据这个数值重新做一遍啦。另外一种就是看不出来源数据的(如上右图)很大几率上你是不可能找到源数据出处的。难道这个就死翘翘没得救了么?非也非也,我们可以大致模拟出来,反正图上不需要标注实际数据(who cares?),我们只需要将图表在word中做出来即可,怎么处理?可以参照我以前的一篇头条分享文章——《 如何依葫芦画瓢?论无数据源图表的制作》中的图表可以编辑,但是修改不了源数据如下图所示:一般出现这种情况是由于word并不是'凶案'的第一发生地,即图表可能是在excel或者PPT中完成后复制到word中去的(office三件套很多功能是相通的),这个并不足以造成不可编辑,还有一步就是word文件发生了传递,而源文件却并没有同步传递。何以见得?其实word中可以查看图表的源数据的。Tips:所以碰到这种情况,如果我们是在其他工具里面作图的,最后复制后,我们最好把源文件和目标word文件打包一起传递,这样源数据不至于丢失。虽然不能编辑源数据,但是图表还在,修改格式什么的还是可以做到的。那么,今天的实战案例来了,对下面的图,如何去掉0值标签以及0和8之间的线条以及0对应的点和线, 即达到下面的效果:思路:1.假如我们知道数据从头开始做,这个问题就so easy,我们只需要:1)将前面几个数据留空即可,设置一下显示2)或者将前面几个数据设置为NA#,也能达到一样的效果2.直接在图上改造,我们应该怎么做?制作步骤:去掉0?a.删除数据标签双击定位单个数据标签后,按delete键即可b.自定义格式这招独辟蹊径,我们这里只是要不显示0而已,如果我懒得一个个点击删除,我可以一次性设置。将数据标签设置自定义格式为0;0;这个设置的意思是正、负数正常显示,不显示0值,关于自定义格式不属于我们这里要展开的知识点,大家可以私底下去复习了解一下这个机理。c.设置0的标签值字体颜色为背景白色去掉数据标记和线条?这里我们用的方法就是设置色彩为无或者不显示,原理很简单,大家直接看图。操作的诀窍就是双击选中某个点,然后设置线条为无以及标记点为无即可(也可以设置颜色为白色背景色,欺骗眼睛假装它不存在),每个点影响其本身的数据标记符号以及前面的一小段线的控制范围
论文流程图如何制作,示例如下:
第一步:WORD文档中做流程图,可在插入图形中选择流程图框件和箭头完成流程图的制作。
第二步:打开需要操作的WORD文档,在工具栏“插入”中找到并点击“形状”,在弹出的选项中选择流程图框图和线条进行流程图制作。
第三步:在框图上点击鼠标右键,选择“添加文字”可为框图添加文字,返回主文档发现流程图制作完成。
用word画流程图会比较麻烦,可能耗费半天的时间都不一定能够画好,可以考虑在专门的画图工具完成,然后再插如到word,比如ProcessOn,论文框架完成后,图形直接用鼠标拖拽进画布,再根据需要自定义连线、安排位置,进行颜色设置等都可以实现。完成之后可以下载成png或者高清pdf使用。
扩展资料:
论文是一个汉语词语,拼音是lùn wén,古典文学常见论文一词,谓交谈辞章或交流思想。当代,论文常用来指进行各个学术领域的研究和描述学术研究成果的文章,简称之为论文。
它既是探讨问题进行学术研究的一种手段,又是描述学术研究成果进行学术交流的一种工具。它包括学年论文、毕业论文、学位论文、科技论文、成果论文等。
可以用visio,也属于办公软件的一种,用它画图方便,画好的图用在word文档中也方便,就全选,复制,粘贴到word就行了,visio还提供了很多种类的绘图类型,用起来很方便
普通的毕业流程图,用Microsoft Office Visio,我的毕业设计论文用的Microsoft Office Visio 2003,更多怎么画、论文插图教程直接在附件,因为图太多了、字数太多了,就不举例了。
word可以画,但是扩展性不好。推荐visio,微软的专业作图工具,使用类似Office套件
Origin是一款 数据分析 和 制图 的软件,具备统计、峰值分析和曲线拟合等分析功能,可以绘制出二维和三维图形。支持Excel数据导入,甚至txt (直接把txt数据文件拖入到Origin里面。但是Origin对中文的兼容性不是特别好,这种方式也缺乏效率,暂不推荐) 。界面是纯英文的,但是千万别被表象吓到。通常用到功能的不多,只要知道那些常用功能是什么就好了,上手其实很快。 不求每个功能都会,只要满足自己的需求就好。 下面是Origin的工作界面:
红色方框里添加自己的数据,说明一下:
之所以要说明这个,是因为先输入内容进入之后就不必再在图标上去做更改了,一次性就做好。其他的地方基本不用做太多说明,每个人摸索一下就能大概了解。然后相应的导入数据就可以分析和绘图了。
初次接触的人在绘图的时候会发现,绘制出来的不是一个封闭式的坐标,要么只有两个坐标轴,要么只有三个坐标轴,总有一两边不能封闭,而自己又想要获得一个封闭的图形怎么办呢?有些同学可能注意到旁边有绘图工具,所以就可能拿直线绘制了。自己尝试过手动添加坐标轴的方法,但那样的做法也很笨拙,后来经过一师兄点拨终于弄明白。做出封闭式坐标和把标尺放到坐标轴的内侧,都可以在 Title&Format 里面解决。另外,在 Scale 里面可以更改取值范围,从而绘制出看似更具有说服力的图表。
回到标题,如何把左边的图变成右边的样子?其实,操作起来比较简单,在坐标轴上双击或者右键都行,在弹出的对话框里面更改就好。以 添加顶部(Top)坐标 为例:
一般,图表的字体要和论文的字体相匹配,而Origin默认的字体是 Arial Unicode MS ,不符合我们的要求,想要换成和论文相匹配的字体,怎么办?如果先选中再用工具栏上的字体进行设置的话太过繁琐。是不是有更好用的办法?确实有!只要进行一次设置,后面的字体就不用再做修改。以自己设置的字体为例,设置如下:
也许会有人问,英文和数字设置成 Times New Roman 格式符合要求,但是汉字也是这种字体是不是不行啊?答案是可以的!如果有疑问的话可以尝试一下,Times New Roman格式的汉字和宋体格式的汉字几乎是没有区别的。也就是说,汉字设置成这种Times New Roman字体是几乎没有影响的。
Origin和Word的集成很好,可以直接把Origin图复制到Word里面,双击图的话可以进行编辑。 但是问题又来了,细心的同学会发现 Origin图边缘的空白较多,导致图片尺寸大,占用较大的空间,如果直接拖动缩小的话又怕看不清,怎么办呢? 有的同学估计想到了截图,但是截出来的是图片啊,再也不能对里面的内容进行编辑啦。如果里面有一处错误,想要修改,估计会有人Crazy的!
其实,多余空白不是Origin图的问题,而还是默认设置的问题,只需要更改一处设置,就可以完全把多余的空白剔除。并且,设置是在上面更改字体旁边的那个地方更改就好了。尽管在一处设置,但为了让大家知其然还知其所以然,所以与上面分开了说明。设置如下:
如果是一个自变量对应一个因变量这种一一对应的关系的话 (就如上面的那个图例) ,直接绘制就好了。但是如果是一个自变量对应两个或两个以上的因变量的话,如下面的双Y轴和三Y轴的图形,如何绘制呢?估计会有人犯难了。但其实也不难!
绘制的方法就是增加Y轴图层,需要双Y轴就在前面基础上添加一个Y轴图层,需要三Y轴就再加一个图层,以此类推……以双Y轴为例,操作如下:
有时候不小心把数据丢失了,只剩下Origin图了 (是Origin图文件,不是那种不能编辑的图片,那种是没有办法提取的) ,或者想要从Origin图里面提取部分数据,怎么办呢?强大的Origin也是可以办到的,确保你的数据不会丢失。操作的方法也不难:
Origin大可不必花太多的时间去学习,只要掌握基本的绘图技巧,满足自己的需要即可。
毕业论文的流程图是指用图表形式表示毕业论文的研究过程、方法和步骤,包括问题定义、文献综述、研究设计、数据采集和分析等环节。下面是画毕业论文流程图的步骤:
1.确定所需软件:可以使用Microsoft PowerPoint、Visio、MindManager等软件,推荐使用Microsoft Office Visio,它可以绘制基本流程图,不需要编程知识。
2.整理论文思路:了解论文的结构和主题,确定需要在流程图中展示哪些内容,使图表呈现有序,准确、简洁明了的框架。
可以用visio,也属于办公软件的一种,用它画图方便,画好的图用在word文档中也方便,就全选,复制,粘贴到word就行了,visio还提供了很多种类的绘图类型,用起来很方便
不可以。在撰写论文的初期需要进行草图或简单的示意图绘制,使用铅笔作为临时工具是可以的。在正式撰写论文时,应当使用电子绘图工具和适当的绘图软件,而且现在大多数学术论文会要求使用电子格式提交。因此毕业论文图用铅笔画是不可以的。
相关论文:Vc++下如何利用Matlab工具箱进行数字信号处理摘要: 本文详述了在Vc环境下如何利用Matlab工具箱进行数字信号处理,全文以Matlab工具箱中功率谱密度分析函数为例,介绍了通过Matlab自带的引擎、Matlab自身的编译器以及利用MathTools公司的Matcom进行对工具箱函数的调用。 关键词:Matlab M-文件 引擎 编译器 Matcom Vc++Matlab的信号处理工具箱是信号算法文件的集合,它处理的基本对象是信号与系统,信号处理工具箱位于目录、Toolbox\Signal下,利用工具箱中的文件可以实现信号的变换、滤波、谱估计、滤波器设计等。在其它的环境如Vc下如果能调用Matlab工具箱中的文件,会大大地加快一些算法的实现,同时其可靠性也很高。利用Matlab引擎 Matlab引擎采用客户和服务器计算方式,在运用中,Vc的C语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数: engOpen, engGetArray, engPutArray, engEvaString, engOutputBuffer ,engClose与客户机进行交互。下面例程是在Vc下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine.,在对话框 .cpp文件中加入”” 和“” 头文件,下面给出部分程序清单。Void CtestmatlabDlg::OnMatlabEngine(){Engine *ep;mxArray* T=NULL,*result=NULL,*mFs=NULL,*mnfft= NULL;double datax[1024];char buffer[1024];for(int j=0;j<1024;j++)//注:如通过采集卡采集数据可将采集的数据放在datax[]数组中,此循环就不需要{double samt=(double)(); datax[j]=sin(**samt**);}double *pPxx,*pFxx;if(!(ep=engOpen(" \0"))){//打开Matlab引擎,建立与本地Matlab的连接fprintf(stderr,"\n Can't start MATLAB engine\n");exit(-1);} double Fs[1]={1024};//因为Matlab所有参与运算的参数都是矩阵的形式,因而下列几行将参数转变double nfft[1]={1024};//成Matlab可接受的矩阵形式。T=mxCreateDoubleMatrix(1,1024,mxREAL);mnfft=mxCreateDoubleMatrix(1,1,mxREAL);mFs=mxCreateDoubleMatrix(1,1,mxREAL);mxSetName(T,"T");mxSetName(mnfft,"mnfft");mxSetName(mFs,"mFs");memcpy((char*)mxGetPr(T),(char*)datax, 1024*sizeof(double));memcpy((char*)mxGetPr(mnfft),(char*)nfft, sizeof(double));memcpy((char*)mxGetPr(mFs),(char*)Fs,1*sizeof(double));engPutArray(ep,T); //将转化的参数放入引擎中,此时可在Matlab command窗口下查看此参数engPutArray(ep,mnfft); engPutArray(ep,mFs);engEvalString(ep,"[pxx,fo]=psd(T,mnfft,mFs);"); //利用引擎执行工具箱中文件engOutputBuffer(ep,buffer,512); //如只想看显示图形,可将返回参数去掉,psd无返回参数缺省情况下会自动画图形result=engGetArray(ep,"pxx");//取出引擎中的数据放在所指的区域中供后续处理pPxx=mxGetPr(result); result=engGetArray(ep,"fo");pFxx=mxGetPr(result);engEvalString(ep,"plot(fo,10*log10(pxx));");//利用引擎画图engEvalString(ep,"title('功率谱分析');");engEvalString(ep,"xlabel('Hz');");engEvalString(ep,"ylable('db');");mxDestroyArray(T); //释放内存mxDestroyArray(mFs);mxDestroyArray(mnfft);mxDestroyArray(result);engEvalString(ep,"close;");engClose(ep);}上述程序在Vc下编译需要将 和两个动态库利用以下的命令:lib/def:<自己的Matlab的安装路径,下同>e:\ Matlab\extern\include\*.def /machine:ix86 /out:*.lib来生成程序所需的静态连接库和,将和所在的目录加入Vc++ project/link/object/library modules下即可。利用Matlab自身的编译器调用工具箱中的函数 Matlab的编译器可将Matlab的M文件转换为为C或C++的源代码以产生完全脱离Matlab运行环境的独立的运用程序,但Matlab本身的资料说明编译器如用来建立独立的运用程序,不能调用Matlab工具箱中的函数,这非常不利于搞一些特殊的算法。本人研究了一段时间发现,工具箱中的函数既然是M文件就一定可以用编译器来编译,以提供如Vc的调用函数,但是编译器只能编译一个独立的M文件,即这个 M文件不依赖于其他的M文件。如果M文件中又调用了其他的M文件,可将被调用的M文件拷贝到调用M文件的相应位置,作适当的改动就可以用于编译器编译。编译器不支持图形函数,所以M文件中如有图形函数需注释掉。当Matlab的编译器mcc加入适当的参数-e(mcc –e *.*)或-p(mcc –p *.*)就可生成将输入的M文件转换为适用于特定运用的C或C++源代码。这样如果要在Vc下编译通过,还需连入以下几个库, , , . . 以及Matlab C MATH库,建议采用前述的方法将动态连接改为静态连接。对于C/C++编译环境的设置,在Matlab command窗口下运行mex –setup 然后依提示操作,而对于C/C++连接环境的设置,运行mbuild –setup依提示操作即可。下面给出利用编译器将Matlab工具箱中文件生成可供Vc调用的函数。将文件拷贝一份至Matlab\bin目录下,改写相应调用的M文件如, 等。为生成的代码简洁,对于采集数据处理输入参数很明了的情况下可作大量的删减,最终使成为一个不依赖于其他M文件的独立的M文件,注意千万注释掉作图代码,最终改成如下形式,限于篇幅给出关键的几步: function [Pxx,f]=psd(Fs,nfft,noverlap,x)window=o,5*(1-cos(2*pi*(1:nfft)’/(nffft+1)));//hanning 窗dflag=’none’;window=window(;)………………………………….以上只要稍懂Matlab语言和信号处理知识就可完成这项工作。假设上述代码重新存为,在Matlab command 窗口下设置好环境参数运行mcc –e testwin,则可在Matlab\bin下生成 ,如运行mcc –p testwin 则生成. Vc下建立一个基于对话框的文件,然后在对话框里加一个Button控件OnButtonPsd 将上述生成的.c文件的头文件加入到工程的.cpp中,且将#ifdef_cplusplus extern “c”{#end ifc代码声明加入Vc的包含文件和生成的.C的包含文件之间将#ifdef_cplusplus}#end if加入.cpp文件未尾为了简洁且便于处理将生成的c函数稍改动,给出部分代码如下: void CTestpsdwinDlg::OnButtonPsd(){mxArray* x_rhs_;//指向采集数据存放区Fs=23510;//数据采集的频率 nfft=1024;//1024点的fftdouble datax[1024]//采集的数据x_rhs_mxCreateDoubleMatrix(1,1024,mxReal);memcpy(mxGetPr(x_rhs_),datax,1024*sizeof(double));noverlap=512;……………….……………….mccCopy(&Pxx,&Spec);mccCopy(&f,&frevgg_vector);for(int j=0;j<(int)(nfft/2+1);j++){datap[j]=mccGetRealVectorElement(&Pxx, (j+1));//功率谱密度存于datap[]数组dataf[j]=mccGetRealVectorElement(&f, (j+1));//相应频率存于数组dataf[]中}mccFreeMatrix(&Pxx);……………….SendMessageBox(WM_PAINT,0,0);//利用Vc下的图形函数画图Return;}如上生成的程序可读性不太好,而生成的c++代码则可读性较好,但千万注意只能用 Matlab的MATH库,不可用c++的MATH库,否则编译会出错,限于篇幅在此不述。3)利用Matcom调用工具箱中的函数Matcom编译M文件,先将M文件按照与Matcom的cpp库的对应关系翻译为cpp源代码,然后用对应版本的c编译器将cpp文件编译成相应的exe或dll文件,所以第一次运行要指定c编译器的路径,否则无法编译,指定好的编译信息就写在Matcom\bin\文件中,不过这一步按装matcom时,它自动寻找编译器并将其写入文件中,版中使用 OCX控件,因而它支持图形操作。我们依然用上述的文件,不要将图形函数注释掉,利用Mideva来生成可被Vc调用的信号处理程序。运行Mideva在主界面上直打开M文件,在菜单中选择compile to dll,输入testwin..在Matcom debug目录下可以找到这样的几个文件, ,等。 将上述和加入工程中,project/add to project/files并且在相应的文件中加入”” 加连接库:Tools\option\directory\ , 选include选项,加入e:\matcom45\lib (包含) library选项,加入e:\matcom45\lib4) project\add to project\files 文件类型选项选(.lib)将e:\matcom45\lib\加入工程中编译运行。相应代码如下:void CtestmatcomDlg::OnpsdButton(){double datap[512],dataf[512];initM(MATCOM_VERSION);//初始化matcom库Mm Fs,nfft,noverlap;//创建矩阵Mm x=zeros(1,1024);Fs=1024;nfft=1024;noverlap=128;dMm(Pxx_o);dMm(f_o);//创建并命名矩阵datax[];//数据采集的数据存于此数组中for(int i=1;i<=1024;i++){(1,i)=datax[i+1];//给x阵赋值}testwin(Fs,nfft,noverlap,x,i_o,Pxx,f_o);//matcom生成的函数for(i=0;i<513;i++){//取出功率谱密度分析结果dataf[i]=(i+1,1);datap[i]=(i+1,1);}exitM();return;}可见利用Matcom进行M文件转换非常的容易,生成的代码可读性很好,以上的转换同时生成了可供Vc调用的动态连接库,其使用和一般的动态库一样使用。同时需指明Matcom不仅可转换独立的不依赖于其它M文件的M文件,同时可转换调用其它M文件的M文件嵌套。条件是这此M文件在同一个目录下面,如前所述的可直接用上述方法转换,生成了多个重载形式的psd函数结论: 利用Mtlab引擎调用工具箱中的函数可节省大量的系统资源,应用程序整体性能较好,但不可脱离Matlab 的环境运行。用Matlab编译器进行工具箱函数的调用,须转换相应的M文件使其成为独立的M文件,且不支持图形函数,转换的代码可读性不太好。用Matcom 进行转换非常方便,生成的代码可读性很好,支持图形函数,且代码执行的速度比不转换平均要快倍以上。以上程序在Vc++ 中调试通过,以上方法在工程实践中已得到很好的运用。仅供参考,请自借鉴希望对您有帮助
第一章 绪 论 §1-1 课题研究的背景 §1-2 信号与系统分析国内外研究现状 §1-3 Matlab概述§1-4 课题研究的目的及意义 §1-5 论文主要内容及结构 第二章 MATLAB在信号与系统分析中的应用 §2-1 信号与系统分析2-1-1 国内外关于该课题的研究现状及发展趋势 2-1-2 信号与系统分析方法分类 §2-2 Matlab在信号与系统分析中应用的简介§2-3 本章小结 第三章 Matlab在信号与系统分析中应用模型设计 §3-1 引言 §3-2 系统分析 §3-3 模型建立(是本章重点需要扩充) 第四章 (具体实例实现) §4-1 §4-2 §4-3 实验结果分析 §4-4 本章小结 第五章 结束语 参考文献 致 谢 最好找本MATLAB在信号与系统分析中的应用的书来看看。可以看看飞思科技产品研发中心出的一系列关于matlab应用的书,会对你有帮助的!祝顺利!
摘要:由于MA7ⅡAB不能直接对硬件端12进行读写操作,缺乏了实时性,使得工程上的应用受到了极大的限制。而通过MATI.AB应用程序接口Mex调用C++语言,可实现在MATLAB环境下对硬件端12信号的读写。为此,笔者对Mex接口文件进行了详细介绍,包括Mex接口的各种特殊功能、详细编写规则和具体编译要求,具体阐述了Mex接口在MA啊AB环境下的调用及使用。并根据Mex接口的相关功能。对MATLAB数据采集系统的设计在理论上进行了探讨,以图对MATLAB功能进行进一步的扩展。关键词:MATLAB:接口;数据采集Research of Data—Collection System Based onⅣ队TLABWang Hailong,Chen Shanjie,Li Qian,Zhang Peng,Ku Tao,Xu Dahua(Co//ege ofEngieering,Nanjing Agriculture University,Nanjing 210031)Abstract:Since MATLAB can not write directly to hardware available for operation.and it lacks of a re。al-time,it works on the applications has been significantly hampered.MATLAB applications through rede—ployment C++language interface Mex.Achievable in the MATI。AB environment for the specific hardwareinterface signals.Therefore,author of a paper details Mex interfaces,inchding interfaces Mex various spe—cial functions,and specific translation rules for the preparation of detailed,enuncimed the transfer and theuse of Mex interfaee in the MA’nAB environment.And in accordance with the relevant functional interfaceMex.MATIAB data acquisition system for the design in theory explored in a bid to further expand thefunctions of MA7n。AB.Key words:MA,11AB,Interface,Data collectionMATLAB产品系列被广泛地应用于包括信号与图像处理、控制系统设计、通讯、系统仿真等诸多领域。它的一大特性是有众多的面向具体应用的工具箱和仿真块,包含了完整的函数集用来对信号图像处理,控制系统设计,神经网络等特殊应用进行分析和设计。其他的产品延伸了MATLAB的能力,包括数据采集,报告生成,和依靠MATLAB语言编程产生独立C/C++代码等等。正因为其强大的科学计算与可视化功能、简单易用的开放式可扩展环境以及所拥有的各种面向不同领域而扩展的工具箱(ToolBox)t11,使得MATLAB在许多学科领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。但是,MATLAB也存在局限性,就是不能直接对硬件端口进行读写操作,从而影响了它在测控系统开发上的应用范围。但它提供了应用程序接口API,通过该接口,用户可以方便地完成MATLAB与外部环境的交互(如图1所示)。为此,如何通过接口文件调用其它语言编写的程序(如C_卜}),再通过其实现对硬件端口的读写操作,最终实现在单一MArⅡAB环境中进行测控系统的开发,便成了一项值得探讨和研究的问题。1 MATLAB应用程序接口文件MexMATLAB应用程序接口(APD主要包括3部分:Mex文件(外部程序调用接13),Mat文件(数据输入输出接口)及MATLAB计算引擎函数库。它们实现的一般功能分别为:(1)在MATLAB环境中调用C/c++语言或FORTRAN语言编写的程序,以提高数据处理效率;(2)向MATLAB环境传送数据或从MATLAB环境接收数据,即实现MATLAB系统与外部环境的数据交换;(3)在MATLAB和其他应用程序间建立客户机/服务器关系,将MATLAB作为一个计算引擎,在其他应用程序中调用从而降低程序设计的工作量。以下重点介绍Mex文件的应用。1.1眦X是一种动态链接的子程序,其具体功能如下(1)对于某些已有的C程序,可以通过Mex方式在MATLAB环境中直接调用;(2)对于影响MATLAB执行速度的FOR__I,OOP等循环体,可以编写相应的C程序完成相同功能,并编译成Mex文件,提高运行速度;(3)对于A/D或D/A卡,或其他PC硬件,可以直接用Mex文件进行访问,扩展MATLAB的功能;(4)利用MEX文件,还可以使用一些软件,如Windows的用户界面资源等。1.2 Mex文件的编程规则(1)编制自己的C++算法程序;(2)编制MEX源文件代码;MEX文件的源文件主要有两个部分组成:①计算子例行程序(Computational Routine)。它是链接的外部子程序,包含所有要完成计算功能的源代码,用来完成实际的计算工作。②入口子例行程序(Gateway Routine)。它是计算子例行程序和MATLAB环境之间的接口,用于完成两者间的数据交互。入口子例行程序是MATLAB调用C抖程序所必需的部分,计算子例行程序可以由入口子例行程序调用以完成其特定的功能要求。入口子例行程序具体的使用格式如下:#include"mex.h"void MexFunction(int nlhs,mxArray牛pills[],int nrhs,const mxArray·prhs[]){//C语言代码)其中,入口子程序的函数名必须为MexFunction。prhs为一个结构体类型的指针数组,该数组元素按顺序指向所有的输入参数;nrhs为输入参数的个数;plhs与prhs的类型一致,它指向所有的输出参数;nlhs表示输出参数的个数。该函数通过prhs获得输入数据,对这些输入数据的处理后经由plhs获得结果,该结果作为输出数据与其它程序进行数据交互嘲。1.3 Mex文件的编译和调用在编译Mex文件之前,必须先在MATLAB下安装好Mex编译器,安装方法如下:在MATLAB命令窗口中输入mex.setup然后按照提示向导逐步安装即可。Mex文件在MATLAB命令窗口中直接编译,方式如下:>>mex filename,然后按回车键,如果编译通过,系统就会生成同名字的DLL文件,在以后的程序中可以像调用MATLAB的内建函数一样直接调用此函数。原理如图2。由上可知,Mex文件可以作为一个MATLAB的内建函数来处理,但这个函数又具有强大的接口功能,可以完成对硬件端口信号的读写操作。其对硬件端口读写操作的总流程如图3所示:2基于MATLAB的数据采集系统的概念设计拟采用MATLAB和C的交互编程来处理数据采集问题,这样系统不仅具有传统计算机数据采集系统的全部功能,而且还具有很强的数据处理能力,实际上构成了智能虚拟仪器t3]。初步设计系统由三个模块构成,MATLAB模块的功能包括图形显示和存取、数据分析和处理等,C语言模块主要实现串行通信功能,而硬件设备则完成对物理量的变换[4,5/。如图4所示。当采样对象确定后硬件设备也就随之而定,而C语言部分实现通信功能也是固定的,故所有的数据处理功能设置都在MATLAB环境中的人机界面中实现。该系统的3个界面实现功能如下。主界面主要由一个图形框和4个按钮构成。图形框借助于MATLAB的图形处理功能,以最佳匹配模式动态显示实时采样数据,实现自动示波器功能。4个按钮名称分别尚酽设置串口”、“开始采集”、“数据处理”和“退出系统”,鼠标点击即可实现相应功能。在主界面选择了“串口设置”后,就进入通信协议.设置界面。这个界面主要由5个弹出式菜单和2个按钮构成,弹出式菜单的名称和选项分别是:端口选择(COMI--COM4)、波特率(300-19200)、数据位m8)、停止位(o~2)和校验位(无、奇、偶),而2个按钮则分别对所设参数进行确认或者修正。在主界面选择了“数据处理,,后,则进入数据处理界面。这个界面的功能与采样对象有关,需由用户自己针对任务要求进行编程。3结束语MATLAB具有各种丰富的数值运算及图形处理功能,大量实用控制工具箱的存在更为其控制应用奠定了坚实的基础;而C语言则对硬件系统具有强有力的处理能力,可方便地实现数据采集、串行通讯等功能嘲。Mex文件是MATLAB调用C++和其他语言(如Visual Fortran等)的简易接口,它极大地扩展了MATLAB的应用范围,使MATLAB系统成为真正意义上的开放的、功能完善的、自包容的程序设计和数据处理集成环境Isl。参考文献【l】王正林,王盛开,陈国顺.MATLAB/Simulink与控制系统仿真嗍.北京:电子工业出版社,2005:11-13.【2】张威.MATLAB外部接121编程嗍.西安:西安电子科技大学出版社,2004:50-85.【3】廖良斌,喻方平.基于DSP和USB的图像采集系统的研究叨.武汉理工大学学报(交通科学与工程版),2006,.30(1):120.123.[4】申鼎才,郭庆平.基于Interact的分布式数据采集与分析在岩土工程中的应用研究明.武汉理工大学学报(交通科学与工程版),2005,29(6):974-976,992.【5】王志冰,李汉强.基于USB总线的数据采集系统的设计与实现叨.武汉理工大学学报(交通科学与工程版),2005,29(5):758.761.[6】杨义伟,蒋大明,戴胜华.驼峰信号微机监测系统的数据采集阴.武汉理工大学学报(交通科学与工程版),2005,.29(1):154-156.[7】杨健,张慧慧.基于DSP和ARM的网络化数据采集与信号分析终端田.计算机工程,2006,32(8):269-271.【8】李尧坤,史忠科,毕业等.Matlab在基于B/S模式的决策支持系统中的应用叨.计算机工程,2006,32(5):255-256,282.