地震数据下载进阶

参考

https://seismology.gitee.io/seisnote/obspydoc/plot_3_read_and_write/
https://seisman.github.io/SAC_Docs_zh/fileformat/header-variables/

读写波形数据

根据台网寻找台站相关内容

1
2
3
4
5
6
7
8
9
from obspy.clients.fdsn import Client as fdsnclient
from obspy import UTCDateTime
t1 = UTCDateTime('2014-10-28T00:00:00')
t2 = UTCDateTime('2014-10-29T00:00:00')
fdsnstations = fdsnclient().get_stations(network="IU", station="*",
starttime=t1,
endtime=t2, level="response" ) # 获取IU台网的所有台站信息

print(fdsnstations) # 显示台站信息

可以使用下述命令将台站信息保存为pz文件。

fdsnstations.write('fdsnstations.pz', format='sacpz')

但是运行的时候出现如下情况,但是文件却能够正常保存。

UserWarning: IU.ADK.00.VM2 2009-07-19T00:00:00.000000Z has no paz. Skipping.warnings.warn(msg)

也可以通过复制台站信息到文本编辑器保存,进行查找比对。但是通过write得到的信息更丰富。

文件内容为每个台站各个通道的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
* **************************************************
* NETWORK : IU
* STATION : ADK
* LOCATION : 00
* CHANNEL : BH1
* CREATED : 2022-10-28T09:14:39.992066Z
* START : 2009-07-19T00:00:00.000000Z
* END : 2018-09-05T02:00:00.000000Z
* DESCRIPTION : Adak, Aleutian Islands, Alaska
* LATITUDE : 51.8823
* LONGITUDE : -176.6842
* ELEVATION : 130.0
* DEPTH : 0.0
* DIP (SEED) : 0.0
* AZIMUTH : 0.0
* SAMPLE RATE : 20.0
* INPUT UNIT : M
* OUTPUT UNIT : counts
* INSTTYPE : None
* INSTGAIN : 2058.13 (m/s)
* SENSITIVITY : 3453210000.0 (m/s)
* A0 : 3948.34
* **************************************************
ZEROS 5
+0.000000e+00 +0.000000e+00
+0.000000e+00 +0.000000e+00
-2.377070e-02 +0.000000e+00
-2.377070e-02 +0.000000e+00
+0.000000e+00 +0.000000e+00
POLES 6
-1.573350e-02 +0.000000e+00
-1.357340e-02 -1.234000e-02
-1.357340e-02 +1.234000e-02
-2.905130e-02 +0.000000e+00
-3.918000e+01 -4.912000e+01
-3.918000e+01 +4.912000e+01
CONSTANT 1.363445e+13


通过台站具体信息申请数据

IUdata = fdsnclient().get_waveforms(network='IU', station= 'ADK', location='00', channel='*', starttime=t1, endtime=t2, attach_response=True) # 申请具有仪器响应的地震数据

将数据写入到文件中

IUdata.write("test.mseed", format="mseed")

可以选择mseed、sac等格式。

注意!!!
选择mseed格式时,所有波形保存在一个文件里。而sac格式文件会单独保存,每一个
波形文件将单独保存。其中三通道是分离的,但是文件名称保存需要注意。
可以通过Python循环命名,但是需要获取的均为三分量数据,否则会出现顺序错误。

读写地震目录

catalogs = fdsnclient().get_events(starttime=t1, endtime=t2, minmagnitude=4,
                    catalog="ISC") # 获取数据

保存到本地,为kml格式:(谷歌地球专属格式)

catalogs.write('catalogs', format='kml')

或者直接从服务器读取

cat = obspy.read_events() # 从服务器读取

数据信息

以数据IU_ADK_10_B01.sac的头段信息为例:

NPTS = 3456000
数据点数

B = 5.000000e-04
文件起始时间

E = 8.639998e+04
文件结束时间

IFTYPE = TIME SERIES FILE
sac文件类型

LEVEN = TRUE
等时间间隔为True

DELTA = 2.500000e-02
等间隔数据的数据点采样周期

DEPMIN = -4.688610e+05
因变量Y的最小值

DEPMAX = 4.731680e+05
因变量Y的最大值

DEPMEN = 8.591051e+01
因变量Y的均值

KZDATE = OCT 28 (301), 2014
字符数字格式的参考日期,由nzyear、nzjday(一年的第几天)导出

KZTIME = 00:00:00.019
字符数字格式参考时间,由nzhour(时)、nzmin(分)、nzsec(秒)、nzmsec(毫秒)导出

IZTYPE = BEGIN TIME
等效参考时刻

KSTNM = ADK
台站名

KEVNM = -12345 -12345
事件名,长度为16个字节

KHOLE = 10
如果是核爆事件,则是孔眼标识;如果是其它时间,则是位置标识。

LOVROK = TRUE
若为 TRUE,则磁盘里的原始数据可被覆盖,否则不可被覆盖。

NVHDR = 6
SAC头段版本号。目前最新版本为6

SCALE = 1.000000e+00
因变量比例因子,即真实物理场被乘以该比例因子而得到现有数据。

LPSPOL = TRUE
在左手坐标系下,若三通道都是正极性则为真,否则为假。

LCALDA = FALSE
全称为 Calculate Distance and Azimuth。
若为 TRUE,则当事件和台站的坐标被写入或被修改时,
头段变量 dist、gcarc、az、 baz 将自动计算,
否则不会被自动计算,SAC 头段中会存在信息的不兼容。

KCMPNM = BH1
通道名,B、H、1分别代表宽频带、高增益、北向分量

KNETWK = IU
台网名