pylops.waveeqprocessing.PhaseShift

pylops.waveeqprocessing.PhaseShift(vel, dz, nt, freq, kx, ky=None, dtype='float64', name='P', fftengine='numpy', **kwargs_fft)[source]

Phase shift operator

Apply positive (forward) phase shift with constant velocity in forward mode, and negative (backward) phase shift with constant velocity in adjoint mode. Input model and data should be 2- or 3-dimensional arrays in time-space domain of size \([n_t \times n_x \;(\times n_y)]\).

Parameters:
velfloat, optional

Constant propagation velocity

dzfloat, optional

Depth step

ntint, optional

Number of time samples of model and data

freqnumpy.ndarray

Positive frequency axis

kxint, optional

Horizontal spectroscopic wavenumber axis (centered around 0) of size \([n_x \times 1]\).

kyint, optional

Second horizontal spectroscopic wavenumber axis for 3d phase shift (centered around 0) of size \([n_y \times 1]\).

dtypestr, optional

Type of elements in input array

namestr, optional

Added in version 2.0.0.

Name of operator (to be used by pylops.utils.describe.describe)

fftenginestr, optional

Added in version 2.6.0.

Engine used for fft computation (numpy, scipy, or fftw). Choose numpy when working with CuPy arrays.

**kwargs_fft

Added in version 2.6.0.

Arbitrary keyword arguments to be passed to the selected fft method

Returns:
Poppylops.LinearOperator

Phase shift operator

Notes

The phase shift operator implements a one-way wave equation forward propagation in frequency-wavenumber domain by applying the following transformation to the input model:

\[d(f, k_x, k_y) = m(f, k_x, k_y) e^{-j \Delta z \sqrt{\omega^2/v^2 - k_x^2 - k_y^2}}\]

where \(v\) is the constant propagation velocity, \(\Delta z\) is the propagation depth, \(\omega=2\pi f\) is the angular frequency axis (where \(f\) is represented by freq), \(k_x=2\pi \tilde{k}_x\) is the horizontal wavenumber (where \(\tilde{k}_x\) is represented by kx), and \(k_y=2\pi \tilde{k}_y\) is the second horizontal wavenumber (where \(\tilde{k}_y\) is represented by ky). In adjoint mode, the data is propagated backward using the following transformation:

\[m(f, k_x, k_y) = d(f, k_x, k_y) e^{j \Delta z \sqrt{\omega^2/v^2 - k_x^2 - k_y^2}}\]

Effectively, the input model and data are assumed to be in time-space domain and forward Fourier transform is applied to both dimensions, leading to the following operator:

\[\mathbf{d} = \mathbf{F}^H_t \mathbf{F}^H_x \mathbf{P} \mathbf{F}_x \mathbf{F}_t \mathbf{m}\]

where \(\mathbf{P}\) perfoms the phase-shift as discussed above.

Examples using pylops.waveeqprocessing.PhaseShift

PhaseShift operator

PhaseShift operator