Lazy loaded image初识 ObsPy —— 地震数据处理示例
2024-12-18
| 2024-12-20
字数 1900阅读时长 5 分钟
type
status
date
slug
summary
tags
category
password
icon
AI 摘要
本篇学习记录主要参考 ObsPy 官方文档及其中文翻译稿,另有参考其他个人资料站“地震学学习笔记

前言

应《数字信号处理(地学)》课程的学习要求,结合研究地震学领域,需要对地震数据(波信号)的处理方法和流程做一个简单的期末实操汇报。故此,本次 ObsPy 实操使用 Jupyter Notebook 编辑运行,在线编辑可尝试使用官方 Try

0. ObsPy 是什么?

ObsPy 是一个开源的 Python 库,专门用于处理地震学数据。它提供了一套强大的工具,可以帮助用户读取、写入、处理、分析和可视化地震数据。ObsPy 的目标是提供一个易于使用、功能强大且可扩展的平台,用于地震学研究和应用。
  • 数据读取和写入: 支持多种地震数据格式,如 SAC, MiniSEED, SEED, GeoJSON 等。
  • 数据预处理: 包括滤波、去趋势、积分、微分、重采样等。
  • 频谱分析: 包括快速傅里叶变换 (FFT)、功率谱密度 (PSD)、时频分析等。
  • 地震事件处理: 包括震相拾取、事件定位、震级计算等。
  • 仪器响应处理: 包括去除仪器响应、模拟仪器响应。
  • 可视化: 包括波形图、频谱图、地震剖面图等。
  • 数据访问: 通过 FDSN 客户端访问全球地震台网数据。
  • 地理空间处理: 包括坐标转换、距离计算等。
General Packages: obspy.core、obspy.imaging、obspy.signal、obspy.geodetics、obspy.taup、obspy.realtime
Others: (Scripts)、(Clients)、(IO)

1. 世界标准时间

“时间问题”是申请地震数据最基本的问题,利用 ObsPy 申请数据时需要用 UTCDateTime 对象来控制发震时刻、申请波形数据的起始时间和结束时间等。

2. 读写地震数据

ObsPy 利用 read() 函数将各种格式的地震数据(如 SAC、MiniSEED 等)读入 Stream 中。
Stream 类似于列表对象,可以包含多个 Trace。每个 Trace 都包含指向连续时间序列的 data 属性和指向所有元数据的 stats 属性。例如,starttime 和 endtime 等元数据都以字典形式储存在 Stats 对象中。
经过处理后,可以用 write() 方法将数据保存到本地。

3. 波形绘制

4. 从数据中心申请地震数据

通过 obspy.clients.fdsn 模块可以访问任何支持 FDSN Web Services 协议的网络服务器,功能强大,基本上可以满足科研需求,比如下载波形数据、地震目录和台站元数据等。如果想同时发送多个请求可以使用 get_waveforms_bulk() 方法
通过 get_waveforms() 方法从服务器下载波形数据时,可以添加关键字参数自定义申请数据:
  • 添加参数 filename="1.mseed" 后将会把申请的数据保存在本地目录中的 1.mseed ,返回对象的结果为 None
  • 设置 attach_response=True 将为波形数据添加仪器响应信息。
以下示例申请了美国 IU 台网 A* 台站 LHZ 分量从 2010-02-27 06:45 (UTC) 开始的 60 分钟连续波形数据,可使用通配符作为条件参数。
下载地震事件:通过 get_events 方法可以从服务器申请地震数据,申请结果返回 Catalog 对象:
下载台站数据:通过 get_stations 方法可以从服务器申请台站数据,申请结果返回 Inventory 对象:

5. obspy.signal - Signal processing routines for ObsPy

Capabilities include filtering, triggering, rotation, instrument correction and coordinate transformations.

5.1 Filter

The filter module provides various filters, including different bandpass, lowpass, highpass, bandstop and FIR filter.
滤波器 模块提供各种滤波器,包括不同的带通、低通、高通、带阻和 FIR 滤波器。
⚠️
Before filtering you should make sure that data is demeaned/detrended, e.g. using  detrend() . Otherwise there can be massive artifacts from filtering.
在过滤之前,应该确保数据被降级/去趋势,例如使用 detrend() 。否则,过滤可能会产生大量伪影。
根据官方文档,ObsPy 有两种方法来调用 Filter 模块:
  1. The filter takes the data explicitly as argument (i.e. an numpy.ndarray) and therefore the sampling_rate needs to be also specified. It returns the filtered data.
    1. 过滤器直接使用数据作为参数(即 numpy.ndarray),因此 sampling_rate 也需要指定。这种调用方式直接返回滤波后的数据。
  1. For Stream and Trace objects simply use their respective filtering methods Stream.filter() and Trace.filter() .
    1. 对于 Stream Trace 对象只需使用各自的滤波方法 Stream.filter() 和 Trace.filter()
⚠️
第二种在原数据数组上就地执行,之后将无法再访问原始数据。一般需要保留原始数据,所以请使用 copy() 创建 Stream 或 Trace 对象的副本,再进行第二种调用滤波器。

5.2 Instrument Correction

The response of the instrument can be removed by the invsim module.
仪器去响应可以通过 invsim 模块。
The following example shows how to remove the the instrument response of a STS2 and simulate an instrument with 2Hz corner frequency.
以下示例说明如何删除 STS2 的仪器响应并模拟具有 2Hz 转折频率的仪器。

5.3 Trigger

The trigger module provides various triggering algorithms, including different STA/LTA routines, Z-Detector, AR picker and the P-picker by M. Bear. 
触发 模块提供各种触发算法,包括不同的 STA/LTA 例程、Z 检测器、AR 选择器和 M. Bear 的 P 选择器。
There is also a convenience method implemented on Stream/Trace. It works on and overwrites the traces waveform data and is intended for batch processing rather than for interactive determination of triggering parameters. But it also means that the trace’s built-in methods can be used.
在  跟踪 数据对象上还实现了一个便捷方法。它处理并覆盖 Traces 波形数据,用于批处理,而不是用于触发参数的交互式确定,但这也意味着可以使用跟踪的内置方法。

5.4 Classes & Functions

💡
2024年12月18日:还未仔细阅读及理解

5.5 Modules

💡
2024年12月18日:还未仔细阅读及理解
 

附录:ObsPy 中文教程

 
  • 学习
  • 记录
  • 工具
  • LobeChat 服务端数据库版部署记录Git 版本控制 —— Start and Git Basics
    Loading...