SAC时间变量

参考

https://seisman.github.io/SAC_Docs_zh/data-process/event-info/
https://seisman.github.io/SAC_Docs_zh/fileformat/times/#id15

时间变量

一般数据使用时刻+数据点的形式,占用存储空间较多。因此,选择一个参考时刻,其余时刻
使用与参考时刻的秒数差表示。

一般而言,选择一个特殊的时刻作为参考时刻。

SAC使用的是:
“起始相对时间 + 采样间隔 + 数据点数 + 结束相对时间” 表示。即:
b + deltea + npts + e”,但这样造成了头段变量e的特殊性。

SAC 将震相到时(时刻)相对于参考时刻的时间差(即相对时间)保存到头段变量 oaftn 中。

参考时刻变量:nzyearnzjdaynzhournzminnzsecnzmsec
相对时间:beoaftn
绝对时刻:参考时刻+相对时间

命令

listhdr简写lh,用于列出头段变量的值。

1
lh 头段变量名(可以列出多个)

chnhdr简写ch,用于修改头段变量的值。

1
ch b 修改值

使用注意事项:

  • 如果 oaftn 都没有定义, 那么修改 b 值可以用于校正仪器的时间零点漂移以及时区差异。
  • 如果 oaftn 已经被定义, 则修改 b 值会导致与震相相关的头段变量出现错误!

修改参考时间

修改参考时间会导致除了参考时间外的其他变量都没有变化,因此造成绝对时刻发生平移。
理论上可以校正零点漂移和时区,但是由于SAC不支持智能判断时间,因此修改时区相对繁琐。
如果要校正时区,建议直接修改b

修改发震时刻

修改o实现很危险,因此使用ch命令allt选项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SAC> r ./cdv.z
SAC> ch o gmt 1987 173 11 10 10 363 # 06月22日是第173天
# 设置发震时刻
SAC> lh kzdate kztime o # 列出发震日期、发震时间和发震时刻相对于参考时刻的秒数


kzdate = JUN 22 (173), 1987
kztime = 11:09:56.363
o = 1.400000e+01 # 发震时刻相对于参考时刻的时间为14秒
SAC> ch allt -14 iztype IO # 参考时刻加14秒,其他时间减14秒
SAC> lh kzdate kztime o

kzdate = JUN 22 (173), 1987
kztime = 11:10:10.363
o = 0.000000e+00
SAC> wh # 写回磁盘

处理大量数据时:

1
2
3
4
5
r *.SAC
synchronize # 同步所有数据的参考时间
ch o gmt 1987 173 11 10 10 363
ch allt (0 - &1,o&) iztype IO
wh

(0 - &1,o&)中:
&1,o& 表示引用内存中第一个SAC文件的头段变量o的值,
然后用0-o的值得到结果。优势:不需要使用lh o查看o的值。

synchronize :同步所有数据的参考时间,将内存中所有数据拥有相同的参考时刻。
使用此命令后,所有数据的o拥有相同的值。