何榮帥,白立新,成云輝
(北京市地震局,北京 100080)
北京市強(qiáng)震動(dòng)觀(guān)測(cè)臺(tái)網(wǎng)于“十五”項(xiàng)目期間購(gòu)置了22臺(tái)瑞士GEOSIG公司生產(chǎn)的GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀。迄今為止,該儀器在北京市強(qiáng)震動(dòng)臺(tái)網(wǎng)一直處于正常運(yùn)行狀態(tài),并多次獲得地震事件數(shù)據(jù)記錄。由于廠(chǎng)商提供儀器文檔中未提供事件數(shù)據(jù)格式說(shuō)明,工作人員在獲取地震記錄后,需通過(guò)GEOSIG公司提供的格式轉(zhuǎn)換軟件進(jìn)行轉(zhuǎn)換,然后才能進(jìn)行后續(xù)數(shù)據(jù)處理,使用上存在諸多不便。為減少工作人員的工作強(qiáng)度,作者根據(jù)GEOSIG公司提供的GSR-24強(qiáng)震動(dòng)記錄儀頭文件說(shuō)明和SEISAN地震處理軟件作為參考,對(duì)GSR-18型強(qiáng)震動(dòng)記錄儀事件數(shù)據(jù)格式進(jìn)行了解析,以便工作人員能夠順利編寫(xiě)讀取該設(shè)備事件數(shù)據(jù)、處理數(shù)據(jù)軟件和科研工作。
GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀記錄事件數(shù)據(jù)文件有兩種格式,一種為文件名擴(kuò)展名為GSR,另一種文件擴(kuò)展名為GBR文件格式。以GSR為擴(kuò)展名的文件是由GBR為擴(kuò)展名的文件解壓而得到的,兩種文件均為二進(jìn)制文件。采用GEOSIG公司自帶的軟件從強(qiáng)震動(dòng)觀(guān)測(cè)臺(tái)站遠(yuǎn)程下載后獲得的記錄文件以GSR為文件擴(kuò)展名,而由中國(guó)地震局工程力學(xué)研究所組織開(kāi)發(fā)的InHand QuakeSense數(shù)字強(qiáng)震動(dòng)臺(tái)網(wǎng)監(jiān)控系統(tǒng)軟件平臺(tái)獲得的記錄事件數(shù)據(jù)文件則以GBR為擴(kuò)展名。GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀記錄事件由頭段和數(shù)據(jù)段構(gòu)成,本文對(duì)這兩種數(shù)據(jù)格式分別進(jìn)行了分析。
GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀的事件數(shù)據(jù)頭段分為四個(gè)部分,分別為事件信息、時(shí)間信息、儀器狀態(tài)信息和通道信息部分。由于文件頭段項(xiàng)目較多,因文章篇幅限制,并結(jié)合強(qiáng)震動(dòng)觀(guān)測(cè)處理數(shù)據(jù)的實(shí)際需求,本文僅對(duì)文件頭段主要字段進(jìn)行了分析(表1)。
事件信息部分包括記錄事件的事前、事后事件、觸發(fā)方式和總采樣數(shù)等。時(shí)間信息部分主要包括觸發(fā)時(shí)間,同步時(shí)間等。儀器狀態(tài)信息部分主要包括儀器生產(chǎn)廠(chǎng)商、儀器名稱(chēng)、儀器序列號(hào)、固件版本號(hào)、儀器分辨率、臺(tái)站經(jīng)緯度和儀器狀態(tài)信息等。通道信息主要包括通道名稱(chēng)、通道單位、通道方向、傳感器類(lèi)型和通道峰值等。
GBR和GSR文件在頭段文件格中各字段位置差別不大,主要區(qū)別表現(xiàn)在:GBR頭段文件中對(duì)整型數(shù)據(jù)讀取需采用大字節(jié)序讀取,而GSR文件則需采用小字節(jié)序讀取。另外GBR文件群延遲字段從第129個(gè)字節(jié)位置讀取,而GSR文件則需從第128個(gè)字節(jié)位置讀取。
從事件數(shù)據(jù)讀取事件起始時(shí)間一直是令人困惑的問(wèn)題,在SEISAN8.1版本之前,這個(gè)問(wèn)題一直沒(méi)有解決[1],原因可能與廠(chǎng)商一直沒(méi)有提供具體的GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀事件格式說(shuō)明有關(guān)。參考GSR-24型強(qiáng)震動(dòng)記錄儀事件數(shù)據(jù)頭文件說(shuō)明和SEISAN源程序,GSR-24型強(qiáng)震動(dòng)記錄儀事件觸發(fā)時(shí)間采用BCD編碼方式。通過(guò)對(duì)GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀文件頭段分析表明,頭段中事件觸發(fā)時(shí)間采用的也是BCD編碼方式。GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀事件記錄起始時(shí)間與觸發(fā)時(shí)間、千分位觸發(fā)時(shí)間和群延遲有關(guān),獲取記錄事件的起始時(shí)間=觸發(fā)時(shí)間+千分位觸發(fā)時(shí)間/1000-群延遲/1000-事前時(shí)間。
另外,從文件頭段上可以看出,臺(tái)站編碼由兩個(gè)字段相加組成,第一個(gè)字段起始于第270個(gè)字節(jié),由3個(gè)字符組成,第二個(gè)字段起始于第280個(gè)字節(jié),由2個(gè)字符組成。這可能為適應(yīng)與我國(guó)“十五”強(qiáng)震動(dòng)臺(tái)站建設(shè)規(guī)范而做出的修改有關(guān)。
表1 GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀事件數(shù)據(jù)文件頭內(nèi)容
圖1 GBR和GSR數(shù)據(jù)段數(shù)據(jù)存儲(chǔ)
GBR和GSR文件在數(shù)據(jù)段上存在較大差別,這可能與GBR文件采取壓縮方式存儲(chǔ),而GSR文件采取非壓縮方式存儲(chǔ)有關(guān)。分析表明,GBR和GSR數(shù)據(jù)段起始位置不同,GBR有效數(shù)據(jù)段起始于第1 027個(gè)字節(jié)位置,而GSR有效數(shù)據(jù)段起始于第1 024個(gè)字節(jié)位置。GBR數(shù)據(jù)段由大小為504個(gè)字節(jié)的數(shù)據(jù)塊,數(shù)據(jù)塊間隔8個(gè)字節(jié)。每個(gè)數(shù)據(jù)塊由56個(gè)字段組成,每個(gè)字段占9個(gè)字節(jié),每個(gè)字段存儲(chǔ)了3個(gè)通道的數(shù)據(jù),分布為x,y,z通道。每個(gè)通道占3個(gè)字節(jié),由3個(gè)字節(jié)構(gòu)成一個(gè)有符號(hào)整數(shù),數(shù)據(jù)記錄為count值。GSR數(shù)據(jù)段由大小為12個(gè)字節(jié)的數(shù)據(jù)塊,數(shù)據(jù)塊間隔4個(gè)字節(jié),每個(gè)數(shù)據(jù)塊由1個(gè)字段組成,每個(gè)字段存儲(chǔ)了3個(gè)通道的數(shù)據(jù),分布為x,y,z通道。每個(gè)通道占4個(gè)字節(jié),由4個(gè)字節(jié)構(gòu)成一個(gè)有符號(hào)整數(shù),數(shù)據(jù)記錄為count值。
本文采用Python語(yǔ)言編寫(xiě)的程序?qū)崿F(xiàn)了對(duì)北京市強(qiáng)震動(dòng)觀(guān)測(cè)臺(tái)網(wǎng)GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀的事件數(shù)據(jù)的讀取。Python是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由Python語(yǔ)言編寫(xiě)的程序,基本不經(jīng)修改即可跨平臺(tái)使用。Python語(yǔ)言提供的struct模塊能夠構(gòu)造并解析打包的二進(jìn)制數(shù)據(jù),可用于處理諸如將二進(jìn)制數(shù)據(jù)從文件中讀取的操作。
本程序主要僅顯示了如何讀取GBR事件記錄的采樣數(shù)、起始時(shí)間和數(shù)據(jù)塊等內(nèi)容,如需要讀取GSR文件或其他字段,通過(guò)表1所給各字段字節(jié)位置,采取類(lèi)似的方式即可讀取。
class GbrFile:
def __init__(self,filename):
self.filename=filename
def __bcd_code(self,a):
a=(0x0F&(a>>4))*10+(0x0F & a)
return a
#signal process data
def __to_int(self,chunk):
data_fmt="<3b"
number = struct.unpack(data_fmt,chunk)
return number[0]<<16 | (number[1]<<8 & 0x0FF00) | (number[2]&0x000FF)
def get_evt_info(self):
gbr_evt=open(self.filename,"rb")
gbr_evt.seek(16)
data_fmt="
data_str=struct.unpack(data_fmt,gbr_evt.read(struct.calcsize(data_fmt)))
self.pre_time=int(data_str[0])
gbr_evt.seek(32)
data_fmt="<4B" #TriggerTime
data_str=struct.unpack(data_fmt,gbr_evt.read(struct.calcsize(data_fmt)))
hour=int(self.__bcd_code(data_str[0]))
minute=int(self.__bcd_code(data_str[1]))
second=int(self.__bcd_code(data_str[2]))
milli_second=int(self.__bcd_code(data_str[3]))*1000
data_fmt="<4B" #TriggerDate
data_str=struct.unpack(data_fmt,gbr_evt.read(struct.calcsize(data_fmt)))
day=int(self.__bcd_code(data_str[0]))
month=int(self.__bcd_code(data_str[1]))
year1=int(self.__bcd_code(data_str[2]))
year2=int(self.__bcd_code(data_str[3]))
data_fmt="
data_str=struct.unpack(data_fmt,gbr_evt.read(struct.calcsize(data_fmt)))
#print "TriggerThousands=",data_str
trigger_thousands=int(data_str[0])*1000
gbr_evt.seek(128)
data_fmt="<2B" #Group delay
data_str=struct.unpack(data_fmt,gbr_evt.read(struct.calcsize(data_fmt)))
print "Group delay=",data_str
group_delay=int(data_str[1])*1000
year=year1*100+year2
microsecond=milli_second*10+trigger_thousands
trigger_time=datetime(year,month,day,hour,minute,second,microsecond)
self.trigger_time=trigger_time-timedelta(microseconds=group_delay)
self.start_time=self.trigger_time-timedelta(seconds=self.pre_time)
#read signal data
gbr_evt.seek(1027)
data=gbr_evt.read(9)
i=1
j=1
self.x_data=[]
self.y_data=[]
self.z_data=[]
while len(data)==9:
data_str1=data[:3]
self.x_data.append(self.__to_int(data_str1)*GRAVITY*self.lsb)
data_str2=data[3:6]
self.y_data.append(self.__to_int(data_str2)*GRAVITY*self.lsb)
data_str3=data[6:9]
self.z_data.append(self.__to_int(data_str3)*GRAVITY*self.lsb)
j+=1
if i%56==0:
position=gbr_evt.tell()
gbr_evt.seek(position+8)
i=1
data=gbr_evt.read(9)
else:
i+=1
data=gbr_evt.read(9)
gbr_evt.close()
圖2 圖1 GSR-18事件(a)和功能測(cè)試文件(b)讀取示意圖
本文通過(guò)對(duì)北京市強(qiáng)震動(dòng)臺(tái)網(wǎng)GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀事件數(shù)據(jù)格式的分析,為該類(lèi)型儀器記錄的數(shù)據(jù)格式快速轉(zhuǎn)換提供了便利手段,減少工作人員在處理此類(lèi)儀器的事件記錄工作中花費(fèi)的時(shí)間和精力,提高了工作效率。另外,本文對(duì)擁有同型號(hào)儀器的強(qiáng)震動(dòng)觀(guān)測(cè)臺(tái)網(wǎng)在數(shù)據(jù)分析處理時(shí)也具有一定的參考價(jià)值,同時(shí)建議在臺(tái)網(wǎng)建設(shè)時(shí)應(yīng)盡可能的要求儀器供貨商提供更加完備的技術(shù)資料。