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,达到去除左端的异常干扰数据的目的。同理,去除右端的异常干扰数据,则矩阵中只剩漏洞部分的导数值。 ④将漏洞部分还原为原数据进行数据成像,效果如图2所示。 3窗体间的嵌入 VS2010中有4个对窗口进行操作的API函数:FindWindow、SetParent、SetWindowLong和MoveWindow。基本思想:将Matlab生成的图形窗口嵌入到VS界面,通过VS平台获取Figure窗口的句柄,将Figure图像要嵌入的空间设置为父窗口,Figure窗口设置为子窗口。程序执行代码如下: IntPtrhChild=IntPtr.Zero;//子窗口句 IntPtrhandle=pictureBox1.Handle;//父窗口 hChild=dll.FindWindow(null,“Figure1”); ...... dll.SetParent(hChild,handle);//将子窗口嵌入到父窗口中 运行结果如图3所示。 4编程方式的运行时间对比 C#与Matlab混合编程对110次采样值32个采集点(110×32)的数据多次成像所用的 平均时间对比,见表1。 5结论 表1中说明采用混编代码长度较VS2010语言代码长度大大缩短,而运行时间又比Matlabr2009a语言编程减少许多。本文充分发挥了MATLAB和C#各自的优势,实现了MATLAB和C#的混合编程,利用算法去除干扰数据,并完成了Figure窗口到C#界面的内嵌,提高了程序运行速度和成像数据的精确度。 【参考文献】 [1]能昌信,董路,姜文峰,等.土工膜渗漏检测系统研究[J].环境科学与技术,2005,(28). [2]王丽辉,袁保宗.鲁棒的模糊C均值和点云双边滤波去噪[J].北京交通大学学报,2008,(2). [3]苏金明,查国明.MATLAB与外部程序接口[M].北京:电子工业出版社,2004. [4]潘爱民.COM原理及应用[M].北京:清华大学出版社,2003. |