参考
[seisman]https://seisman.github.io/SAC_Docs_zh/
SAC 安装
安装依赖包:
1 | sudo yum install gcc gcc-c++ make |
有些依赖包可能无法安装,例如下面几个。需要手动进行安装。
libedit下载地址:
https://centos.pkgs.org/8/centos-powertools-x86_64/libedit-devel-3.1-23.20170329cvs.el8.x86_64.rpm.html
yum安装即可。
这个安装包未知是否必须安装。
运行如下命令解决报错:X11等错误的情况。
yum install libX*
另几个依赖包:
1 | sudo yum install libxml2 libxml2-devel -y |
编译安装
1 | mkdir build |
运行在主目录下的bashrc文件:~/.bashrc
,加入语句:
1 | export SACHOME=/usr/local/sac |
运行 source ~/.bashrc
即可。
SAC入门
启动与退出
启动SAC
在控制端输入sac
退出SAC
在SAC控制端输入quit
样本数据
SAC支持生成样本数据进行学习,即使手头没有SAC数据也可以进行学习使用。
funcgen(fg)
funcgen(function generator),该命令可以生成一些特定的函数,例如脉冲函数、阶跃函数、正弦函数等。
1 | fg impluse # 生成脉冲函数 |
datagen(dg)
datagen(data generator)。该命令用于生成数据。
1 | dg sub local cdv.? # 生成了CDV台站记录到的近震三分量波形数据,共有三个波形 |
读写数据
写入数据
读取数据之前需要拥有SAC数据。除了申请获取之外,换可以通过生成样本数据的方式获取SAC数据。
在SAC中进行下列输入
1 | datagen sub local cdv.n cdv.e cdv.z # 生成三个SAC数据 |
写入数据的步骤如下:
1 | w test.n test.e test.z # 将内存中的三组数据分别写入到三个新的文件中 |
读取数据
通配符与Linux相同。
*
匹配任意长度字符串?
匹配任意单个非空字符[]
匹配从a到g范围内的任意单个字符[ABC]
或者A,B,C
匹配单个字符A或B或C[0-9]
匹配任意一位数字[a-g]
匹配a到g范围内任意单个字符
1 | read cdv.n cdv.e cdv.z # 读取这三个文件,分别指定这三个文件的文件名 |
!!!注意:数据读取到内存中时,每次读取都会清空内存,因此只会保留一次read
的数据。
使用more
进行追加。
1 | read more 文件名(绝对地址) |
绘图
绘图在上文中已经提及,使用plot
进行绘制。此外,还有plot1
、plot2
、plotpk
命令。
同时绘制多个波形时,先显示一个波形,在命令行界面显示Waiting
。使用回车显示下一个波形。如果不想显示,可以使用kill
命令,简写k
杀死进程。
绘图命令
plot
plot绘制内存块中的所有波形数据,但是每次只显示一个波形,然后等待用户输入再决定是否显示下一个波形。
使用回车显示下一个波形,或者使用kill
命令杀死进程。
plot1
绘制内存块中的所有波形数据,在同一个窗口中一次显示多个波形,拥有共同的X轴和单独的Y轴。
使用perplot
命令设置每个窗口显示的图形数量。
1 | plot1 perplot n # n为显示数量 |
默认情况波形数据按照绝对时间absolute
对齐,若波形数据具有不同的开始时间,则波形数据会出现相对错动;
可以使用所有波形数据相对于relative
各自的开始时间进行绘图,此时X坐标起始为0。
plot2
一次性将所有内存块中的所有波形绘制在一个窗口内,所有波形共用X轴和Y轴。
因此其适合多个波形对比。
1 | color red inc list red blue # 对两个数据分别设置红色和蓝色 |
plotpk ppk
在窗口中显示指定个数的波形,共用X轴,具有单独Y轴。常用于拾取震相。
plotpm ppm
利用成对的波形数据,提取出任一时间段内两个波形数据的振幅信息,绘制在“振幅-振幅”图上。
如果若一对波形数据恰好是同一台站两个互相垂直的分量,则“振幅-振幅”图即为“质点运动图”。从“质点运动图”中,可以提取出震相的一些重要信息。
利用垂直和径向分量的波形数据绘制 Rayleigh 面波的质点运动轨迹:
1 | dg sub tele nykl.z # Z分量 |
plotsp
用于绘制不同格式的谱文件,可以绘制“振幅+相位”或者“实部+虚部”,可以任意指定X、Y轴为线性轴或者对数轴。
1 | fg seis |
图像外观元素
1 | fg seis # 生成数据 |
此外,可以使用以下命令控制坐标轴和坐标系。
- xlim 控制绘图的X轴范围
- xdiv 控制X轴刻度间隔
- xfudge 设定fudge因子,根据数据极值扩展X轴范围
- linlin
- linlog
- loglin
- loglog
- xlin
- xlog
- ylin
- ylog
对数坐标轴可以使用以下命令控制外观: - xfull
- loglab
- floor
线条属性控制
使用line命令进行线条属性控制。
1 | line 4 # 线型为4 |
可以对波形数据进行颜色填充
1 | fg seis # 创建一个数据 |
绘制组合图
典型组合图示例:源自seisman
1 | fg seis # 生成数据 |
图形设备
可以使用begindevices
和enddevices
命令开启、关闭指定的图形设备。
使用setdevice
命令设置默认的图形设备。
xwindows
以位图方式显示的软件窗口系统。
begindevices
启动命令:
1 | BeginDevices Sgf|Xwindows |
- Sgf:Sac图像文件设备
- Xwindows:X window窗口显示系统
enddevices
关闭命令:
1 | EndDevices [ALL|Sgf|Xwindows] |
- ALL:关闭所有图像设备
- SGF:SAC图形文件设备
- Xwindows:X Window图像窗口系统
setdevices
定义后续绘图默认图形设备
1 | SETDEVICE name |
- name:图形设备名
sgftops
SGF格式是SAC自定义的图像文件格式,转换到其他图像格式需要此命令、
用法:
1 | sgftops |
1 | sgftops SGF文件名 PS文件名 [图像线宽 [i|s|si]] # 具体含义见上 |
绘图流程
1 | r cdv.[nez] # 读取数据文件到内存中 |
文件格式
头段变量
基本变量
nvhdr
- nzyear 年
- nzjday 一年的第几天
- kzdate(由上面两个变量构成)
- kztime(由下面两个变量构成)
- nzhour 时
- nzmin 分
- nzsec 秒
- nzmsec 毫秒
1 | fg seis |
iztype
等效参考时刻。
- 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 位移量 单位:nm
- IVEL 速度量 单位:nm/s
- IVOLTS 速度量 单位:V(未知含义)
- IACC 加速度量 单位:nm/s2
数据相关变量
npts
数据点数,决定了数据区有多少个数据点。
delta
等间隔数据的数据点采样周期 (标称值)。
odelta
采样周期的实际值。如果实际值与标称值不同则有值。
一般来说都是未定义的。
b, e
文件的起始时间和结束时间,相对于参考时刻的秒数
leven
数据为等间隔则为True,否则为False
depmin depmax depmen
因变量Y的最小值、最大值、均值。在读入SAC文件以及对数据进行处理时,这三个头段变量的值会被自动计算并更新。
scale
因变量比例因子,即真实物理场被乘以该比例因子而得到现有数据。scale=1.0e20
指乘10^20转换量级
xmininum xmaximum yminimum ymaximum
仅用于3D文件中,记录X、Y的最小、最大值。
nxsize nysize
仅用于3D文件中,记录X、Y方向的数据点数。
iqual
iqual标识数据质量,可以取如下值:
- IGOOD 高质量数据
- IGLCH 数据中有毛刺 glitches
- IDROP 数据有丢失 dropouts
- ILOWSN 低信噪比数据
- IOTHER 其他
isynth
合成数地震图标识IRLDTA
真实数据
事件相关变量
kevnm
事件名,长度为16个字节
evla evlo evel evdp
分别代表事件发生的 纬度(-9090) 经度(-180180) 高程(m)和深度(km)
ievreg
事件发生的地理区域
Flinn-Engdahl Regions: http://en.wikipedia.org/wiki/Flinn-Engdahl_regions
ievtyp
事件类型
- IUNKN 未知事件
- INUCL 核事件
- IEQ 地震
- IOTHER 其他
mag
震级
imagsrc
震级信息来源
- INEIC:http://earthquake.usgs.gov/earthquakes/search/
- IPDE:https://earthquake.usgs.gov/data/comcat/catalog/us/
- IISC:http://www.isc.ac.uk/iscbulletin/search/catalogue/
- IREB:人工检查过的事件目录
- IUSGS :USGS
- IBRK :UC Berkeley
- ICALTECH:California Institute of Technology
- ILLNL:Lawrence Livermore National Laboratory
- IEVLOC:Event Location
- IJSOP:Joint Seismic Observation Program
- IUSER:The individual using SAC2000
- IUNKNOWN:未知
imagtyp
震级类型
- IMB:体波震级
- IMS:面波震级
- IML:区域震级
- IMW:矩震级
- IMD:持续时间震级
- IMX:用户自定义震级
grarc
全称Great Circle Arc;震中距,震中到台站大圆弧的长度,单位为度
dist
震中与台站之间的距离,单位为km
az
方位角,震中到台站的连线与地理北向的夹角,单位为度
baz
反方位角,台站到震中的连线与地理北向的夹角,单位为度
o ko
- o 事件发生时刻相对于参考时刻的秒数
- ko 绘图时时间变量o的标识符
khole
若为核爆事件,为孔眼标识;如果是其他事件为位置标识
nevid norid nwfid
标识事件ID、 起始时间ID、 波形ID
台站相关变量
knetwk kstnm
地震台网名、台站名
istreg
台站地理区域
stla stlo stel stdp
台站纬度、精度、高程(地震仪与海平面之间高程差(m))和深度(地震仪相对于当地地表的深度(m))
cmpaz cmpinc kcmpnm kstcmp
方位角、入射角、通道名和辅助型变量(表示台站分量)
前两者详见Rdseed学习笔记
kcmpnm 通道名(component name),用于存储通道的信息。包含三个英文字符,包括:
频带码(Band Code)、仪器码(Instrument Code)和方位码(Orientation Code)。
lpspol
如图,左手坐标系下,三通道都是正极性为真,否则为假
震相相关变量
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)。
仪器相关变量
kinst
记录仪器的通用名称
iinst
记录仪器的类型
respn
仪器相应参数
其它变量
usern
n=0-9 用于存储用户自定义的浮点型数值
kusern
n=0-2 用于存储用户自定义字符型值
lovrok
若为真,则磁盘里的原始数据可以被覆盖;
若为假,则原始数据不可被覆盖。
用于保护原始数据。建议先做好备份再操作原始数据。
lcalda
全称:Calculate Distance and Azimuth。如果为真,则当事件和台站
的坐标被写入或被修改时,头段变量dist
gcarc
az
baz
将自动计算,否则不会被自动计算,SAC头段中存在信息的不兼容。
kdatrd
数据被读入计算机的日期。
阿波罗S12头段变量
NPTS = 46108 采样点数
B = 6.000000e-04 起始时间 相对于参考时刻的秒数
E = 6.959548e+03 结束时间
IFTYPE = TIME SERIES FILE sac文件类型, ITIME表示时间序列值
LEVEN = TRUE TRUE表示等时间间隔采样
DELTA = 1.509434e-01 采样周期
DEPMIN = -5.100000e+02 Y的最小值
DEPMAX = 5.120000e+02 Y的最大值
DEPMEN = 5.343101e+01 Y的平均值
KZDATE = JUL 26 (208), 1972 记录时间的绝对时刻
KZTIME = 16:29:18.327 SAC中的绝对时刻
KSTNM = S12 台站名
KHOLE = 核爆事件为孔眼标识,其他事件为位置标识
LOVROK = TRUE True表明原始数据可覆盖
NVHDR = 6 头段变量版本号。目前为6
LPSPOL = FALSE 三通道都是正极性为真。否则为假。
LCALDA = TRUE True标识当事件和台站坐标被写入或修改时,头段变量dist、gcarc、az、baz将自动计算
KCMPNM = MHZ 台站名
KNETWK = XA 台网名