赵文强,景建恩,杨 杰,赵庆献,罗贤虎
(1.中国地震应急搜救中心,北京 100049;2.中国地质大学(北京),北京 100083;3.中国科学院 声学研究所,北京 100190;4.广州海洋地质调查局,广州 510760)
海洋可控源电磁法(MCSEM)经过数十年的发展,在实际应用中取得显著成效,已成为国内、外海洋油气和天然气水合物勘查的有效手段之一[1]。这吸引了越来越多的油气公司、高等院校及科研单位对此方法的关注,并纷纷开展相关的研究工作。
国内、外学者对海洋可控源电磁数据预处理做了大量的研究,MacGregor[2]对海洋地壳结构进行研究,采用快速傅立叶变换方法,对海洋可控源电磁数据进行了处理与分析;Behrens[3]在其博士论文中介绍了数据处理的相关技术及流程;Lu[4-5]则介绍了数据处理的基本步骤并申请了专利;Wright[6]研究了压制天然场源噪声的方法;Mittet[7]介绍了能够突出异常信息的归一化幅值曲线计算方法;Nordskag[8]对消除海水层的电磁响应进行了理论研究。此外,一些学者讨论了空气波的压制方法[9-10]。国内学者在海洋可控源电磁数据方面也开展了一些研究工作,林昕等[11]研究了两种提高海洋可控源电磁数据信噪比的方法;刘宁等[12]研究了时变双边滤波法;李予国等[13]对海洋可控源电磁数据预处理方法进行了总结。一些学者则开发了MCSEM数据预处理的可视化软件。
目前海洋可控源电磁数据处理程序大多是采用MATLAB或C++语言进行编写,可视化界面少,操作复杂、在实际生产中难以推广和实施[14]。传统的MFC框架所开发的界面过于死板,并且其封装性加大了界面优化和改动的难度,往往出现代码体积较大,影响后续开发者的工作效率。显然,随着预处理技术的不断发展,寻找一套简便的开发工具,编写一套操作简单、界面友好、可视化程度高和扩展性强的海洋可控源电磁数据预处理软件,将具有重要的实际意义。
笔者采用Duilib库进行海洋可控源电磁数据预处理软件开发,将用户界面和消息处理逻辑彻底分离,通过在Duilib库中加载XML脚本,解决MFC基础控件功能单一以及界面不美观等问题,实现了数据格式转换、解析并加载电磁场数据、电磁场数据与导航数据可视化、电磁场数据频谱分解、发射机电流数据的频域处理及可视化、导航数据与频谱数据合并及归一化处理、MVO(振幅随偏移距变化)和PVO(相位随偏移距变化)曲线生成及数据显示等多项功能。最后,通过与前人处理结果的对比验证了处理软件的正确性可靠性,并对我国某海域的可控源电磁实测数据进行了处理。
海洋可控源电磁探测,是将电磁发射机拖曳至近海底,通过水平电偶极向海底发射大功率电磁波,由布设在海底静止的电磁接收机采集人工源电磁场信号[17]。
如图1所示,AB为电偶极子,方向与Z轴方向一致。假设偶极子位于球坐标系的坐标原点,发射电流的强度为I,偶极矩为dL。在均匀的全空间内,当电阻率为ρ时,根据电磁场理论可以计算出观测点P(r,θ,φ)的电偶极子的电场值为:
(1)
(2)
图1 均匀空间中电偶极子源Fig.1 Electric dipole source in uniform space
图2 MCSEM数据预处理流程图Fig.2 MCSEM data preprocessing flow chart
测量时,采集站记录的是时间域电磁场信号,海洋电磁场数据资料通常在频率域进行,因此在预处理时需要将时间域电磁场信号转换为频率域信号[13]。采集站自由释放至海底,方位是不确定的,因此要对采集的电磁场数据进行方位和水平矫正[16]。最后与发射机的导航数据合并处理后,可以获得MVO和PVO曲线(图2)。
Duilib是我国自主开发的DirectUI界面库,是一款强大的开源界面开发工具,支持Windows32、WindowsCE、Mobile等平台,由C++开发,遵循BSD协议[17]。采用Duilib库开发应用软件,具有工作效率高、开发周期短、兼容性好、界面美观等优点。Duilib兼容ActiveX插件,可以与MFC界面库共同使用,已经在互联网客户端、手机客户端、车载电脑系统中得到成功应用。
图3 Duilib界面设计流程图Fig.3 Flow chart of duilib interface design
Duilib的主要原理就是将界面和逻辑彻底分离,提高界面开发效率。整个流程如图3所示,利用Duilib设计界面的工作主要包括三个内容:加载并解析XML、显示XML界面、消息传递及响应。
本软件旨在处理由中国地质大学(北京)所研发的海洋可控源电磁仪器所采集的数据,对其进行预处理,计算结果用于后期的二维反演。基于VS2013平台,采用C++语言编写,使用Duilib界面库与MFC进行开发。根据需求软件的具体功能如下:
1)数据格式转换。
2)解析并加载人工源电磁场数据。
3)电磁场数据与导航数据可视化。
4)发射电流与电磁场数据谱分析与显示。
5)电磁场频谱的归一化处理。
6)导航数据与归一化数据合并与导出。
7)MVO和PVO曲线生成与显示。
图4 软件设计MVC结构图Fig.4 MVC structure chart of software design
图6 软件开发设计原理Fig.6 Principles of software development and design
图5 软件设计MVC结构图Fig.5 MVC structure chart of software design
软件整体功能及相应模块如图4所示,根据软件的功能,可将程序分为:①数据计算模块;②图形显示模块;③数据模块;④界面设计模块。数据计算模块用于对数据的FFT变换,归一化处理以及振幅和相位的计算。图形显示模块用于对原始数据和MVO、PVO曲线的绘制。数据模块用于对原始数据的读取,各参数的定义以及计算结果的更新和输出。界面设计模块也就是用XML文件来设计软件界面。各个功能的实现是通过函数的调用来完成。
通过对软件的模块划分主要设计的类有:
class TabOpenTsFile;//解析数据类
class TsEnvModel;//数据转换类
class TsViewHelper;//数据图像绘制类
class FFTProcessModel;//数据处理类
class GlobalConstants;//参数及数据类
海洋可控源电磁数据预处理软件采用MFC和Duilib界面库渲染技术进行开发。传统的模型(Model)-视图(View)-控制器(Controller) (MVC)设计模式实现了业务功能逻辑、数据模型和界面UI交互的功能解耦。这里采用MVC进行程序框架的架构,设计了数据模型层、界面层和控制层(图5),其中控制层连接数据模型层和界面层,完成数据更新和显示;界面层用于人机交互以及图形显示;数据层保存原始数据以及数据的处理结果。该开发模式能够极大的提高软件开发效率,减少了对软件的后期维护和再开发的困难。
图7 原始数据对比图Fig.7 Raw data comparison chart(a)前人软件数据结果;(b)本软件数据结果
软件在开发过程中,基于XML文件+UI引擎+Win32框架(图6)来实现软件的各个功能界面。编写XML文件完成界面整体框架设计,使用UI引擎调用XML文件实现界面渲染,最后使用Win32框架的Duilib消息处理机制,完成各个界面窗口的消息处理与消息传递。针对Windows系统平台的特点,在进行快速FFT变换时采用了多线程编程,增加了变换速度,提高了计算效率。参照海洋可控源电磁数据预处理的流程,以及数据预处理的方法原理完成功能函数的实现,最后通过用户界面的生成实现处理结果可视化的效果。
鸡、鸭、鱼、肉类菜肴基本都要做加热前的调味,最关键就在于去除腥臊味;青笋、黄瓜等配料,也常先用盐腌除水,确定其基本味。
图8 MVO与PVO对比图Fig.8 MVO and PVO comparison chart(a)前人软件数据结果;(b)本软件数据结果
1.5.1 XML文件编写
在进行XML文件编写时,根据海洋可控源电磁数据预处理软件的需求,用户界面分为:绘图区,菜单选择区,编辑区。绘图区用于绘制原始数据曲线、计算结果曲线。菜单选择区用于选择不同的功能。编辑区用于选择和编辑数据处理过程所需的参数以及文件的加载和图片的保存。为了保证本软件在操作过程中的简便性和界面美观,XML文件编写时,主要采用了水平布局,垂直布局以及选项布局三种布局方式。
1.5.2 XML文件解析并显示界面
CPaintManagerUI m_PaintManager;
m_PaintManager.Init(m_hWnd);//主窗口类与窗口句柄关联
CDialogBuilder builder;// 声明窗口构造器
CControlUI*pRoot=builder.Create(_T("
ASSERT(pRoot&&"Failed to parseXML");
m_PaintManager.AttachDialog(pRoot);//创建控件树
m_PaintManager.AddNotifier(this);//添加控件等
消息响应
m_pMainWnd->Create(NULL,_T("MainWnd"),UI_CLASSSTYLE_DIALOG,WS_EX_STATICEDGE|WS_EX_APPWINDOW,0,0,600,800);//注册窗口类,创建窗口
m_pMainWnd->CenterWindow();
m_pMainWnd->ShowModal();//显示窗口、进入窗口消息循环
1.5.3 建立消息响应
界面生成之后,需要重写相应函数Notify以响应用户请求的事件。这里以按钮事件为例进行介绍,主要包括3个步骤。
1)调用AddNotifier函数将消息加入Duilib的消息循环。
2)给按钮设置一个唯一的控件ID。
3)在Notify函数里处理消息。
步骤1)在重写HandleMessage函数时已经完成,步骤2)是在编写XML时完成的。当用户进行点击按钮操作时,需要在Notify函数中进行判断点击的按钮以及实现。至此实现了主界面的编写、显示以及消息的响应。
图9 实测MCSEM数据处理结果Fig.9 Data processing results of measured MCSEM(a)MVO曲线;(b)PVO曲线
对我国某海域实测海洋可控源电磁数据进行处理,并检测软件的可靠性。选取相同时间段电磁场时间序列的原始信号,与中国地质大学(北京)王铭等[14]所开发的处理软件进行对比(图7),由图7可以看出,本软件与中国地质大学(北京)海洋可控源电磁数据预处理软件显示结果相同。
选取相同的处理参数,对同一测站的海洋可控源电磁数据进行处理,最终得到各自的MVO与PVO曲线。这里频谱分析采用FFT变换,选取的窗口类型都为Hanning窗和窗口长度都为4 096(图8)。
对比图8(a)和图8(b)发现,本软件得到的MVO曲线能够得到更大的收发距,在计算过程中,本软件采用频率域振幅叠加的方法压制实测信号中的噪声,提高了信噪比,因此获得了较大的收发距。由于本软件集成化较好,加上对计算方法和程序进行优化处理,处理一条测线9个测点的处理效率提升了近35%。对比中可以看出PVO曲线差异较大,是由于本软件对仪器内置原子钟产生的时间漂移而引起相位误差进行了矫正,得到了相对准确的相位结果。
通过与前人编写的处理软件进行对比测试,测试结果表明本软件的正确性,因此本软件可用于生产任务中的MCSEM数据处理。利用本软件处理了中国地质大学(北京)与广州海洋地质调查局在2018年南海某海域采集的MCSEM数据,本次对一条测线9个测点8Hz的人工源电磁场数据进行处理。图9显示了最后的 MVO、PVO曲线,各颜色代表了不同测点的处理结果。
利用笔者开发的预处理软件对实测海洋可控源电磁数据进行处理,最后得到了满意的MVO与PVO曲线,又通过与前人软件的处理结果进行对比,验证本文所开发软件的可靠性。最后通过对实际数据的处理表明,笔者开发的软件具有操作简单、处理高效的特点,为将来实际海洋可控源电磁数据预处理提供了技术与软件支持。
笔者开发的软件采用Duilib界面库进行海洋数据预处理软件的开发,对于传统的处理软件进行了界面的优化和集成,提高了数据预处理的效率,具有极大的推广价值。对于Duilib界面库开发可视化软件的步骤进行了详细系统的介绍,这是一个新的尝试,并对相关的地球物理数据处理可视化软件开发具有一定的借鉴意义。