本站小编为你精心准备了通用测震数据获取软件包设计与实现参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
0引言
随着“九五”和“十五”项目的建设完成,中国地震局推广的地震监测系统JOPENS在地震日常工作及大震速报方面发挥了重要作用(孙学军,姚宏,2009;李大辉等,2001;胡星星等,2008;胡华灯,黄文辉,2006;金星等,2007;卫爱民等,2005)。随着我国社会经济的发展,政府和民众对地震行业提出了更高的要求,快速、实时利用数字地震波形开展地震学相关学科的研究、地震预警、震源参数反演、“新参数地震目录”的产生(付虹等,2009;万柯松等,2009;陈运泰,吴忠良,1999)等工作已提上日程。但JOPENS没有提供二次开发的接口,地震科技工作者在获取地震数据时面临很多难题,尤其是测震数据存在多数据源的情况,如JOPENS/SSS实时测震流数据、来自JOPENS数据库的连续波形数据和事件波形数据、SEED波形文件等,并且这些数据的格式繁多复杂,需要了解这些数据的存储方式、格式等。针对这些问题,本研究开发的软件包将提供一个简单、可靠、统一的方案,可读取不同数据源的测震数据,从而方便后期数据的处理。
1总体结构
本软件包的主要功能是为应用程序提供一个统一的获取测震数据的平台。根据数据源的不同,本软件包分为3个独立的模块,总体模块图如图1所示,分别为:SSS流数据处理模块、JOPENS数据库处理模块、SEED文件处理模块。SSS流数据处理模块用来读取SSS服务器的实时测震数据,JOPENS数据库处理模块用于处理JOPENS数据库中的连续波形和事件波形数据,SEED文件处理模块用于读取SEED波形文件。这些模块分别将不同的数据转换为统一数据格式,最终为应用程序提供指定台站、通道、采样率的测震数据。本软件包基于。NET3.0平台,采用C#语言开发,具有使用简单、完全面向对象、层次清晰、效率高等优点。
2统一数据接口
为了能够提供统一的数据接口,本软件包自行定义了对外的统一数据接口S_data。三大模块将获取到的原始数据转换为统一的格式,最后由S_data统一提供给应用程序。下面是统一数据接口S_data相关数据结构的定义。图2为统一数据接口类的结构图。
类S_data用来存放多个台站的测震数据。stations_name用来存储台站名称的数组,stations是存放台站所有数据的数组。本软件包对外提供的所有测震数据都通过这个类来提供。
类S_Sation_data用来存放单个台站数据。channels_name是存储该台站中所有通道名称的数组,channels是存放该台站所有通道原始数据的数组。
方法getData_Time[KG0]()和getStreamData_Time[KG0]()根据指定台站名、通道名和采样率获取测震数据。当前测震数据的采样率通常为100Hz,数据量很大,同一台站同一通道一天记录的数据达到8640000个,存在计算量大的困难,用户可能需要不同采样率的数据来满足不同的需求,因此本软件包提供了自行设定采样率的功能。方法getStreamData_Time[KG0]()用于获取流数据。方法getData_Time[KG0]()应用于读取数据库和SEED文件数据。
3流数据处理模块
3.1NetSeis/IP流服务协议
目前“十五”项目测震台网采用SSS流服务器来负责接收和分发近实时波形数据,该服务遵守NetSeis/IP流服务协议,默认采用5000端口提供实时地震数据流。NetSeis/IP协议类似FTP协议,主要参考了美国AlbuquerqueSeismologicalLaboratory(ASL)的LISS协议和TCP/IP协议,用于传送实时地震波形数据(李卫东,梁兆东,2008)。
3.2设计思路
本模块共有两个线程——控制线程和接收数据线程。控制线程负责初始化SSS服务器连接、获取数据端口和创建接收数据线程;接收数据线程负责创建数据连接、接收数据、处理解压缩数据并将其转换为统一格式供应用程序使用。
当控制线程连接到SSS服务器时,服务器将验证用户名和密码,通过身份验证后控制线程发送PASVRT命令,SSS服务器收到命令后,动态分配一个数据端口。接收数据线程连接到此端口上,再发送RETR命令,SSS服务器收到命令后,验证请求的台站数据可被下载后,通过该数据端口将请求的台站波形数据发送给接收数据线程。本模块的程序流程图见图3。接收数据线程从SSS服务器上接收的数据实际上是大小为512字节的纯数据SEED卷(MiniSEED数据)。该卷包含有固定头段部分(48字节)和数据部分,总长度512个字节,主要记录台站名、通道名、记录起始时间、样本数目、测震数据等(中国地震局,2003)。每次接收的纯数据SEED帧中的样本数目并不完全一致,大约在500左右,也就是说在采样率为100的情况下,该帧记录了同一台站同一通道约5s左右的测震数据,同一台站同一通道的前后数据帧间隔5s左右。
4JOPENS数据库处理模块
JOPENS系统使用数据库存储系统接收和产出的各种数据。JOPENS系统使用的数据库为开源数据库MySQL,当前使用的版本为MySQL5.1。
4.1NET平台连接MySQL
MySQL官方提供了MySQLConnector/NET数据库驱动(李波,2005),使得在。NET平台下连接MySQL数据库十分简便。本模块采用MySQLConnector/Net6.1.3作为连接MySQL的驱动。Connector/NET是一个纯C#语言编写的全面托管的驱动程序,并实现了所有接口,给开发人员提供了一种安全、高性能的与MySQL数据连接的方案。
4.2设计思路
JOPENS数据库中有事件波形和连续波形数据,这两种数据存储结构略有不同,但主要的数据格式是相同的,所以把它们的处理整合在一个模块中。首先,根据数据库服务器相应参数创建连接。数据库连接创建成功以后,根据应用程序的不同要求来构建合适的查询语句,接着执行该查询语句。获得相应的数据以后,再进行解压缩并转换为统一的数据格式,最后关闭数据库连接。本模块的程序流程见图4。
5SEED文件处理模块
SEED格式是一个针对数字地震波形数据交换的国际通用格式,它是为地震学界的应用而设计的,主要是用于各个机构之间交换未经处理的地面运动数据(中国地震局,2003)。
5.1SEED结构分析
以下仅以JOPENSMSDP产出的2.3版SEED文件进行简单介绍。SEED格式文件包括SEEDVOLUME文件和MiniSEED文件,SEEDVOLUME文件包括控制头段和波形数据两部分,MiniSEED文件仅包括波形数据部分。在SEEDVOLUME文件中,控制头段部分以ASCII格式存储,波形数据以二进制格式存储。从物理上划分,文件由若干个逻辑卷组成,每卷为4096字节。每个逻辑卷以一个8字节的ID子块开始,后跟4088字节的不同类型的控制头段及其子块。存储时每个控制头段会根据其长度可能占一个或多个逻辑卷,当一个逻辑卷存放不下时,就开始一个新的逻辑卷存储。图5为完整SEED文件的存储结构。
5.2设计思路
SEED控制头段内容丰富、结构复杂,在实际应用中可按不同要求在需要的卷中根据子块类型读取所需要的内容。例如若需要台站列表,那么只需读取卷索引控制头段中的卷台站头段索引子块;而台站的具体信息可以读取台站控制头段;数据卷的存储采用了压缩策略,在使用数据时需要对数据进行解压缩,具体解压缩算法可参考《地震波形数据交换格式》附录B(中国地震局,2003)。图6是SEED文件处理模块的流程图,已经有资料实现类Pascal编写读取SEED数据文件的程序(刘胜国,贾庆华,2004)。
6应用实例
6.1软件包中类及其主要成员介绍
本研究中开发的测震数据获取软件包中有S_data、clsStreamReader、clsDatabaseReader、clsSeedReader4个类,其中S_data为统一数据接口,在前面已经介绍过;clsStreamReader用来读取SSS流数据,clsDatabaseReader用来读取数据库中的连续和事件波形,clsSeedReader则是用于获取SEED文件数据。表1为软件包中类及其主要数据、函数成员介绍。
在。NET环境中使用本软件包,首先需要添加UDSDAP.DLL文件到C#工程中引用,使用usingUDSDAP来引用UDSDAP命名空间。UDSDAP.DLL是本软件包生成的动态链接库的文件名。
6.2读取实时测震流数据实例
本例为读取湖北兴山台(XSH)和房县台(FXI)的实时测震流数据的过程。图7为本实例的流程图。
6.3读取JOPENS数据库实例
从JOPENS数据库中获取2010年3月4日兴山台和房县台一天的连续地震波形数据。图8为本实例的流程图。
从JOPENS数据库中获取事件编号为HB.201003091844.0002地震波形数据。图9为读取JOPENS数据库地震事件波形的流程图。
6.4读取SEED文件实例
本例是读取MSDP产出的SEED文件,该文件包含了武汉(WHA)台的测震数据。图10为从SEED文件中获取武汉台BHE通道的测震数据的流程图。
7结语
本软件包完全实现了既定功能要求,能方便、准确地获取测震数据,让地震科研人员更方便地进行测震数据应用开发及分析处理工作。为了使它适用于更广泛的领域,应考虑进一步补充完善本软件,支持更多的数据源,如EVT格式的数据等。另外,在处理中国地震台网中心产出的SEED文件时,出现过台站索引与数据卷中的台站对应不上的问题,即数据卷中的台站数量比索引中的多,发生这种情况时,只能以索引中的台站为准。