NoisePy简易教程
翻译自GitHub
NoisePy是一个Python软件包,旨在快速轻松地计算背景噪声互相关函数。 它提供了用于噪声监视和表面波色散分析的其他功能。
免责声明:此代码不应“按原样”使用,也不能像黑盒一样运行。 希望用户更改本地路径和参数。 如果有问题,请将其提交到github,其中包含要调试的脚本和错误消息等信息。
完整doc请参考 https://noise-python.readthedocs.io/en/latest/
引用
如果您在文章中使用了代码,请引用:
1 | Jiang, C. and Denolle, M. "NoisePy: a new high-performance python tool for seismic ambient noise seismology." Seismological Research Letter 91 (3): 1853–1866. |
安装
NoisePy由python脚本组成,因此其安装方式十分灵活,这实际上是为了构建脚本和相关功能的依赖库。 我们建议使用conda和pip安装库,因为它们更方便。 下面是我们经过测试的命令行,这些命令行将创建一个运行NoisePy的python环境。 请注意,该测试是在MacOS上执行的,因此对于其他OS可能会略有不同。(假设主机已经安装了MPI,mpi4py包会用到)
1 | conda create -n noisepy -c conda-forge python=3.7 numpy=1.16.2 numba pandas pycwt jupyter mpi4py=3.0.1 obspy=1.1 pyasdf |
功能
- 根据obspy的
get_station和get_waveforms的核心功能下载连续噪声数据 - 以ASDF格式保存地震数据,该数据可以方便地将元数据、波形数据和辅助数据组合到一个文件中(读/写ASDF文件的教程)
- 提供了高度的灵活性来处理存储在本地计算机上的混乱的SAC / miniSEED数据并将其转换为ASDF格式的数据,可以轻松地将其插入NoisePy
- 通过MPI并行运行功能,执行快速,简单的互相关(cross-correlation)
- 包括一系列监视功能,可使用一些最近开发的新方法来对结果互相关函数上的dv / v进行测量(有关更多详细信息,请参见我们的论文)
简易教程
0A. 使用S0A_download_ASDF_MPI.py下载地震噪声数据
该脚本(位于src目录中)及其现有参数允许通过SCEC数据中心下载位于某个区域并在1/Jul/2016-2/Jul/2016 期间运行的所有可用宽频CI台站(BH?) 。
在脚本中,为所有可根据用户需要更改的输入参数提供了简短摘要。
在脚本的当前形式中,我们设置inc_hours = 24,下载一整天的连续噪声数据以及元信息,并将其存储在单个ASDF文件中。 为了增加最终互相关函数的信噪比(SNR)(更多详细信息,请参见Seats等,2012),我们将整天的序列分成了较小的段,每个cc_len长, 相邻段之间有部分重叠。 如果在下载过程中需要保存中间输出/操作时间,则可能需要将flag设置为True。
1 | python S0A_download_ASDF_MPI.py |
如果要使用多个内核(例如4个),请使用以下命令(使用mpi4py包)运行脚本。
1 | mpirun -n 4 python S0A_download_ASDF_MPI.py |
从S0A输出的文件包括包含每日(24h)连续噪声数据的ASDF文件,在S0A脚本中记录所有使用的参数的参数文件以及所有电台信息的CSV文件(有关读取带有下载数据的ASDF文件的更多详细信息 可以在docs / src / ASDF.md中找到)。 可以使用src目录中名为plotting_modules的绘图模块显示存储在ASDF文件中的连续波形数据,如下所示。
1 | import plotting_modules #(cd to your source file directory first before loading this module) |

请注意,该脚本还提供了从现有台站列表下载数据的选项,其格式与输出的CSV文件相同。 在这种情况下,应该在L53将down_list设置为True。
实际上,下载速度取决于许多因素,例如目标数据的原始采样率,网络,托管该数据的数据中心以及要存储在计算机上的一般结构等。我们测试了许多评估其性能的参数,读者可参考我们的论文以获取更多详细信息(Jiang等人,2019)。
0B. 使用S0B_sacMSEED_to_ASDF.py处理本地SAC /缩小文件
如果要使用NoisePy处理存储在自己磁盘上的SAC /缩小格式的本地数据,则需要使用此脚本。 大多数变量与S0A的变量相同,因此应该很容易理解和更改。
在此脚本中,它将通过合并,去趋势,去斜,下采样然后进行修整来对数据进行预处理,然后再将其保存为ASDF格式以用于以后的NoisePy处理。 特别是,我们希望脚本能够处理非常混乱的数据,这意味着地震数据会被分解成小块,并且混乱的时间信息(例如重叠的时间)会被分解。 记住,当数据混乱时,将L62处的messydata设置为True! (有关删除仪器响应的教程)
1. 使用S1_fft_cc_MPI.py 执行互相关
这是NoisePy的核心脚本,该脚本首先对所有噪声数据执行傅立叶变换,然后将它们加载到内存中,然后再进行进一步的互相关。
这意味着互相关是在频率域进行的。 在脚本中,我们提供了几种计算互相关的选项,包括raw,coherency和deconv(有关详细定义,请参见我们的论文*)。 我们在这里以coherency为例。
运行脚本后,它将创建一个名为CCF的新文件夹,在其中放置了包含不同工作站对之间所有互相关函数的新ASDF文件。 它还创建一个fft_cc_data.txt参数文件,该文件记录了此脚本中使用的所有有用参数。
一旦获得互相关文件,就可按以下方式在plotting_modules中调用plot_substack_cc函数来显示所有站对之间的每日时间变化。
1 | import plotting_modules |

2. 使用S2_stacking.py叠加
该脚本用于叠加S1中所有台站对的互相关函数,并将它们保存到ASDF文件中以供将来分析(例如,时间变化和/或频散提取)。 特别地,叠加过程有两种选择,包括线性和相位加权堆叠(pws)。 通常,pws产生的波形具有高SNR,下面的快照显示了两种叠加方法的波形比较。 我们使用下面的命令来绘制动校正图。
1 | import plotting_modules,glob |


无论如何,这里仅给出一个简单的示例,说明NoisePy可能如何工作!
我们强烈建议您下载NoisePy软件包并自行探索!
如果在运行代码期间有任何意见和/或建议,请不要犹豫通过电子邮件与我们联系,或在此github页面中创建issue!
1 | Chengxin Jiang (chengxin_jiang@fas.harvard.edu) |
参考文献
1 | Seats, K. J., Jesse F. L., and German A. P. "Improved ambient noise correlation functions using Welch′ s method." Geophysical Journal International 188, no. 2 (2012): 513-523. |
1 | *Jiang, C. and Denolle, M. "NoisePy: a new high-performance python tool for seismic ambient noise seismology." Seismological Research Letter 91, no. 3 (2020): 1853–1866.. |
1 | ** Yuan, C., Bryan, J. T., Jiang, C., Okubo, K., Clements, T. and Denolle, M. (2019). Comparing approaches to measuring time- and frequency-dependent seismic phase variations for coda wave interferometry. In AGU Fall Meeting 2019. |