seisgo.dispersion
The dispersion module extracts group/phase velocity dispersion images from seismic
waveform gathers and computes synthetic dispersion curves via forward modeling.
Note
This module is actively developed. Some functions may be extended in future releases.
- seisgo.dispersion.forward_solver(vs, periods, thickness, wave_type='rayleigh', mode=1, velocity_type='group')[source]
Wrapper for surf96 to compute synthetic group velocity dispersion curve. Maps Vs to Vp and Density using standard geophysical relations.
==PARAMETERS== vs: Vs for each layer in km/s. periods: periods in s. thickness: layer thickness in 1-d array in km. wave_type: rayleigh or love. mode: wave mode. default 1 (fundamental mode). velocity_type: group or phase. default group.
==RETURN== output of surf96 program. see manual of surf96 for details.
- seisgo.dispersion.get_dispersion_image(g, t, d, pmin, pmax, vmin, vmax, dp=1, dv=0.1, window=1, pscale='ln', pband_extend=5, verbose=False, min_trace=5, min_wavelength=1.5, energy_type='power_sum', get_best_v=False, plot=False, figsize=None, cmap='jet', clim=[0, 1])[source]
Uses phase-shift method. Park et al. (1998): http://www.masw.com/files/DispersionImaingScheme-1.pdf
=====PARAMETERS==== g: waveform gather for all distances (traces). It should be a numpy array. t: time vector. d: distance vector corresponding to the waveforms in g pmin: minimum period. pmax: maximum period. vmin: minimum phase velocity to search. vmax: maximum phase velocity to search. dp: period increment. default is 1. dv: velocity increment in searching. default is 0.1 window: number of wavelength when slicing the time segments in computing summed energy. default is 1.
Window can be a two-element array [min,max], when the window size will be interpolated between the minimum and the maximum.
pscale: period vector scale in applying narrowband filters. default is ‘ln’ for linear scale. pband_extend: number of period increments to extend in filtering. defult is 5. verbose: verbose mode. default False. min_trace: minimum trace to consider. default 5. min_wavelength: minimum wavelength to satisfy far-field. default 1.5. energy_type: method to compute maximum energy, ‘envelope’ or ‘power_sum’. Default is ‘power_sum’ get_best_v: pick best velocity for each period. Default False. plot: plot dispersion image or not. Default is False. figsize: specify figsize. Decides automatically if not specified. cmap: colormap. Default is ‘jet’ clim: color value limit. Default is [0,1]
=====RETURNS==== dout: dispersion information showing the normalized energy for each velocity value for each frequency. vout: velocity vector used in searching. pout: period vector. best_v: best velocity (group velocity). Only return if get_best_v is True.
- seisgo.dispersion.get_dispersion_waveforms_cwt(d, dt, fmin, fmax, dj=0.08333333333333333, s0=-1, J=-1, wvn='morlet')[source]
Produce dispersion wavefroms with continuous wavelet tranform.
===parameters=== d: 1-d array data. df: time interval. fmin, fmax: frequency range. dj=1/12, s0=-1, J=-1, wvn=’morlet’: pycwt.cwt parameters.
==returns=== dout, fout: narrowband-filtered waveforms and the frequency vector.
- seisgo.dispersion.inversion(periods, velocity, thickness, initial_vs, iterations=8, damp=0.1, smooth=0.5, wave_type='rayleigh', mode=1, velocity_type='group', maxdv=0.02)[source]
Performs 1-D damped least-squares inversion with smoothness.
==PARAMETER== periods: wave periods in 1-d array velocity: observed velocity from disperson analysis in km/s. thickness: layer thickness in 1-d array in km. initial_vs: stating Vs for each layer. iterations: maximum number of iterations. default 8. damp: Damping (stability). default 0.1. smooth: Smoothness (geological plausibility). default 0.5. maxdv: maximum velocity perturbation in km/s.
==RETURN== vs_curr: inverted velocity for each layer.
- seisgo.dispersion.narrowband_waveforms(d, dt, pmin, pmax, dp=1, pscale='ln', extend=10)[source]
Produce dispersion wavefroms with narrowband filters.
===parameters=== d: 1-d array data. dt: sampling interval. pmin, pmax: period range. dp: period increment in seconds. default 1 s. pscale: period scales. “ln” for linear [default]. “nln” for non-linear scale. extend: extend individual period value to form a band range. default: 5 scale steps.
==returns=== dout, pout: narrowband-filtered waveforms and the period vector.
Function Summary
Uses phase-shift method. |
|
Produce dispersion wavefroms with narrowband filters. |
|
Produce dispersion wavefroms with continuous wavelet tranform. |
|
Wrapper for surf96 to compute synthetic group velocity dispersion curve. |
get_dispersion_image Parameter Reference
Parameter |
Default |
Description |
|---|---|---|
|
required |
2-D waveform gather, shape |
|
required |
Time vector (s). May be two-sided (negative to positive) or one-sided. |
|
required |
Distance vector (km), one value per trace row. |
|
required |
Period range (s). |
|
required |
Velocity search range (km/s). |
|
|
Period increment (s). |
|
|
Velocity grid spacing (km/s). |
|
|
Number of wavelengths for the travel-time extraction window.
Can be a 2-element list |
|
|
Period sampling: |
|
|
Number of extra period steps used when constructing narrowband filters. |
|
|
Minimum number of traces satisfying the far-field criterion. |
|
|
Minimum source–receiver distance expressed in wavelengths. |
|
|
Energy measure: |
|
|
If |
|
|
Display dispersion image immediately. |
Return values
When the time vector is two-sided (side = "a"):
dimage, vout, pout = get_dispersion_image(...)
# dimage.shape == (2, n_periods, n_velocities)
# index 0 = negative lag, index 1 = positive lag
When get_best_v=True, a fourth return value best_v is appended.
forward_solver Reference
Wraps surf96 (from pysurf96) to compute Rayleigh or Love wave group/phase
velocity dispersion curves for a layered Earth model.
Parameter |
Default |
Description |
|---|---|---|
|
required |
Vs for each layer (km/s), from surface to half-space. |
|
required |
Target periods (s). |
|
required |
Layer thicknesses (km). The last element should be |
|
|
|
|
|
Mode number (1 = fundamental mode). |
|
|
|
Internal mapping (Vs → Vp and density):
Vp/Vs = √3
Density via Birch’s law: ρ = 0.32·Vp + 0.77
from seisgo import dispersion
import numpy as np
vs = np.array([2.0, 3.0, 3.8, 4.2])
thickness = np.array([8.0, 12.0, 20.0, 0.0])
periods = np.arange(5, 40, 2)
gv = dispersion.forward_solver(vs, periods, thickness,
wave_type="rayleigh", velocity_type="group")