国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

GSR-18型數(shù)字強(qiáng)震動(dòng)記錄儀事件數(shù)據(jù)格式解析

2021-03-04 03:34:00何榮帥白立新成云輝
高原地震 2021年4期
關(guān)鍵詞:記錄儀字段字節(jié)

何榮帥,白立新,成云輝

(北京市地震局,北京 100080)

0 引 言

北京市強(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ù)軟件和科研工作。

1 記錄文件概要

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)行了分析。

2 記錄文件頭段信息

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ǔ)

3 記錄文件數(shù)據(jù)段信息

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值。

4 讀取記錄文件實(shí)例

本文采用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)讀取示意圖

5 小 結(jié)

本文通過(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ù)資料。

猜你喜歡
記錄儀字段字節(jié)
圖書(shū)館中文圖書(shū)編目外包數(shù)據(jù)質(zhì)量控制分析
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
做夢(mèng)記錄儀
基于GPS的便攜式汽車(chē)行駛記錄儀的研制
汽車(chē)記錄儀保險(xiǎn)絲搭接轉(zhuǎn)換裝置及其模具設(shè)計(jì)
簡(jiǎn)談MC7字節(jié)碼
大容量Flash在井下記錄儀中的應(yīng)用
CNMARC304字段和314字段責(zé)任附注方式解析
無(wú)正題名文獻(xiàn)著錄方法評(píng)述
临邑县| 祁门县| 郓城县| 西林县| 都昌县| 宜兴市| 噶尔县| 江北区| 泰来县| 贞丰县| 左贡县| 曲周县| 邛崃市| 天津市| 克山县| 东辽县| 涞源县| 鄂温| 大田县| 苍梧县| 石台县| 密云县| 冷水江市| 德兴市| 新巴尔虎右旗| 龙江县| 昭苏县| 清丰县| 伊春市| 江津市| 石首市| 巩留县| 镇沅| 广平县| 仙居县| 河源市| 临泽县| 达拉特旗| 商河县| 壶关县| 永福县|