DispersionPhaseShift

class of dascore.transform.dispersion
inherits from: PatchProcessor, DascoreBaseModel, pydantic.main.BaseModel
source

DispersionPhaseShift(
    *args ,
    phase_velocities: Any ,
    approx_resolution: Any = None,
    approx_freq: Any = None,
)-> None

Compute dispersion images using the phase-shift method.

The patch must have time and distance dimensions (see notes).

Parameters

Parameter Description
phase_velocities NumPy array of positive velocities, monotonically increasing, for
which the dispersion will be computed.
approx_resolution Approximated frequency (Hz) resolution for the output. If left empty,
the frequency resolution is dictated by the number of samples.
approx_freq Minimum and maximum frequency to compute dispersion for, in Hz
If left empty, minimum is 0 Hz, and maximum is Nyquist
Note
  • See also Park, Miller, and Xia (1998)

  • Inspired by https://geophydog.cool/post/masw_phase_shift/.

  • Dims/Units of the output are forced to be ‘frequency’ (‘Hz’) and ‘velocity’ (‘m/s’).

  • Each channel’s distance is read as its position along the wave’s path, so data are effectively mapped along a 2-D line; the coordinate need not be sorted.

  • The image depends only on distances relative to each other, so any origin works for a one-sided gather, but the wave must travel toward increasing distance. For a gather whose wave travels toward lower distance, negate the coordinate; for a two-sided gather, use the offset from the source (abs(distance - source_distance)). The new values carry no units, so convert to metres first: p = patch.convert_units(distance="m") then p.update_coords(distance=-p.get_array("distance")). Reversing the patch with flip changes nothing, since it reverses the data and the coordinate together.

Examples

import dascore as dc
import numpy as np

# Example 1 - Right-sided wavefield
patch = (
    dc.get_example_patch('dispersion_event')
)

disp_patch = patch.dispersion_phase_shift(np.arange(100,1500,1),
            approx_resolution=0.1,approx_freq=[5,70])
ax = disp_patch.viz.waterfall(show=False, cbar=False)
ax.set_xlim(5, 70)
ax.set_ylim(1500, 100)
disp_patch.viz.waterfall(show=True, ax=ax)

```

Methods

Name Description
check Refuse a patch which does not carry what the operation needs.
get_metadata Return the image’s metadata, and the frequencies the kernel keeps.
model_copy Copy the model, dropping cached values the update invalidates.
new Create new instance with some attributed updated.
numpy_kernel Return the normalized phase-shift stack of each velocity and frequency.
dispersion_phase_shift Compute dispersion images using the phase-shift method.
reconcile Return metadata or a patch holding the final data; default as is.
run Run the operation: check, get_metadata, kernel, reconcile, record.

References

Park, Choon Byong, Richard D Miller, and Jianghai Xia. 1998. “Imaging Dispersion Curves of Surface Waves on Multi-Channel Record.” In SEG Technical Program Expanded Abstracts 1998, 1377–80. Society of Exploration Geophysicists.