头段变量¶
基本变量¶
nvhdr
*¶
SAC 头段版本号。nvhdr
1是 SAC 中很重要但是不太常用的头段变量。目前版本号为6,旧版本的 SAC 文件(nvhdr<6
)在读入时头段区会自动更新。
nzyear, nzjday, nzhour, nzmin, nzsec, nzmsec
¶
分别表示“年”、“一年的第几天”2 3、“时”、“分”、“秒”、“毫秒”4。这六个头段变量构成了 SAC 中唯一的绝对时刻,SAC 中的其它时刻都被转换为相对于该时刻的相对时间(单位为秒)。关于 SAC 中的绝对时间和相对时间的概念,参考 时间变量 一节。
根据这六个头段变量还可以推导出其它一些辅助型头段变量:
kzdate
:字符数字格式的参考日期,由nzyear
和nzjday
导出kztime
:字符数字格式的参考时间,由nzhour
、nzmin
、nzsec
、nzmsec
导出
如下例所示:
SAC> fg seis
SAC> lh nzyear nzjday nzhour nzmin nzsec nzmsec
nzyear = 1981
nzjday = 88
nzhour = 10
nzmin = 38
nzsec = 14
nzmsec = 0
SAC> lh kzdate kztime
kzdate = MAR 29 (088), 1981
kztime = 10:38:14.000
iztype
¶
等效参考时刻。SAC 的参考时刻是可以任意指定的,但一般选取某个特定的时刻(比如文件起始时刻、发震时刻等等)作为参考时刻。其可以取如下枚举值5:
IUNKN
:未知IB
:以文件开始时刻为参考时间IDAY
:以参考日期当天的午夜作为参考时间IO
:以事件发生时间为参考时间IA
:以初动到时为参考时间ITn
:以用户自定义的时间Tn
为参考时间(n 可取0–9)
若 iztype=IO
,则表示数据以发震时刻作为参考时刻,此时头段变量 o
的值应为0。
iftype
*¶
SAC文件类型,其决定了头段区之后有几个子数据区。可以取如下枚举值:
ITIME
:时间序列文件(即 Y 数据,一般的地震波形数据)IRLIM
:频谱文件(实部-虚部格式)IAMPH
:频谱文件(振幅-相位格式)IXY
:一般的 X-Y 数据IXYZ
:一般的 XYZ(3D)文件
idep
¶
因变量(Y)类型,该头段变量可以不定义,其可以取如下枚举值:
IUNKN
:未知类型IDISP
:位移量,单位为 nmIVEL
:速度量,单位为 nm/sIVOLTS
:速度量,单位为 V6IACC
:加速度量:单位为 \(nm/s^2\)
数据相关变量¶
npts
*¶
数据点数,其值决定了在数据区有多少个数据点。
delta
*¶
等间隔数据的数据点采样周期(标称值)。
odelta
¶
采样周期的实际值,若实际值与标称值不同则有值,一般来说都是未定义的。
b, e
*¶
文件的起始时间和结束时间(相对于参考时刻的秒数)。
leven
*¶
若数据为等间隔则为 TRUE
,否则为 FALSE
。
depmin, depmax, depmen
¶
因变量(Y)的最小值、最大值和均值。
在读入 SAC 文件以及对数据进行处理时,这三个头段变量的值会被自动计算并更新。示例如下:
$ sac
SAC> fg seis
SAC> lh depmax
depmax = 1.520640e+00 # 最大值
SAC> ch depmax 1000 # 强行修改数据最大值
# 这是错误的示范,不要这样做
SAC> lh depmax 1000 # 查看depmax,修改成功
depmax = 1.000000e+03
SAC> w seis.SAC # 写到磁盘中
SAC> q
$ saclst depmax f seis.SAC # 调用saclst查看磁盘文件中的depmax
seis.SAC 1000 # 可以看到磁盘中的文件depmax=1000
$ sac
SAC> r ./seis.SAC # 读入SAC
SAC> lh depmax
depmax = 1.520640e+00 # 此时depmax被自动计算并更新
scale
¶
因变量比例因子,即真实物理场被乘以该比例因子而得到现有数据。
假设真实物理场的Y值大概在 \(10^{-20}\) 量级,由于数据量级太小处理起来可能不太方便。此时可以将数据乘以 \(10^{20}\) 变成合适的量级,并修改
scale=1.0e20
,这样就可以知道自己对数据人为放大了多少倍。
v101.5之前的版本中,在使用 transfer 命令去仪器响应时, 若 scale
的值有定义,则输出的数据会根据该值进行放大并修改 scale
。在 v101.5及其之后的版本中,scale
被忽略。
xminimum, xmaximum, yminimum, ymaximum
¶
仅用于 3D(XYZ)文件中,记录X和Y的最小/大值。
nxsize, nysize
¶
仅用于 3D(XYZ)文件中,表示X和Y方向的数据点数。
iqual
¶
iqual7标识数据质量,可取如下值:
IGOOD
:高质量数据IGLCH
:数据中有毛刺(glitches)IDROP
:数据有丢失(dropouts)ILOWSN
:低信噪比数据IOTHER
:其它
isynth
¶
合成数地震图标识。
IRLDTA
:真实数据
事件相关变量¶
kevnm
¶
事件名,长度为16个字节。
evla, evlo, evel, evdp
¶
分别代表事件的纬度(-90到90度)、经度(-180到180度)、高程(单位为 m)和深度(单位为 km,以前为 m)。
ievreg
¶
事件地理区域8。
ievtyp
¶
事件类型,这里仅列出部分常见的枚举值:
IUNKN
:未知事件INUCL
:核事件IEQ
:地震IOTHER
:其它
mag
¶
事件震级。
imagsrc
¶
震级信息来源,可以取如下枚举值:
IREB
:人工检查过的事件目录IUSGS
:USGSIBRK
:UC BerkeleyICALTECH
:California Institute of TechnologyIEVLOC
:Event LocationIJSOP
:Joint Seismic Observation ProgramIUSER
:The individual using SAC2000IUNKNOWN
:未知
imagtyp
¶
震级类型,取如下枚举值:
IMB
:体波震级IMS
:面波震级IML
:区域震级IMW
:矩震级IMD
:持续时间震级IMX
:用户自定义震级
gcarc, dist, az, baz
¶
gcarc
:全称Great Circle Arc,即震中到台站的大圆弧的长度,单位为度;dist
:震中到台站的距离,单位为 km;az
:方位角,震中到台站的连线与地理北向的夹角,单位为度;baz
:反方位角,台站到震中的连线与地理北向的夹角,单位为度。
震中距、方位角和反方位角的计算涉及到球面三角的知识,具体公式及其推导可以参考相关代码及书籍。此处列出部分仅供参考:
SAC 源码
src/ucf/distaz.c
CPS330 源码
VOLI/src/udelaz.c
o, ko
¶
o
为事件的发生时刻相对于参考时刻的秒数。ko
是绘图时时间变量
o
的标识符。
khole
¶
若为核爆事件,则其为孔眼标识;若为其它事件,则为位置标识。
nevid, norid, nwfid
¶
三者分别标识事件 ID、起始时间 ID和波形 ID,仅用于 CSS 3.0 文件中。CSS 3.0 是 SAC 可以处理的一种数据格式,应该是当初 SAC 商业化的产物,目前仍保留在 SAC 头段中。
台站相关变量¶
knetwk, kstnm
¶
地震台网名和台站名。
istreg
¶
台站地理区域。
stla, stlo, stel, stdp
¶
stla
:台站纬度(-90到90度)stlo
:台站经度(-180到180度)stel
:台站高程,即地震仪与海平面之间的高程差(单位为米),正值表示仪器位于海平面以上stdp
:地震仪相对于当地地表的深度(单位为米)
cmpaz, cmpinc, kcmpnm, kstcmp
¶
一个台站至少需要三个正交的通道/分量才能完整地记录地面运动物理量。
cmpaz
和 cmpinc
指定了单个通道记录的方向矢量。
下图给出了 SAC 所使用的 NEU 坐标系,需要注意的是这是一个左手坐标系。图中蓝色箭头为通道所记录的方向矢量,若地面运动与该方向一致,则为正,否则为负。其中,头段变量 cmpaz
表征通道的方位角,其定义为从N向开始顺时针旋转的角度,即图中的角度 \(\phi\);cmpinc
表征通道的入射角,定义为相对于 U 方向向下旋转的度数,即图中的角度 \(\theta\)。
根据定义,地震仪标准通道的 cmpinc
和 cmpaz
值如下表:
方向 |
|
|
---|---|---|
N |
0 |
90 |
E |
90 |
90 |
U |
0 |
0 |
对于非标准方向的地震通道来说,很容易根据 cmpinc
和 cmpaz
的值,将其旋转到 NEU 坐标系或者 RTZ 坐标系,这些将在 分量旋转
一节中说到。
kcmpnm
是通道名 (component name),用于存储通道的信息。它包含了三个英文字符,依次为频带码 (Band Code)、仪器码 (Instrument Code) 和方位码 (Orientation Code)。例如,kcmpnm
为 BHZ
意味着该 SAC 文件的通道是宽频带高增益的垂向分量。由于很多台站的水平分量并不是严格的东西、南北方向,现在 IRIS 推荐用 1 和 2 代替 N 和 E。
kstcmp
为辅助型变量,表示台站分量,由 kstnm
、cmpaz
、cmpinc
推导得到。
lpspol
¶
如图 cmpaz 和 cmpinc 示意图 所示,在左手坐标系下,若三通道都是正极性则为真,否则为假。
震相相关变量¶
a, f, tn
¶
a
和 f
用于存储事件的初动时刻和结束时刻相对于参考时刻的秒数。
Tn
(n=0–9)用于存储用户自定义的时刻相对于参考时刻的秒数,常用于存储震相到时。
ka, kf, ktn
¶
a
、f
以及 Tn
都有一个对应的以 k 开头的字符型头段变量,称之为时间标识。时间标识用于说明对应的时间头段变量中所包含时间的含义。
比如头段变量 a
中通常包含 P 波到时,则此时 ka
的值可以设置为“P”;头段变量 t1
中包含了震相 PcP 的到时,则一般定义 kt1
为“PcP”。
在绘图时,若时间头段变量中有值,则默认会在该时刻处绘制一条垂线,若相应的时间标记有定义,则将时间标记的值显示在垂线附近。
Xmarker
¶
震相相关的变量对可以构成一个辅助型变量。a
和 ka
可以构成amarker
,f
和 kf
可以构成 fmarker
, o
和
ko
可以构成 omarker
,tn
和 ktn
可以构成
tnmarker
(n=0–9)。
这些辅助型变量可以在 listhdr 中使用。
仪器相关变量¶
kinst, iinst, respn
¶
kinst
为记录仪器的通用名称,iinst
为记录仪器的类型, respn
为仪器相应参数。
其它变量¶
usern
¶
usern
(n=0–9)用于存储用户自定义的浮点型数值。
kusern
¶
kusern
(n=0–2)用于存储用户自定义的字符型值。
lovrok
¶
若为 TRUE
,则磁盘里的原始数据可被覆盖;若为 FALSE
,则原始数据不可被覆盖。主要用于保护原始数据,一般来说很少用到,若是出于保护原始数据的目的,应优先考虑对原始数据做备份。
lcalda
¶
全称为 Calculate Distance and Azimuth。若为 TRUE
,则当事件和台站的坐标被写入或被修改时,头段变量 dist
、gcarc
、az
、
baz
将自动计算,否则不会被自动计算,SAC 头段中会存在信息的不兼容。
kdatrd
¶
数据被读入计算机的日期(一般很少使用)。
- 1
星号表示该头段变量在 SAC 中必须有定义值,下同。
- 2
使用 jday 而不是 “month+day” 可以少用一个头段变量。
- 3
1月1日对应的
nzjday
是1而不是0。- 4
1 s = 1000 ms
- 5
枚举型在C源码中使用
#define
宏来定义的,比如#define IO 11
,所有可取的枚举值都以字母 I 开头。- 6
不解
- 7
标识仅表示SAC程序内部未使用该头段变量,即变量有值或者无值、有何值,对于程序的运行不会产生任何影响,但用户可以在自己的程序中自由使用这些头段变量。下同。
- 8
Flinn-Engdahl Regions: http://en.wikipedia.org/wiki/Flinn-Engdahl_regions