C#与Matlab混合编程在HDPE膜数据成像中的应用.docVIP

  • 2
  • 0
  • 约2.93千字
  • 约 5页
  • 2017-05-28 发布于北京
  • 举报

C#与Matlab混合编程在HDPE膜数据成像中的应用.doc

C#与Matlab混合编程在HDPE膜数据成像中的应用.doc

C#与Matlab混合编程在HDPE膜数据成像中的应用   摘 要:填埋场渗漏检测系统是以Visual studio 2010为开发平台,C#为编程语言,Matlabr2009a为主要做图工具的软件。针对其数据成像功能,文章提出了一种以C#与Matlab混合编程的数据成像方法,它通过相关算法去除干扰数据达到成像效果,并将生成的Matlab图像嵌入到VC界面,使HDPE膜的成像效果更加明显并提升了系统的运行速度。   关键词:COM组件;异常干扰数据;数据成像   中图分类号:TP277 文献标识码:A 文章编号:1006-8937(2015)35-0077-02   垂直铺设防渗膜是环境工程领域常用的防渗处理手段,在铺塑过程中,由不同原因造成的防渗膜搭接不好、划破及漏点等问题会大大降低防渗膜的防渗效果,导致检测过程中存在一定的局限性。目前国内对于防渗膜的渗漏检测一般采用双电极法、电极栅格等,但其检测漏洞的效果不明显,不宜发现错误和异常且运行速度缓慢等。    C#语言继承了C/C++的优点,利用C#.NET开发的系统具有界面友好、执行速度快等优点,生成的可执行文件能有效保护算法和数据。Matlab是常用的科学及工程计算软件,具有强大的数据可视化功能。本文将C#.NET与Matlab混合编程的方法用于垂直防渗膜检测的数据可视化过程来模拟刻画垂直防渗膜的渗漏情况,通过算法去除干扰数据,并将检测的HDPE防渗膜数据生成的Matlab图像嵌入到VC界面中,相比传统的渗漏检测方法节约运行时间并有更佳的可视化效果。   1 C#与Matlab混编的实现过程    在C#中调用Matlab使用Matlab DeployTool生成生成COM组件或者.NET DLL文件的方法。因为使用Com Builder连接则十分简单,具有跨平台优势,软件版本的兼容性较好,COM组件成为本文首先的连接方式。   1.1 数据准备   第一步:安装软件。按先后顺序依次安装Visual Studio 2010、Matlab r2009a和MCRInstall.exe。安装MCRInstall.exe的过程:在matlab命令窗口输入mcr命令,得到MCRInstall.exe的路径,双击打开并安装。    第二步:利用MATLAB编译器将m文件编译为dll文件。    第三步:利用MATLAB Builder for COM将m函数编译封装成COM组件。   新建一个项目,在MATLAB的命令窗口中输入“deploytool”。选择Project- gt;Add File 添加相应的M文件,则M文件将作为类的方法出现在COM组件中,选择Build -gt;COM Object编译和发布COM组件。   1.2 COM组件的导入和编程    在新建C#工程中,引用生成的DLL文件。在C#.NET应用程序中使用该COM组件,右键单击工程项目下引用,在浏览中找到Xlunwen.dll的位置添加至引用中,添加完成后可在C#.NET中使用。使用COM组件需要调用组件中类的方法,创建包含这个方法的类的实例。代码如下:   Xlunwen.Xlunwen t = new Xlunwen.Xlunwen();   MWNumericArray s = array2;   t.Xiaolunwen(s); //其中Xiaolunwen为实现数据成像效果的M文件。   运行结果,如图1所示。   2 基于时间序列的HDPE膜数据去噪算法    采集的HDPE膜数据左右两边受电势影响普遍偏高,造成了局部时间点数据异常的特征,而漏洞数据也比正常数据偏高,如何区分数据中漏洞数据和去除电势干扰形成的异常数据是本文的难点所在。   2.1 算法的基本思想    本文采用的是基于时间序列的HDPE膜数据去噪算法,基本思想是对整体数据进行分类为正常数据、漏洞数据和受电势干扰数值升高的非漏洞数据,通过算法对数据加以分析,将非漏洞数据识别并转化为正常数据,达到去除干扰数据的目的。2.2 具体做法   ①对整体数据求均值。所有小于均值的数据为正常数据,将其值至为0,大于均值的数据为漏洞数据和异常数据,将其保留为矩阵A[m,n]。   ②对矩阵A[m,n]求一阶导数得B[m,n]。观察数据的特征得知,发现矩阵左端异常数据走向为单调递减,导数值均为负数;矩阵右端异常数据走向为单调递增,导数值均为正数;而漏洞数据走向特征则是先递增后递减的趋势。   ③将干扰数据的导数值至0。将B[m,n]在Y轴分成m等份区间,每一个区间内的数据都是一个时间序列数据,依次从左边扫描矩阵B[m,n]直到找到第一个导数值为正数的数据为止,将导数值为负数的数

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档