陳力剛 張曉宇 邢 康 賈漯昭
(河南省地震局, 鄭州 450018)
國家地震烈度速報與預警工程項目(簡稱“預警項目”)是一項具有防震減災實效的民生工程和社會工程,建成后將有效提高減災和社會服務能力。河南省預警項目中一般站烈度計設備于2021 年上半年安裝完畢,相關記錄數據可通過網絡遠程訪問下載,為初步計算一般站的背景噪聲創造了條件。預警項目針對臺站數據包格式做出了新定義,各廠家生產的硬件采集設備已按照新的格式規程生產數據,而現有計算軟件2北京港震機電有限責任公司,童汪練,2017. 數字地震儀參數測定軟件使用手冊,北京港震機電有限責任公司資料.附帶的數據分道軟件無法直接打開預警數據采集器產出的數據,因此,本文通過對預警項目臺站數據包格式規程的解讀,采用C 語言開發了預警項目臺站波形數據解壓軟件,產出相應的分道文本數據文件,并通過具體實例對預警項目連續波形數據包格式和相應的程序實現給出詳細說明。
預警項目臺站數據包格式規程中定義了多種數據包格式,其標識有“cc”、“si”、“ti”、“wc”、“wt”和“ws”,本文著重研究“wc”數據包,即連續波形數據包。“wc”數據包以miniSEED 數據卷為基礎,做了必要的修訂,主要變化為:① miniSEED 數據卷固定頭段區的第0 至第1 個字節定義為“wc”數據包標識位置;② miniSEED 數據卷固定頭段區的第2 個字節內高5 位bit 到第5 個字節定義為數據包順序編號位置,用于數據傳輸時斷點續傳,而第2 個字節內低3 位bit 定義為數據包長度索引;③ miniSEED 數據卷中“純數據子塊[ 1000]”后增加了8 個字節的數據標識區,用于標識通道信息順序、數據量綱和靈敏度信息;④其他少許的新定義,如第36 個字節第7 bit 定義為入網標記等。由此發現,預警項目對mini-SEED 數據卷僅做了少量修訂。為提取“wc”類連續波形數據具體內容,需對該數據卷格式信息做出解讀,在此僅對提取波形使用到的信息做出說明。miniSEED 被定義為SEED 格式標準中的數據記錄格式,一個完整的預警項目miniSEED 數據卷包括固定頭段區、可變頭段區和數據區(中國地震局,2003)。
固定頭段區包含使用數據所需的最低限度信息,主要信息按字節從前向后依次為波形類別標識、數據包序號、質量指示符、臺站標識、位置標識、通道標識、臺網標識、記錄起始時間、樣本數目、采樣率、子塊等。前20 個字節除第2~5 個字節外,均采用ASCII 碼表示,后28 個字節采用二進制表示(張旸等,2007),固定頭段區共48 個字節。
可變頭段區由多個可選的子塊構成,在預警項目中選擇的子塊類型僅為“純數據子塊 [ 1000]”。該子塊包含了對數據區解碼的必要信息,主要信息有編碼格式代碼,一般為0 B,代表Steim2 壓縮格式;字序代碼一般為1,代表大端字節序,高位字節在前,低位字節在后;標識數據記錄長度的指數代碼如果為8,則數據記錄長度為28字節。純數據子塊 [ 1000] 為8 個字節,均采用二進制表示。
純數據子塊 [ 1000] 區域后的8 個字節是最具有預警項目特色定義的區域,位于可變頭段區內,因此在此區域增加自定義信息最適合。本塊信息主要涉及有關數據標識的內容,包括數據區數據的通道順序,如“ENZ”表示數據按照“**E”通道數據、“**N”通道數據、“**Z”通道數據的順序排列;數據量綱取值范圍為0~3,0 表示無量綱,1 表示位移,2 表示速度,3 表示加速度;靈敏度因子記錄儀器記錄的靈敏度因子取值范圍為0~0x3FFFFFFF。預警項目定義的數據標識內容多數為二進制,實際上這8 個字節內容可視為1 個變相的子塊放在可變頭段區內,以增加對數據區的說明。
固定頭段區和可變頭段區數據包含了臺網、臺站、通道、采樣率、樣本數目、時間起點、編碼格式、字節序、數據記錄長度等數據描述信息(王曉磊等,2016),占據了每條miniSEED 數據卷的前64 個字節區域,這些信息是波形數據區的輔助信息(楊周勝等,2019),也是編程提取和使用的主要參數。
數據區包含實際的時間序列數據(中國地震局,2003),數據區位置從固定頭段區第44 至第45 個字節中內容指定的字節序數處開始,這部分數據塊一般采用Steim2 算法壓縮(何加勇等,2009),由若干數據幀組成,每個數據幀為64 個字節。波形數據區具體大小及數據通道、采樣率、樣本數目、量綱、字節序等信息均已在上述固定頭段區和可變頭段區中定義。
預警項目中的波形數據區數據為Steim2 格式,獲取觀測數據后,首先需獲取打開Steim2 格式數據壓縮的鑰匙才能使用。Steim2 壓縮算法是借用語音壓縮中最簡單的差分壓縮算法發展而成的(王翠芳等,2011),其特點是無損壓縮,目前國內外地震數據傳輸和本地存儲普遍采用了壓縮算法。地震數據采用無損壓縮算法的基本原理為:在正常地震背景情況下,地震計輸出的時間序列數據通常具有較強的關聯性,即前一個采樣點相比后一個采樣點變化小,差值小,該差值占用計算機內存小,可能遠遠小于32 bit,而保存1 個原始值卻需32 bit,因此若多個差值按規則填充滿32 bit,可極大地節省存儲空間,這種方式可理解為數據壓縮。后期為恢復原始值,須在特定位置保存一個前向積分常數。筆者認為Steim2 數據格式在壓縮時具有高保真、高效的特征,符合地震動波形記錄“長期平靜”和“長期無震”的特點(王翠芳等,2011),但此算法在地震事件發生時,壓縮效率顯著降低,這是無損壓縮算法的特點。
根據Steim2 格式數據壓縮基本思想,合成壓縮數據時,首先利用直接觀測數據計算差值序列,然后按照規則利用差值序列整合重建32 bit 數據序列。獲取數據后,用戶更關心數據解壓過程,其步驟與壓縮相反,具體如下:
(1)按規則將32 bit 數據序列拆分為差值序列
數據拆分的規則鑰匙隨著壓縮數據進行傳輸,壓縮數據幀的結構如圖1 所示。
改革開放尤其是十八大以來,黨中央提出了關于生態文明建設的一系列新理念新要求。在生態文明理念方面,明確提出了“尊重自然、順應自然、保護自然”“綠水青山就是金山銀山”“山水林田湖草是一個生命共同體”等理念。在生態文明與經濟社會發展的關系方面,提出了“守住生態與發展兩條底線”“良好生態環境是最公平的公共產品,是最普惠的民生福祉”等理念。在生態文明實現路徑方面,強調要樹立“劃定紅線,守住底線與資源上限”“像保護眼睛一樣保護生態環境,像對待生命一樣對待生態環境”等理念。
圖1 中每個字母長度均為32 位,解壓的鑰匙保存在每行行首W0和其后W1~W15中最高的兩位中,拆分對象是W1~W15中后30 位二進制數據。鑰匙(Ck)須與鎖(Wk)一一對應,才能順利解鎖,如圖2 所示。

圖1 數據幀結構Fig. 1 Data frame structure

圖2 Ck 與Wk 的關系及dnib 位置Fig. 2 Relationship between Ck and Wk and dnib location
Ck為2 bit,取值為00、01、10、11,若壓縮數據為Steim1 格式,這4 類鑰匙可拆分Wk數據,但預警項目中規定使用Steim2 格式壓縮數據,需另外4 類鑰匙才可打開第2 道門,從而拆分Wk數據,而打開第2道門的鑰匙隱藏在Wk的最高2 位中。將Ck稱為“廣義字節編碼”,Wk的高端2 位(dnib)稱為“細解碼”,其組合使用如下:

根據上述規則,按照Ck和dnib 組合定義的拆分方法,可將Wk從最低位開始按照4、5、6、8、10、15、30 位的方式進行切割,分離出的數據即為差值。
(2)將差值序列還原為原始數據
獲取差值后,通過前向積分常數還原數據,前向積分常數保存在數據幀0 中的X0內。依次算出原始數據,計算步驟如下:


在數據幀0 中的Xn內還保存有這組數據的反向積分常數,利用該反向積分常數與最后計算出的樣本原值進行比較。如果二者不同,說明數據出現了錯誤。
以預警項目一般站MI3000-C 烈度計數據采集器產出數據為例,對連續波形包數據進行解析,給出的實際二進制(用十六進制表示)數據如圖3 所示。

圖3 MI3000-C 頭段和數據幀0 說明Fig. 3 MI3000-C Header and Data frame 0 description
從固定頭段區和可變頭段區可提取諸多參數信息,如可變頭段區的“C0”字節低2 bit 中包含數字0,說明數據單位為無量綱,此處解壓后的數據單位為count。如果“C0”字節低2 bit 中包含數字為1 或2,則必須給出確定的靈敏度因子,可直接輸出物理量值,但目前獲取的數據為count 值,所以需要在后端服務器軟件進行實際物理量轉換。在本實例中,可獲取前向積分常數X0(FFFFFFA9)為十進制?87,反向積分常數Xn(FFFFFF7A)為十進制?134。隨機抽取W6為樣例,W0和W6數據解析及新合成的W6數據如圖4 所示。

圖4 W0 和W6 數據解析及新合成的W6 數據表Fig. 4 W0 and W6 data analysis and newly synthesized W6 data
利用上述分析結果編寫代碼后才能實用化,對數據進行逐個解析,首先確定各數據的定位,需設置一個參考起點,根據第44 至第45 個字節的內容獲取數據區的開始偏移量并進行定位。筆者通過第15 至第17個字節的通道標識符進行定位,其目的是按通道解壓數據,并形成相應通道的文本文件,以配套CAL79_噪聲功率譜計算軟件使用。
程序流程如圖5 所示,分為數據讀取、字節序轉換、解壓、校驗、文本文件形成等部分,此處著重對數據拆分的實現過程進行說明。


圖5 程序流程Fig. 5 Program flow chart


由程序代碼可知較關鍵的步驟為數據定位、以數據幀為單位執行循環、采用“按位與”的方法提取信息、對出現負值的情況給予處理。筆者通過大量二進制的位操作提高執行效率。
經實際測試,該軟件可對河南省一般站MI3000-C、REMOS-SIT4 烈度計產出的小時波形文件進行分道解碼,且可對基準站和基本站使用的EDAS-24 GN(EEW)、TDE-324 FI/CI 數據采集器產出的小時波形文件進行分道解碼,并在程序解碼過程中設置了數據驗證功能,即前向積分常數X0加各項差值等于反向積分常數Xn,程序判斷為真才能輸出結果,增加了數據解碼的準確性。在獲取解壓后的分道文本數據后,可順利使用噪聲功率譜計算軟件進行臺站背景噪聲環境評估。
本文對預警項目臺站波形數據包格式進行了研究,得出以下結論:
(1)預警項目對數據采集器的產出波形數據格式做出了統一規定,對數據的部分字節內容進行了重新定義,準確把握各字節位的定義和關系是數據解析與使用的前提。
(2)連續波形數據包結構中固定頭段區、可變頭段區和數據區是有機整體,解壓算法需相關區域的參數參與計算,解壓的關鍵在于二進制數據按位拆分。
(3)列出了實用的程序代碼,利用C 語言的位操作方法提取有效信息,并拆分數據。筆者查閱了部分文獻,發現針對地震數據包結構和壓縮的原理描述較多,且較抽象,可操作性不強,具體實現過程多用一個函數包一筆帶過,對實現細節的解讀較少,本文給出了具體實現方法,稍加修改即可運行。