dispersion_phase_shift

function of dascore.transform.dispersion source

dispersion_phase_shift(
    patch: Patch ,
    phase_velocities: collections.abc.Sequence[float] ,
    approx_resolution: None | float[None, float] = None,
    approx_freq: None | tuple[None, tuple[float, float]] = None,
)-> ‘PatchType’

Compute dispersion images using the phase-shift method.

Parameters

Parameter Description
patch Patch to transform. Has to have dimensions of time and distance.
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’).

  • The patch’s distance coordinates are assumed to be ordered by distance from the source, and not “fiber distance”. In other words, data are effectively mapped along a 2-D line.

Example

import dascore as dc
import numpy as np

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,cmap=None)
ax.set_xlim(5, 70)
ax.set_ylim(1500, 100)
disp_patch.viz.waterfall(show=True, ax=ax)

<Axes: xlabel='frequency(Hz)', ylabel='velocity(m / s)'>

```

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.