基金项目:地震科技星火计划项目“新震级国家标准在云南台网的应用(XH18043)”资助.
(云南省地震局,云南 昆明 650224)
(Yunnan Earthquake Agency,Kunming 650224,Yunnan,China)
SEED; miniSEED; Steim1; Steim2; data compression; encoding style; data decompression
备注
基金项目:地震科技星火计划项目“新震级国家标准在云南台网的应用(XH18043)”资助.
研究地震数据存储及交换的SEED和miniSEED格式标准,对存储格式中的Steim1和Steim2的压缩方法和编码方式进行了深入分析,对比了国内外SEED格式的差异,利用MATLAB软件实现了SEED和miniSEED格式压缩数据的解压和应用。
In this paper,the SEED and miniSEED format standards for seismic data storage and exchange are studied. The compression methods and coding methods of Steim1 and Steim2 in the storage format are deeply analyzed,and the differences between SEED formats at domestic and abroad are compared. Decompression and application of compressed data in SEED and miniSEED format are carried out based on the MATLAB software.
引言
地震数据交换标准(Standard for the Exchange of Earthquake Data,简称SEED),是国际数字地震数据交换的一种标准格式,miniSEED格式(王晓磊等,2016)是SEED格式的简化版。两种格式数据在测震观测中被广泛使用,miniSEED格式主要用于单台,形成台站卷,而SEED格式主要用于台网和台阵,形成台网卷。早期的中国数字地震台网(China Digital Seismograph Network,简称CDSN台)的地震记录就开始使用SEED格式(和跃时,2007),我国的测震观测数据从“十五”建设开始即与国际接轨,地震数据存储和交换采用了SEED格式。SEED格式将地震波形数据进行了压缩,有效地解决了存储效率,但同时也带来了应用方面的不便。一般使用者通过两种方式来实现应用:一是利用公开的转换软件,如rdSEED(何加勇,2009),进行一次转换成ASCII码,然后再编写软件转换成自己需要的格式; 二是研究压缩技术编写软件,直接转换为设定的格式。第一种方式繁杂,使用起来不方便,灵活性不强; 第二种方式,由于标准和文献的描述和地震波形数据的实际存在一定的出入,实现起来有非常大的困难。检索以往文献,多侧重于标准、压缩技术等方面的探讨,对具体的压缩方法和解压转换方面的论述寥寥无几。本文基于第二种方式,深入研究这两种格式数据,找出标准和文献描述与实际地震记录的差异,利用MATLAB实现了压缩数据的解压和各种转换。
1 SEED和miniSEED格式
1.1 格式体SEED格式体包含控制头段(ASCII 格式)和时间序列(二进制),其中,控制头段包含关于卷、台站、通道和数据的辅助信息,时间序列(二进制)包含原始数据以及嵌入的与特定通道和时间有关的辅助信息。
1.2 控制头段控制头段共4种:卷索引控制头段,包含关于数据的时间、逻辑记录长度、该逻辑卷的格式版本以及对台站控制头段和时间片控制头段的索引信息(朱文林等,1994a,b); 缩略语字典控制头段,包含用在其它控制头段中的缩略语的定义; 台站控制头段,提供有关台站和它的所有通道的信息; 时间片控制头段,标识随后的时间序列所处的时间段。
1.3 数据记录数据记录紧接着控制头段,用于存储数据的部分。每个记录长度为512字节,若干个记录组成一个数据记录。miniSEED格式记录中,3个方向的数据一起存储,不同方向的记录交替存放,某一方向可连续使用几个记录,数据结构如图1所示。
每个记录中又分为8帧,每帧64字节。记录的第一帧,前48个字节称为固定头段区,统一存放固定头段信息,其中,前20个字节采用ASCII,后面的28个字节采用二进制存储。固定头段区从数据记录的第一个字节开始,前6个字节为序号,第七个字节是一个ASCII字符“D”,表示其为一数据记录,第八个字节为ASCII字符空格。接下来的12个字节包含该记录的台站、位置及通道标识符信息。头段的二进制部分的内容为:记录起始时间、样本数目、采样率因子、采样率乘数、后面的子块数目、数据开始偏移量、第一个子块偏移量等信息。
第一帧中固定头段区后的16个字节,采用二进制存储,用于存储子块,一般可存放2个子块,如果子块数目较多,可采用可变头段(万永革等,1995)的方式进行存放。固定头段的后16个字节根据实际进行子块存放,如有2个子块,则16个字节全部使用; 如果只有1个子块,则其余字节为空闲; 如果不接任何子块,则后续16个字节均为空闲。固定头段的内容如表1所示。
SEED格式记录是对miniSEED记录的重新整理,3个方向独立,并以4 096字节为一记录,实际记录中是将同一方向连续8个512字节的记录串起来,形成一个SEED记录,数据结构见图2。
2 Steim压缩算法
Steim压缩算法是地震数据交换标准的核心压缩技术,其方法是在一个记录中,先存放1个32
位数值的前向积分常数和1个32位数值的反向积分常数,后接连续记录的差值,由于差值较小,占用的数据位也相应变少,这样可以显著地压缩数据,节省存储空间。早期采用Steim1压缩算法(李铂等,2009),由于方法的改进,后来出现了压缩效率更高的Steim2算法(王洪体等,2004)。
2.1 Steim1压缩算法地震记录的两个连续样本之间的差值一般比较小,只有在大地震时,其差值才可能大于8位二进制数所能表示的最大值,对这种极少发生的情况,可以使用一个2字节或4字节数值来表示样本差值。Steim1压缩算法就是一种编码方式,它确定样本差值采用的字节数,对于99%以上的地震记录,样本差值只用1个字节存储。因此,Steim1压缩方式节约了存储,压缩比可达3.5:1。Steim1压缩方式的存储格式为:前向积分常数、反向积分常数、两者之间的全部差值,反向积分常数可对差值进行校核。
512字节的数据记录中,第一帧存放固定头段信息,后7帧存放地震波形数据,每帧均为64字节。存放数据的每一帧的前4个字节,存有16个2位广义字节编码Ci(i取值0~15),每个Ci对应4个字节,Ci值确定对应4个字节的存储的差值数量。
Ci=00(二进制):对应的4个字节存放特殊值,如非数据信息、广义字节编码、前向积分常数、反向积分常数。
Ci=01(二进制):对应的4个字节存放4个1字节差值。
Ci=10(二进制):对应的4个字节存放2个2字节差值。
Ci=11(二进制):对应的4个字节存放1个4字节差值。
C0对应于每一帧的前4个字节,总是存放编码位,其值等于00(二进制)。紧接固定头段后的第一个数据帧中,C0=C1=C2=00(二进制); C1对应的4个字节存放前向积分常数,C2对应的4个字节存放反向积分常数。
地震波形记录的Steim1压缩数据格式见图3,W0对应广义字节编码,X0对应前向积分常数,Xn对应反向积分常数,D0~D3为样本差值。
2.2 Steim2压缩算法随着对地震波形数据研究的深入,发现连续样本差值可以用小于1个字节来表示,最小的差值可以用4个字位表示,出现了Steim2算法。
Steim2算法是将每个Ci对应的4个字节(32位)的差值存储进行改进,取高端2字位用于压缩算法的进一步解码。这2个字位称为“dnib”,即“细解码”广义字节。用后30个字位存储样本差值,进一步提高了存储效率。
Ci=00(二进制):同 Steim1,存放特殊值,如非数据信息、广义字节编码、前向积分常数、反向积分常数。
Ci=01(二进制):同 Steim1,存放4个1字节差值。
Ci=10(二进制):依据“细解码”dnib的值确定存储差值的个数和位数。
dnib=01(二进制):存放1个30字位样本差值。
dnib=10(二进制):存放2个15字位样本差值。
dnib=11(二进制):存放3个10字位样本差值。
Ci=11(二进制):依据“细解码”dnib的值确定存储差值的个数和位数。
dnib=00(二进制):存放5个6字位样本差值。
dnib=01(二进制):存放6个5字位样本差值。
dnib=10(二进制):存放7个4字位样本差值。
如果连续7个差值都介于-8~7,那么就将7个差值放在一个4字节中,使用32个字位中的28个字位。样本差值为-16~-8或7~15时用5个字位表示; 样本差值为-32~-16或15~31时用
6个字位表示; 样本差值在-128~-32或31~127时,用8个字位(即1个字节)表示; 样本差值在-512~-128或127~511时,用10个字位表示; 样本差值在-16 384~-512或511~16 383时,用15个字位表示; 样本差值在-229~-214或214-1 ~229-1时,用30个字位表示。
地震波形记录的Steim2压缩数据格式见图4,W0对应广义字节编码,X0对应前向积分常数,Xn对应反向积分常数,D0~D6为样本差值。
3 压缩数据的解压
SEED格式存储的数据有效地提高了存储效率,节省了存储空间。但给一般的使用者带来许多不便,多数是利用转换软件来拓展使用,应用受到一定的限制。本文着重介绍如何针对压缩数据(姚立平,1993)进行数据读取、转换和应用。
3.1 数据存储字序计算机存储数据时,存在不同的字节序。通常的字节序有LE(Little endian)和BE(Big endian)两种。LE字节序是将低序字节存储在起始地址; BE字节序是将高序字节存储在起始地址。每个字节中的字位存储顺序,即字位序只有固定一种方式,类似BE字节序,即高序字位存储在起始地址。SEED格式的数据存储采用LE字节序,具体见图5。常用软件系统的读取命令,均采用从低地址到高地址的读取顺序,见图6。数据解压时,字位存储和读取的顺序相反,是数据解压的关键所在。
4 结论
本文通过对地震交换数据标准格式的研究,获得如下认识:
(1)国内外SEED格式数据存在差异,台站卷的头文件一致,台网卷在头文件中存在差异,国内的头文件不含震源信息子块。部分国外仪器形成的miniSEED文件中,压缩格式采用steim1算法。
(2)地震记录数据量巨大,选择压缩格式非常必要,利用大数据进行存储和应用时,宜采用文件系统和键值系统进行存储。数据应用时应用系统和软件需将SEED数据解压内容嵌套进去。
(3)miniSEED数据转换成SEED数据格式时,将各方向的数据串连起来,增加头文件即可。
- 何加勇.2009.地震波形归档格式分析和转换[J].震灾防御技术,4(4):461-465.
- 和跃时.2007.CDSN台SEED数据格式的软件开发[J].防灾减灾学报,23(4):59-64.
- 李铂,颜启,石玉燕,等.2009.采用面向对象编程方法实现SEED地震波形格式转化[J].华北地震科学,27(3):27-30.
- 万永革,李鸿吉,姚立平,等.1995.SEED格式台站卷及带有可变头段节数据记录的实例剖析[J].地震地磁观测与研究,16(5):6-12.
- 王洪体,陈阳,庄灿涛.2004.SEED格式STEIM2数据压缩算法在实时地震数据传输中的应用[J].地震地磁观测与研究,25(4):14-19.
- 王晓磊,李刚,卞真付,等.2016.测震NIMIEED格式数据在线实时展示方法研究和Java实现[J].震灾防御技术,11(4):823-829.
- 姚立平.1993.地震数据存储交换中的压缩技术[J].地震地磁观测与研究,14(5):35-40.
- 朱文林,张德存.1994a.新一代系统CDSN应用地震数据的格式及其使用方法[J].地震地磁观测与研究,15(6):63-69.
- 朱文林,张昱,曹永键,等.1994b.新一代CDSN台站磁带数据记录格式[J].地震地磁观测与研究,15(3):61-68.