当前位置:   article > 正文

obspy中文教程(五)_obspy ppsd

obspy ppsd

 

Interfacing R from Python(从python对接到R)

rpy2包允许python对接到R。下例展示如何转换numpy.ndarray数据为R矩阵,并对其执行R的summary命令。

  1. >>>from obspy.core import read
  2. >>>import rpy2.robjects as RO
  3. >>>import rpy2.robjects.numpy2ri
  4. >>>r = RO.r
  5. >>>st = read("test/BW.BGLD..EHE.D.2008.001")
  6. >>>M = RO.RMatrix(st[0].data)
  7. >>>print(r.summary(M))
  8. Min. 1st Qu. Median Mean 3rd Qu. Max.
  9. -1056.0 -409.0 -393.0 -393.7 -378.0 233.0

Coordinate Conversions(坐标转换)

使用pyproj可以方便的进行坐标转换。在查找完源和目标坐标系的EPSG代码后,只需几行代码即可完成坐标转换。下例将两个德国台站的坐标信息转换为区域使用的Gauß-Krüger坐标。

  1. >>> import pyproj
  2. >>> lat = [49.6919, 48.1629]
  3. >>> lon = [11.2217, 11.2752]
  4. >>> proj_wgs84 = pyproj.Proj(init="epsg:4326")
  5. >>> proj_gk4 = pyproj.Proj(init="epsg:31468")
  6. >>> x, y = pyproj.transform(proj_wgs84, proj_gk4, lon, lat)
  7. >>> print(x)
  8. [4443947.179347951, 4446185.667319892]
  9. >>> print(y)
  10. [5506428.401023342, 5336354.054996853]

另一种常见用法是将纬度和经度的位置信息转换到Universal Transverse Mercator coordinate system (UTM)坐标系。这对于小区域中的大密集阵列特别有用。 使用utm包可以轻松完成这种转换。

  1. >>> import utm
  2. >>> utm.from_latlon(51.2, 7.5)
  3. (395201.3103811303, 5673135.241182375, 32, ’U’)
  4. >>> utm.to_latlon(340000, 5710000, 32, ’U’)
  5. (51.51852098408468, 6.693872395145327)

 

 

Hierarchical Clustering(分级聚类)

使用SciPy包中提供的方法可以执行分级聚类。它允许从相似性矩阵构建聚类并制作树状图。以下示例显示了如何对已计算的相似性矩阵执行此操作。相似性数据是根据具有诱发地震活动的区域中的事件计算的(使用obspy.signal中的相关例程),并且可以从我们的示例网络服务器获取:

首先,导入必要的模块并通过我们的网页载入数据:

  1. >>> import io, urllib
  2. >>> import numpy as np
  3. >>> import matplotlib.pyplot as plt
  4. >>> from scipy.cluster import hierarchy
  5. >>> from scipy.spatial import distance
  6. >>> url = "https://examples.obspy.org/dissimilarities.npz"
  7. >>> with io.BytesIO(urllib.urlopen(url).read()) as fh, np.load(fh) as data:
  8. ... dissimilarity = data[’dissimilarity’]

现在我们绘制相异矩阵:

  1. >>> plt.subplot(121)
  2. >>> plt.imshow(1 - dissimilarity, interpolation="nearest")

然后我们使用SciPy构建并绘制树形图到图像右侧的子图中:

  1. >>> dissimilarity = distance.squareform(dissimilarity)
  2. >>> threshold = 0.3
  3. >>> linkage = hierarchy.linkage(dissimilarity, method="single")
  4. >>> clusters = hierarchy.fcluster(linkage, threshold, criterion="distance")
  5. >>> plt.subplot(122)
  6. >>> hierarchy.dendrogram(linkage, color_threshold=0.3)
  7. >>> plt.xlabel("Event number")
  8. >>> plt.ylabel("Dissimilarity")
  9. >>> plt.show()

http://docs.obspy.org/tutorial/code_snippets/hierarchical_clustering.png

Visualizing Probabilistic Power Spectral Densities(可视化概率功率谱密度)

下列代码展示使用obspy.signal中定义的PPSD类,该例程对于解释现场质量控制检查的噪声测量非常有用。更多信息参考[McNamara2004]

  1. >>> from obspy import read
  2. >>> from obspy.io.xseed import Parser
  3. >>> from obspy.signal import PPSD

读取数据并选择一条所需的台站/信道轨迹:

  1. >>> st = read("https://examples.obspy.org/BW.KW1..EHZ.D.2011.037")
  2. >>> tr = st.select(id="BW.KW1..EHZ")[0]

元数据可以是:StationXML文件或FDSN网络服务提供的Inventory;无数据SEED文件的Parser;本地RESP文件的文件名;传统的零极点字典。

初始化一个新的PPSD语句。ppsd对象将确保随后只有适当的数据进入概率psd统计。

  1. >>> parser = Parser("https://examples.obspy.org/dataless.seed.BW_KW1")
  2. >>> ppsd = PPSD(tr.stats, metadata=parser)

然后添加数据(Trace或Stream对象)做PPSD估计。

>>> ppsd.add(st)
True

我们可以检查ppsd估计中表示的时间范围。它包含计算psds的一小时长切片的开始时间的排序列表(此处仅打印显示前两个)。

  1. >>> print(ppsd.times[:2])
  2. [UTCDateTime(2011, 2, 6, 0, 0, 0, 935000), UTCDateTime(2011, 2, 6, 0, 30, 0, 935000)]
  3. >>> print("number of psd segments:", len(ppsd.times))
  4. number of psd segments: 47

再次添加同样的stream无效(返回值False),ppsd对象确保没有重复的数据段进入ppsd估计。

  1. >>> ppsd.add(st)
  2. False
  3. >>> print("number of psd segments:", len(ppsd.times))
  4. number of psd segments: 47

可逐步添加来自其他文件/来源的更多信息。

  1. >>> st = read("https://examples.obspy.org/BW.KW1..EHZ.D.2011.038")
  2. >>> ppsd.add(st)
  3. True

ppsd的图形表示可以显示在matplotlib窗口中。

>>> ppsd.plot()

或者保存为图片文件。

  1. >>> ppsd.plot("/tmp/ppsd.png") 
  2. >>> ppsd.plot("/tmp/ppsd.pdf")

https://docs.obspy.org/tutorial/code_snippets/probabilistic_power_spectral_density.png

对于每个频率仓,还可以显示累积的直方图:

>>> ppsd.plot(cumulative=True)

 

https://docs.obspy.org/tutorial/code_snippets/probabilistic_power_spectral_density3.png

要使用PQLX /[McNamara2004]使用的色彩映射,可以从obspy.imaging.cm导入并使用该色彩映射:

  1. >>> from obspy.imaging.cm import pqlx
  2. >>> ppsd.plot(cmap=pqlx)

https://docs.obspy.org/tutorial/code_snippets/probabilistic_power_spectral_density2.png

实际PPSD([McNamara2004])下方的是可视化PPSD的数据基础。第一行显示输入PPSD的数据,绿条表示可用数据,红条表示添加到PPSD的流中的间隙。蓝色的底行显示进入直方图的单个psd测量值。默认处理方法用零填充间隙,然后这些数据段显示为单个偏离psd行。

Note:从无数据SEED或StationXML文件提供元数据比指定静态零极点信息更安全(参见PPSD)。

psd值的时间序列也可以通过访问psd_values从PPSD中提取并使用plot_temporal()绘制。

>>> ppsd.plot_temporal([0.1, 1, 10])

https://docs.obspy.org/tutorial/code_snippets/probabilistic_power_spectral_density4.png

使用plot_spectrogram()绘制频谱图:

>>> ppsd.plot_spectrogram()

https://docs.obspy.org/tutorial/code_snippets/probabilistic_power_spectral_density5.png

 

Array Response Function(数组响应函数)

下面的代码块展示了如何使用ObsPy的obspy.signal.array_analysis.array_transff_wavenumber()函数绘制波束形成的数组传递函数(波数的函数)。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from obspy.imaging.cm import obspy_sequential
  4. from obspy.signal.array_analysis import array_transff_wavenumber
  5. # generate array coordinates
  6. coords = np.array([[10., 60., 0.], [200., 50., 0.], [-120., 170., 0.],
  7.                    [-100., -150., 0.], [30., -220., 0.]])
  8. # coordinates in km
  9. coords /= 1000.
  10. # set limits for wavenumber differences to analyze
  11. klim = 40.
  12. kxmin = -klim
  13. kxmax = klim
  14. kymin = -klim
  15. kymax = klim
  16. kstep = klim / 100.
  17. # compute transfer function as a function of wavenumber difference
  18. transff = array_transff_wavenumber(coords, klim, kstep, coordsys='xy')
  19. # plot
  20. plt.pcolor(np.arange(kxmin, kxmax + kstep * 1.1, kstep) - kstep / 2.,
  21.            np.arange(kymin, kymax + kstep * 1.1, kstep) - kstep / 2.,
  22.            transff.T, cmap=obspy_sequential)
  23. plt.colorbar()
  24. plt.clim(vmin=0., vmax=1.)
  25. plt.xlim(kxmin, kxmax)
  26. plt.ylim(kymin, kymax)
  27. plt.show()

https://docs.obspy.org/tutorial/code_snippets/array_response_function.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/774642
推荐阅读
相关标签
  

闽ICP备14008679号