CNN_Local_SWS: S 波到时计算
该计算过程涉及 理论到时计算、S 波实际到时计算、时间扰动引入 以及 波形数据读取,确保时间窗口的选取足够精确。
1. 计算 S 波的理论到时
if S_arrival == -1:
S_arrival = model_s.get_travel_times(
source_depth_in_km=st[0].stats.sac['evdp'],
distance_in_degree=st[0].stats.sac['gcarc'],
phase_list=["s"]
)[0].time
- 使用 TauPyModel 计算 S 波传播时间,输入震源深度
evdp
和震中距gcarc
,返回 S 波的理论到达时间S_arrival
(单位:秒)。
2. 计算 S 波的实际到时
S_arr = int((st[0].stats.sac['o'] + S_arrival - st[0].stats.sac['b']) * 100) + shift
- 基于理论到时计算实际到时:
o
:地震事件发生时间。S_arrival
:S 波传播时间。b
:数据记录开始时间。- 转换为 1/100 秒单位 并加入随机偏移
shift
。
3. 引入时间扰动
for ishift in range(22):
shift = int((ishift - 10) * 2 - np.random.choice([0,1], size=1))
if ishift == 10:
shift = 0
- 在
±20
采样点范围内加入随机偏移,模拟测量误差,提高数据鲁棒性。
4. 读取 SAC 头文件时间信息
f = st[0].stats.sac['f']
f_tr = int((f - st[0].stats.sac['b']) * 100)
- 获取时间窗口信息:
f
:事件时间窗口结束时间。b
:记录开始时间。- 计算 时间窗口长度
f_tr
(单位:采样点)。
- 讨论:
b
vs `a:b
代表 文件记录的开始时间,用于计算 S 波到达时间的相对时刻。a
代表 事件初动时间,通常指 P 波初动,在 S 波计算中可能并不适用。
5. 读取波形数据
nz = '../data/SWS_trace/' + nst + '/' + neq + '/' + nst + '.z' nn = '../data/SWS_trace/' + nst + '/' + neq + '/' + nst + '.n' ne = '../data/SWS_trace/' + nst + '/' + neq + '/' + nst + '.e'
st = read(nz)
- 读取三分量波形数据(Z、N、E),用于剪切波分裂分析。
总结
步骤 | 关键代码 | 作用 |
---|---|---|
计算 S 波理论到时 | model_s.get_travel_times() | 计算 S 波的传播时间 |
计算 S 波实际到时 | (o + S_arrival - b) * 100 + shift | 确定 S 波到达时间 |
时间扰动 | shift = (ishift - 10) * 2 - np.random.choice([0,1]) | 使 S 波到时产生随机偏移 |
读取 SAC 头文件 | f = st[0].stats.sac['f'] | 计算时间窗口信息 |
读取波形数据 | st = read(nz) | 读取 Z、N、E 三分量数据 |
最终 S_arr
以 1/100 秒单位计算,用于剪切波分裂分析。
Pytheas计算S波到时
函数: arPicker
该函数使用AR-AIC方法(Akazawa, 2004)来自动计算P波和S波的到达时间。此方法集成在Obspy中,使用obspy.signal.trigger.ar_pick
来实现。
参数:
stream
: 包含波形数据的Stream
对象(包含3个分量:垂直分量、北向分量和东向分量)。该数据流用于计算P波和S波到达时间。
pkCNF
: 配置类parsePickerCnf
,包含S波和P波到达时间计算所需的设置参数。
返回值:
p
: P波到达时间,相对于记录开始时间的秒数。
s
: S波到达时间,相对于记录开始时间的秒数。
def arPicker(stream, pkCNF):
df = stream[0].stats.sampling_rate # 采样率
z, n, e = stream # 获取三分量(垂直、北向、东向)
# 使用ar_pick计算P波和S波的到达时间
p, s = ar_pick(
z.data, n.data, e.data, df,
pkCNF.arFMIN, pkCNF.arFMAX, pkCNF.arLTAP, pkCNF.arSTAP,
pkCNF.arLTAS, pkCNF.arSTAS,
pkCNF.arMP, pkCNF.arMS, pkCNF.arLP, pkCNF.arLS,
s_pick=True # 标记计算S波的到达时间
)
logging.info("AR-AIC arrivals (p,s) in s: " + str((p, s)))
return p, s
关键步骤:
- 参数初始化:从
Stream
对象中获取采样率(df
)和波形数据(z
, n
, e
)。这些数据是用于计算P波和S波到达时间的输入。
- 调用
ar_pick
:使用ar_pick
函数计算P波和S波的到达时间。该函数包含了多个参数,用于配置计算过程中的频率范围、滤波器参数等。
- 返回结果:返回P波和S波的到达时间(单位为秒),并记录日志输出。
参考文献:
- Akazawa, T., 2004. A technique for automatic detection of onset time of P-and S-Phases in strong motion records, 13th World Conference on Earthquake Engineering.
转载请注明出处