时间:2024-05-22
胥值礼, 黄 威, 刘俊杰, 李 飞
(中国地质科学院 地球物理地球化学勘查研究所,廊坊 065000)
航空物探包括航空磁力(航磁)、航空电磁(航电)、航空放射性(航放)、航空重力(航重)等测量方法,具有数据多样化、数据量巨大、处理功能繁多等特点[1]。在实际生产应用中,经常将多种测量方法集成为航空物探综合测量系统开展多参数综合测量,因此,在数据分析处理中,如果没有统一的数据存储格式、数据显示方式和数据处理功能集成接口,势必造成软件系统缺乏整体性,导致数据管理混乱,不利于数据对比分析,增加了数据处理难度,同时也导致了系统扩展性较差、应用软件开发和维护成本昂贵等问题[2-4]。
依托中国地质科学院地球物理地球化学勘查研究所(物化探所)承担的“固定翼时间域航空电磁测量技术系统研制(编号2017YFC0601900)”国家重点研发计划项目,开展了时间域航电数据处理软件系统研发。首先通过分析时间域航电的数据特点,提出平台的功能和性能需求。航电测量系统在采集原始数据时,记录的数据道有经度、纬度、雷达高度、气压高度、发射波形(Tx)、三个分量的接收波形(Rx、Ry、Rz)等,数据信息种类繁多。这些数据具有以下主要特点:①采样率不同,发射波形和接收波形采用全波形记录,其采样率高达100 kHz;经度、纬度、雷达高度、气压高度采样率为1 Hz;②数据类型不同,经度和纬度为双精度浮点型;发射波形、接收分量波形、雷达高度、气压高度为单精度浮点型;③数据量巨大,1 h原始数据量约为5.5 GB,再加上处理过程中产生的各种结果数据,数据量将成倍数增长;④按测线存储数据,测网一般为网状分布,测线相互平行或近似平行,测线间的数据道个数和数据类型相同,而同一数据道的数据点数却各异。
上述时间域航电数据特点在航空磁力、航空放射性和航空重力中也同样存在。鉴于这些数据特点,并考虑软件系统的可扩展性、易用性和可维护性,便于航电或其它航空物探方法技术研究工作的开展,设计开发了一套适用于航空物探应用软件系统开发、具有大数据和多参数显示和处理能力的通用软件支撑平台。
介绍了软件平台的主要需求、设计思路和关键技术,并给出了平台在时间域航电数据处理软件系统中的应用实例。
平台主要包括数据管理、数据显示、数据编辑、系统工具、系统设置、功能扩展接口等基本功能组,各个功能组中包含一个或多个功能。
以测量项目为单位对数据进行存储管理,数据的存储采用统一的数据库模型。可在数据库管理器中添加、删除数据库,并可打开数据库,对数据进行界面显示和编辑;可将外部数据导入到数据库,也可将数据库的数据导出为外部数据;可将多个数据库的数据合并到一个数据库。
采用多文档显示方式,即可以打开多个数据库,每个数据库对应一个显示主视窗,每个主视窗具有一个列表显示视窗和多个并行的图形显示视窗,且各个视窗具有独立的显示配置,并具有显示再现功能。
1.2.1 列表显示
显示选择:可选择测线、数据道显示;可选择显示主道,所有显示数据道均按照主道采样率数据显示。
显示格式:对一维数据道,按数据类型(浮点型、整型)以数值方式显示在单元格,浮点型数据精确到小数点后八位。对二维数据道(如航电衰减曲线、航放全谱曲线)以曲线方式显示在单元格。
1.2.2 图形显示
具有多个纵向排列的图形显示视窗,可以线/点方式显示数据道剖面,便于图形的对比显示,且窗口纵向高度可任意调节;对任何一个图形视窗,可在水平方向上放大、缩小、移动图形,且其它图形视窗的图形亦同步变化;可显示纵坐标网格线和纵坐标零线;可显示指示横坐标的光标线;具有图―数、图―图联动显示功能,可在数据显示列表中的数据道名称上选择显示/隐藏线剖面或点剖面,并将该数据道的线/点剖面显示到指定的图形窗口中;可在显示列表中的数据道名称上设置图形显示颜色,并将数据道对应的剖面图形按相同颜色显示;在图形视窗中可移动指示横坐标的光标线,并同步指示数据列表的数据点位置;可在数据列表中选择数据点,并同步指示图形视窗的横坐标光标线位置。
在显示列表中,可对数据进行编辑。将二维数据道分解为一维数据道;选择单元格进行数据复制;选择单元格对其所在行的数据进行删除;对测线进行裁剪;创建、删除、复制数据道;修改数据道的属性值(名称、起始FID、采样率等)。
为方便数据分析处理,提供数据道数学计算、坐标投影变换、数据道统计等基本工具。
数学计算器:具有对数据道的数据进行简单数学运算功能。支持等于、加、减、乘、除、指数、开方、常用对数、自然对数运算,便于数据转换分析。
坐标投影变换:可将WGS84经纬度坐标转换为Beijing54直角坐标,或将Beijing54直角坐标转换为WGS84经纬度坐标。
数据道统计:可计算统计数据道的数据点个数、最小值、最大值、平均值等。
可设置处理数据块的最大数据个数、显示数据块的FID时长、默认显示颜色等系统参数。
具有应用软件功能(在平台外部开发的功能)与平台集成的通用接口。在不修改平台程序的情况下,以插件方式对应用软件系统进行功能定制,以加强软件系统的功能。
操作系统:WINDOWS 7.0及以上操作系统;内存大小:8 GB以上;硬盘容量:256 GB以上。
开发平台:Microsoft Visual Studio 2015;开发语言:C/C++语言。
如图1所示,平台支撑的应用软件系统为四层结构模型:WINDOWS操作系统、GSS软件支撑平台、应用扩展功能(插件)、应用软件系统[2]。
软件支撑平台:提供数据库管理、数据库访问、数据显示、系统工具、系统设置、应用扩展功能集成接口等基本功能(图2),应用功能集成具有插件式集成统一接口。
图1 应用软件系统架构
图2 支撑平台的功能结构
应用扩展功能:为软件支撑平台外部定制开发的软件功能(功能插件),可通过平台提供的插件式集成接口集成到平台上。
应用软件系统:由软件支撑平台和集成到其上的应用扩展功能插件共同组成。
在平台实现中,采用了数据库、数据分段处理、虚拟列表显示、双缓冲图形显示、功能集成插件技术、算术表达式求值等多项关键技术。
采用数据库、数据分段处理、虚拟列表显示、双缓冲图形显示关键技术,主要目的是解决巨大数据量的处理效率和内存限制问题。采用功能集成插件技术的主要目的是解决系统的扩展性问题。
3.1.1 数据库模型
图3 数据库模型
根据航空物探数据特点,采用SQL关系型数据库模型显然不能满足航空物探大数据的存储要求,需要采用特定的数据模型[6]。本平台的数据存取采用自主设计的数据库(即数据集文件),一个数据库实际上就是一个二进制数据文件,它除了可存储数据本身外,还可存储数据的索引等信息。
如图3所示,数据库模型按三个层次组织数据:文件、测线、数据道。
数据库文件可以包含任意数量的测线,测线又可以包含任意数量的数据道。在每个层次上,均可以包含任意数量的自定义属性,仅在数据道包含数据体(一维或二维数组)。
该数据模型无需自行设计头信息结构、无需重新设计程序,具有较强的灵和性和良好的扩展性。
3.1.2 数据库访问
采用面向对象(Object Oriented)思想实现数据存取功能,测线和数据道均作为对象来处理。
测线和数据道对象由唯一的路径来标识,各个路径包含对象的名称及其所属对象的名称(表1)。
表1 数据库对象标识示例
在数据量巨大而计算机内存又不能满足全部数据读入的情况下,采用分段技术对数据进行显示或计算处理。
采用FID(基点号)来实现分段处理。针对要显示或计算处理的各个数据道,根据设置的起始FID和结束FID,分别计算各数据道在数据库中的数据点起始索引和结束索引,然后从数据库中读取数据道FID段的数据并植入内存进行显示或计算处理,计算处理完成后将结果写入数据库中相应位置。
通常情况下,时间域航电原始数据量很大,需要分段处理,而航磁、航放、航重数据量较小,不需要分段处理。如果计算机内存足够并将FID段设置得足够长,则可一次性显示或计算处理数据道的全部数据,此时不需要将数据分段。
采用了数据道定制显示和虚拟列表显示技术。
3.3.1 数据道定制显示
用户可根据自己的需要在列表中灵和地显示或隐藏数据道,而且可以设置某一数据道为采样主道,其它显示的数据道将自动与主道数据行匹配对齐(抽值或插值)。显示时将数据从数据库读入内存,隐藏时将释放数据内存。
3.3.2 虚拟列表显示
通常情况下,使用列表组件需要向单元格中插入数据,之后就不必关心数据在哪里了,这是因为组件自己开辟了内存空间来保存这些数据。对于要显示一个数据库有几十万甚至上千万条记录的海量数据,势必要消耗大量的内存,很可能内存会溢出而导致软件崩溃。另外,如果用户要滚动数据或定位某行数据,也会耗费漫长的时间,这是不能忍受的问题。因此,这种方法显然不能满足大数据的显示要求。
采用虚拟列表显示算法来解决上述问题。虚拟列表看起来和普通列表一样,但不是通过向表格单元格直接插入数据来显示,它仅仅知道应该显示多少行数据,当显示某个数据时,它向父窗口申请。例如一个列表中包含10 000 000行数据,第500到1 000 行是可见的,当列表重新绘制时,它首先请求父窗口给它第500行的数据,父窗口在收到请求后,把数据信息传递给列表,列表就可以用来显示了,显示第500行数据后,列表将继续请求下一行数据,直至第1 000行为止。这样不但可以占用极少的内存空间,还可以大大提高显示效率,尤其在数据量巨大的情况下效果更为显著。
采用了数据道剖面图定制显示和双缓冲图形显示技术。
3.4.1 数据道剖面图显示
用户可根据自己的需要在数据列表中选择要显示或隐藏剖面图的数据道,平台将自动将选择数据道的剖面图显示在某一指定图形窗口,或在某一指定图形窗口隐藏该数据道图形,实现剖面图组合显示功能。显示时将数据置入内存,隐藏时将释放内存。
3.4.2 双缓冲图形显示
通常情况下,图形窗口在刷新时,总要有一个擦除原来图像的过程,它利用背景色填充窗体绘图区,然后再调用新的绘图代码进行重绘,这样一擦一写就造成了图像颜色的反差,当对大量数据的图形进行频繁重绘时,这种反差就越发明显,将导致闪烁现象,图形窗口因图像残留还会变成一团糟,且绘制效率十分低下[7]。
采用双缓冲图形显示算法来解决上述问题。先在内存中绘制图形,然后将绘制好的图像复制到显示界面,同时禁止背景刷新。这样不但解决了图像闪烁问题,而且提高了显示效率。
插件技术的本质是在不修改平台程序(主体程序)的情况下对软件功能进行加强,任何人都可以通过公开的插件接口来制作自己需要的软件功能以满足不同的需求[8-9]。
本平台的应用软件功能集成接口采用动态链接库(DLL)插件方式。平台程序启动时,可根据已加载菜单配置文件中的菜单名称动态地创建菜单,并根据菜单名称所对应的DLL库文件名称,使用WINDOWS操作系统提供的LoadLibrary函数自动加载DLL库,并使用WINDOWS操作系统提供的GetProcAddress获取相应功能函数的内存地址,平台根据内存地址来调用插件接口完成所需功能。
功能插件DLL库可使用C/C++、Fortran语言或其他语言(如MATLAB、LabVIEW等)开发,它们均具有统一的调用接口。
插件和平台之间的通信采用数据库对象句柄。平台提供了一个数据库访问中间件,平台向插件传递数据库对象句柄,插件通过中间件利用该数据库句柄对数据库进行访问。
利用软件语言编译器原理,设计常规数学计算器,用于对数据库中数据道的数据进行数学计算,例如,将以电压为量纲的雷达高度值转换为以米为量纲的高度值、通过两个数据道的数据相减来分析数据变化情况等。这不但可以减少功能程序模块数量,还可以为数据处理分析提供简便灵和的计算工具,而不是需要什么计算功能就开发集成什么功能。
利用数据结构中的栈来计算数学表达式的值[6]。其方法大致为:依次扫描中缀表达式(人们常用的算术表达式,如a=b*c+b*d),根据操作符的优先级来决定其入栈的顺序,最后得到表达式的一个后缀表达式。利用后缀表达式(如abc*bd*+=)来求值(图4)。
后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行求值(不再考虑运算符的优先规则)。运用后缀表达式进行计算的具体方法为:
建立一个栈S。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作数运算,再将运算的结果代替原栈顶的n项,压入栈S中。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为表达式的最终计算结果。
图4 后缀表达式形成过程示意图
利用本平台研发集成了时间域航电数据处理软件系统(图5)。图中菜单Preprocess为航电数据预处理软件功能的插件菜单;图左侧为数据项目管理器,显示了项目所包含的数据库名称;图右上为从管理器打开的其中一个数据库的数据列表显示,显示为数值的数据道为一维数据道,显示为曲线的数据道为二维数据道;图右下为列表显示中的某些数据道的剖面图形显示(共有三个图形显示视窗,数据道剖面图形显示的视窗可指定);图上部工具栏中的红色上/下箭头可切换显示数据段。数据显示列表中数据道名称为斜体的数据道表示采样主道,其它数据道根据主道的采样率显示数据;列表显示的数据道可定制;数据道的剖面图形显示可定制;列表中蓝色单元格和剖面图形视窗中的垂直红色线为联动标志。
利用一个数据库大小为34 GB(单个数据道最大数据量为2.1 GB)的时间域航电试验数据,对平台进行了功能和性能测试,测试结果表明该平台达到了设计目标。
以国家重点研发计划项目为依托,在分析时间域航电数据特点基础上,并结合其他航空物探方法的数据特点,综合考虑平台的功能和性能需求,设计研发了拥有自主知识产权的航空物探软件系统支撑平台。
利用该平台研发集成了时间域航电数据处理软件系统,并进行了功能和性能测试。测试结果表明,平台具有显示和处理大数据和多样数据的能力,其运行效率高、扩展性强、易用性好,达到了设计目标。
该平台的建设为航空物探方法技术研究提供了一种高效快捷的有力工具,不但保证了软件长久的生命周期,而且减少了软件的开发成本,可作为开发航空物探或其他具有相似数据特点的应用软件系统的通用支撑平台。
图5 时间域航电数据处理软件系统
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!