在 Obspy 中,如何获取特定时间的振幅值?

In Obspy, how can I get an amplitude value at a specific time?

假设我已经有一个对象 Trace,比如说 trace,并且我想在 30 秒时获得一个振幅数据。

我想我可以像下面那样做,为简单起见,假设开始时间为 0,

delta = trace.stats.delta
count = int(30 / delta)
target_value = trace.data[count]

他们准备好方法了吗? 像....

trace.foo(time=30)

目前我们还没有这样的便捷方法,但我同意这是一个很好的补充。您可以在我们的 GitHub 问题跟踪器中提出功能请求:https://github.com/obspy/obspy/issues/new

同时,您可以使用采样时间便利函数和一些 numpy 来实现您想要的。

如果您要查找相对于跟踪开始的时间:

from obspy import read

tr = read()[0]
my_time = 4  # 4 seconds after start of trace
times = tr.times()
index = times.searchsorted(my_time)
print(times[index])
print(tr.data[index])

4.0
204.817965896

如果您正在寻找绝对时间:

from obspy import read, UTCDateTime

tr = read()[0]
my_time = UTCDateTime("2009-08-24T00:20:12.0Z")  # 4 seconds after start of trace
times = tr.times('utcdatetime')
index = times.searchsorted(my_time)
print(times[index])
print(tr.data[index])

2009-08-24T00:20:12.000000Z
156.68994731

如果您没有匹配一个样本的确切时间,则必须手动插值。

希望这能让您入门。