張 帆,劉靜聞,付 琦,盧燕紅,蔡宏雷
(1. 吉林省地震局,吉林 長春 130117;2. 遼寧省地震局,遼寧 沈陽 110034)
自1985 年以來,國際地震學和地球內(nèi)部物理學協(xié)會(IASPEI) 制定了國際數(shù)字地震數(shù)據(jù)交換標準SEED 文件格式,SEED 格式已經(jīng)成為地震行業(yè)最具權(quán)威性的國際通用標準。為了規(guī)范我國地震臺網(wǎng)波形數(shù)據(jù)管理,2017 年中國地震局發(fā)布了中華人民共和國地震行業(yè)標準中的《地震波形數(shù)據(jù)格式交換》白皮書,結(jié)合我國現(xiàn)狀,對《國際地震數(shù)據(jù)交換標準》進行解讀。在地震行業(yè)中,SEED 格式文件分為現(xiàn)場臺站卷、臺站臺網(wǎng)卷和事件臺網(wǎng)卷三種[1]。本文從實際應用出發(fā),介紹最常用的事件臺網(wǎng)卷SEED文件的解析和使用。解析此類SEED 文件,需要了解SEED 格式文件的存儲結(jié)構(gòu)和規(guī)范,針對這些問題,本研究利用Java 語言的跨平臺性[2],與大數(shù)據(jù)技術(shù)無縫整合的特點研發(fā)一套能提供快速穩(wěn)定準確的SEED 格式地震波形數(shù)據(jù)解析軟件,支持WINDOWS、LINUX 等操作系統(tǒng),并作為基礎(chǔ)軟件包應用于東北地震與火山大數(shù)據(jù)平臺業(yè)務中。
通過“九五”和“十五”項目建設(shè),JOPENS系統(tǒng)在地震行業(yè)推廣使用,解決測震多數(shù)據(jù)源的難題,提供統(tǒng)一準確高效的測震實時流平臺[3],以 SEED 或者 MINSEED 文件格式[4]對測震實時流數(shù)據(jù)進行數(shù)字化存儲,如:連續(xù)波形數(shù)據(jù)、事件波形數(shù)據(jù)等。MINSEED 可以理解為SEED 格式的簡化版,和SEED 格式的主要區(qū)別是不包含頭文件信息,主要存放數(shù)據(jù)體內(nèi)容。因此,本軟件以SEED 文件為研究對象,并兼容MINSEED 格式的解析。
SEED 文件屬于科學類特有的國際通用型數(shù)據(jù)文件,不單單應用于地震領(lǐng)域,還在重力、衛(wèi)星、氣象等領(lǐng)域廣泛應用。為了滿足這些條件,SEED 文件每部分的存儲方式都不同,但是都遵循計算機國際統(tǒng)一的多種編碼規(guī)范來達到通用性的效果。想要解析并讀取SEED 格式文件,不僅要了解SEED 文件底層內(nèi)部結(jié)構(gòu),還要了解SEED 格式文件在地震行業(yè)的應用結(jié)構(gòu)。
SEED 格式文件底層結(jié)構(gòu)如表1 所示。
表1 SEED 格式文件結(jié)構(gòu)說明
表1 是SEED 文件的整體結(jié)構(gòu),包含序號、控制頭段類型碼和延續(xù)碼,也就是通常所說的頭文件。類型A 代表字母數(shù)字字段,是固定長度的ASCII 碼串;D 代表十進制整數(shù)。V-可變長度的ASCII 碼串,用“~”表示結(jié)束。
SEED 除了V、A、S、T 控制頭段邏輯記錄外(每個卷都是4096 字節(jié)),數(shù)據(jù)記錄的卷(4096 字節(jié)) 包含了 8 個 MSEED 數(shù)據(jù)結(jié)構(gòu)體。MSEED 結(jié)構(gòu)體存儲的內(nèi)容就是帶時間片的數(shù)據(jù),與頭文件的S 和T 對應匹配。
SEED 文件格式含控制頭端(ASCII) 和時間序列(二進制) 兩種格式體,如圖1-2 所示。
圖1 控制頭段格式體Fig.1 SEED header format
從圖1 可以看到,每個控制頭段由多個子塊組成,每個子塊包含子塊標識符、長度、若干個數(shù)據(jù)字段。
從圖2 可以看到,數(shù)據(jù)體由多個記錄文件組成,每個文件記錄包含多個邏輯區(qū)域。每個邏輯區(qū)域包含多個數(shù)據(jù)記錄,每個數(shù)據(jù)記錄由標識塊、一個固定頭段、一個可變頭段和數(shù)據(jù)區(qū)組成。每個數(shù)據(jù)記錄都有一個數(shù)據(jù)記錄標識塊與控制頭相對應。文件的整體結(jié)構(gòu)是以一種可擴展的鏈式方式進行數(shù)據(jù)的存儲。
圖2 時間序列格式體Fig.2 Time series format
SEED 文件地震應用結(jié)構(gòu)圖:
從圖3 可以看出,SEED 格式文件分為頭文件和數(shù)據(jù)體文件兩大部分[1],其中頭文件采用ASCII 編碼方式對臺網(wǎng)編碼、臺站標識碼、位置標識、通道標識碼、采樣率、靈敏度、正則化因子、零極點、零極點單位、時間序列等重要信息。其中,時間序列拆分為N 組,每一組稱為時間切片。數(shù)據(jù)體部分采用計算機十進制編碼方式,分成八個數(shù)據(jù)塊存儲數(shù)據(jù)記錄,每一個數(shù)據(jù)塊為4096 個字節(jié),也可以理解為常用的MINSEED 格式文件。
圖3 SEED 地震格式體Fig.3 SEED seismic format volume
頭文件與數(shù)據(jù)體文件通過時間序列進行匹配,才能將記錄的數(shù)據(jù)與對應臺站關(guān)聯(lián)起來,時間序列中每一個時間切片會形成唯一的索引值,這個索引值是與數(shù)據(jù)體中數(shù)據(jù)塊的索引值相對應還原出完整的地震事件信息。一個完整SEED 文件包含的主要元素有臺網(wǎng)編碼、臺站標識碼、位置標識、通道標識碼、數(shù)據(jù)頭段/數(shù)據(jù)質(zhì)量標識、記錄開始和結(jié)束時間、偏移量等。其中,采樣率表示儀器1 秒鐘采集數(shù)據(jù)的個數(shù),通道標識碼表示地震儀的三分項 (東西、南北、垂直),零極點是地震儀線性動態(tài)系統(tǒng)傳遞函數(shù)的參數(shù),分子項是零點,分母項是極點,與正則化因子功能一樣,主要用于去儀器響應及波形仿真。
利用Java 的I/O 流技術(shù)[5]讀取SEED 臺網(wǎng)事件卷,解析頭文件和數(shù)據(jù)體文件。頭文件參數(shù)涉及到數(shù)據(jù)仿真和量綱轉(zhuǎn)化重要信息。數(shù)據(jù)體記錄的數(shù)據(jù)體量大小是由采樣率的大小決定,模擬短周期DD-1 一般采樣率為100Hz,所以數(shù)據(jù)體量龐大,需要利用緩存技術(shù)進行存儲。利用地震學研究聯(lián)合會(Incorporated Research Institutions for Seismology) 發(fā)布的 SEED 軟件包進行SEED 文件的讀取和解析處理。解析SEED 文件分為頭信息和數(shù)據(jù)體兩部分。
頭信息解析流程如下:
圖4 解析讀取SEED 頭信息流程Fig.4 Analysis of SEED header information process
根據(jù)《地震波形數(shù)據(jù)格式交換》白皮書讀取SEED 頭信息,臺站編碼的卷索引標識為“011”,通過索引標識可以提取出臺站編碼。通過卷索引標識“052”來獲取通道信息(Z、N、W 三分項)、采樣率、位置(臺站經(jīng)度和緯度)、靈敏度、T-時間片控制字段等信息。這些信息與數(shù)據(jù)體相匹配,得到臺站完整的波形數(shù)據(jù)。
此流程只是將數(shù)據(jù)體進行分類處理,要想得到按照時間排序的正確的數(shù)據(jù)格式,還需要數(shù)據(jù)體解析流程。
讀取SEED 數(shù)據(jù)體過程中,由于數(shù)據(jù)體分塊存儲,還需要根據(jù)時間序列(即:T-時間片控制字段) 來判斷數(shù)據(jù)塊的連續(xù)性和時序性,解析流程圖如圖5 所示。
圖5 解析讀取SEED 數(shù)據(jù)體流程Fig.5 Analysis of SEED data process
利用Java 的I/O 流技術(shù)將SEED 格式文件轉(zhuǎn)換成byte [] 數(shù)組結(jié)構(gòu),將SEED 頭文件解析存儲以后,根據(jù)解析出的頭信息再去與數(shù)據(jù)體索引的時間片控制字段相匹配,對SEED 數(shù)據(jù)體內(nèi)容進行分塊讀取和解析,這樣就能將一個地震事件的數(shù)據(jù)全部匹配解析出來。在采樣率一致的前提下,判斷SEED 數(shù)據(jù)塊在程序中是否進行拼接解析處理,大致有5 種情況:
(1)源數(shù)據(jù)塊和新數(shù)據(jù)塊時間連續(xù)剛好可以拼接,即:首尾相連。程序根據(jù)時間進行排序,直接將數(shù)據(jù)塊進行合并。
(2)源數(shù)據(jù)塊和新數(shù)據(jù)塊時間完全重合或者新數(shù)據(jù)在源數(shù)據(jù)時間段內(nèi),即:完全重合。程序從連續(xù)率、完整性、穩(wěn)定率三方面選取數(shù)據(jù)質(zhì)量較好的記錄納入處理流程。
(3)源數(shù)據(jù)和新數(shù)據(jù)中存在漏包,即:不連續(xù)。程序會自動根據(jù)時間序列對漏包的部分進行補零填充處理。如果漏包嚴重,程序不會將記錄納入處理流程。
(4)源數(shù)據(jù)和新數(shù)據(jù)存在部分重合,即:部分重合。程序從連續(xù)率、完整性、穩(wěn)定率三方面選取重合部分數(shù)據(jù)質(zhì)量較好的記錄納入處理流程。
(5)源數(shù)據(jù)塊比新數(shù)據(jù)塊時間還大,這時新數(shù)據(jù)為過時包,不進行拼接操作。即:過時數(shù)據(jù)。
程序?qū)σ陨? 種情況處理以后,才保存到緩存中。
雖然上述情況不是很多,經(jīng)過初步分析,主要是因為網(wǎng)絡延時、地震儀故障或老化等客觀因素。為了能準確順利的讀取SEED 信息,程序?qū)ι鲜銮闆r做了相應預處理。
吉林省大數(shù)據(jù)應用采用的是基于Java 語言的Hadoop 技術(shù)[6],此項技術(shù)是針對海量存儲及計算問題的最佳解決方案,Hadoop 的框架最核心的設(shè)計就是:HDFS 和MapReduce。HDFS 為海量的數(shù)據(jù)提供了存儲,而MapReduce 則為海量的數(shù)據(jù)提供了計算,是大數(shù)據(jù)時代最重要的技術(shù)。大數(shù)據(jù)平臺解決了傳統(tǒng)存儲的弊端,實現(xiàn)數(shù)據(jù)實時安全存儲、處理、解析、共享、運算、公共服務等問題。
基于Java 的I/O 流技術(shù)SEED 格式文件解析程序是波形仿真、P 波拾取、定位、震級計算等一系列自動處理環(huán)節(jié)中最基礎(chǔ)的部分,此程序直接影響自動處理過程中的準確性和時效性。與大數(shù)據(jù)技術(shù)一脈相承,大大地提高了系統(tǒng)的穩(wěn)定性。已經(jīng)應用于東北地震與火山大數(shù)據(jù)平臺業(yè)務中,為地震分析預報和應急提供重要的參考依據(jù)。
SEED 格式文件解析在大數(shù)據(jù)平臺中的應用效果,通過Echart 畫圖工具即可在瀏覽器中顯示完整的事件波形,如圖6 所示。
圖6 解析SEED 文件效果圖Fig.6 Analysis of read SEED file rendering
以 2018 年 5 月 18 日凌晨 1:50 分,松原5.7 級地震為例,SEED 解析在大數(shù)據(jù)平臺自動定位應用中的效果,如圖7 所示。
圖7 震例效果圖Fig.7 Earthquake case
圖7 中,左側(cè)為此次地震事件自動拾取的波形記錄,右側(cè)為記錄臺站到地震的距離。該軟件通過基于Java 技術(shù)解析SEED 文件的處理方法和流程,以及對數(shù)據(jù)體部分特殊情況的預處理方法,對SEED 文件讀取達到準確、快速、穩(wěn)定的要求,與Hadoop 技術(shù)[5]實現(xiàn)無縫集成,已經(jīng)應用于大數(shù)據(jù)平臺實際業(yè)務中,并通過多次實際震例檢驗。為大數(shù)據(jù)平臺后續(xù)業(yè)務:波形的實時解析、存儲、地震自動處理流程(地震自動定位、震級自動計算)、烈度圖的快速自動產(chǎn)出等功能,提供底層支撐。
SEED 文件的讀取和解析程序是實現(xiàn)地震自動處理環(huán)節(jié)中最基礎(chǔ)的部分,也決定了自動定位和震級計算的準確性,通過波形展示和多個真實震例(M2.0 以上) 的計算驗證,定位誤差10 公里以內(nèi),震級誤差0.1~0.3 之間,震級越大,參與的臺站越多,誤差率越小,與人工審核后的地震信息越接近吻合,完全可以應用在實際業(yè)務中,為地震速報及震后快速產(chǎn)出烈度圖提供重要的參考依據(jù)。程序具有良好的跨平臺性和移植性,也可以作為獨立的子程序,為其他應用提供基礎(chǔ)服務,也可以作為服務提供給其他程序使用。