pylops.waveeqprocessing.MDC¶

pylops.waveeqprocessing.
MDC
(G, nt, nv, dt=1.0, dr=1.0, twosided=True, fast=None, dtype=None, fftengine='numpy', transpose=True, saveGt=True, conj=False, usematmul=False, prescaled=False)[source]¶ Multidimensional convolution.
Apply multidimensional convolution between two datasets. If
transpose=True
, model and data should be provided after flattening 2 or 3dimensional arrays of size \([n_r (\times n_{vs}) \times n_t]\) and \([n_s (\times n_{vs}) \times n_t]\) (or \(2*n_t1\) fortwosided=True
), respectively. Iftranspose=False
, model and data should be provided after flattening 2 or 3dimensional arrays of size \([n_t \times n_r (\times n_{vs})]\) and \([n_t \times n_s (\times n_{vs})]\) (or \(2*n_t1\) fortwosided=True
), respectively.Warning
A new implementation of MDC is provided in v1.5.0. This currently affects only the inner working of the operator and endusers can use the operator in the same way as they used to do with the previous one. Nevertheless, it is now reccomended to use the operator with
transpose=False
, as this behaviour will become default in version v2.0.0 and the behaviour withtranspose=True
will be deprecated.Parameters:  G :
numpy.ndarray
Multidimensional convolution kernel in frequency domain of size \([n_s \times n_r \times n_{fmax}]\) if
transpose=True
or size \([n_{fmax} \times n_s \times n_r]\) iftranspose=False
 nt :
int
Number of samples along time axis
 nv :
int
Number of samples along virtual source axis
 dt :
float
, optional Sampling of time integration axis
 dr :
float
, optional Sampling of receiver integration axis
 twosided :
bool
, optional MDC operator has both negative and positive time (
True
) or only positive (False
) fast :
bool
, optional Deprecated, will be removed in v2.0.0
 dtype :
str
, optional Deprecated, will be removed in v2.0.0
 fftengine :
str
, optional Engine used for fft computation (
numpy
orfftw
) transpose :
bool
, optional Transpose
G
and inputs such that time/frequency is placed in first dimension. This allows backcompatibility with v1.4.0 and older but will be removed in v2.0.0 where time/frequency axis will be required to be in first dimension for efficiency reasons. saveGt :
bool
, optional Save
G
andG^H
to speed up the computation of adjoint ofpylops.signalprocessing.Fredholm1
(True
) or createG^H
onthefly (False
) Note thatsaveGt=True
will be faster but double the amount of required memory conj :
str
, optional Perform Fredholm integral computation with complex conjugate of
G
 usematmul :
bool
, optional Use
numpy.matmul
(True
) or forloop withnumpy.dot
(False
) inpylops.signalprocessing.Fredholm1
operator. Refer to Fredholm1 documentation for details. prescaled :
bool
, optional Apply scaling to kernel (
False
) or not (False
) when performing spatial and temporal summations. In caseprescaled=True
, the kernel is assumed to have been prescaled when passed to the MDC routine.
Raises:  ValueError
If
nt
is even andtwosided=True
See also
MDD
 Multidimensional deconvolution
Notes
The socalled multidimensional convolution (MDC) is a chained operator [1]. It is composed of a forward Fourier transform, a multidimensional integration, and an inverse Fourier transform:
\[y(t, s, v) = \mathscr{F}^{1} \Big( \int_S G(f, s, r) \mathscr{F}(x(t, r, v)) dr \Big)\]which is discretized as follows:
\[y(t, s, v) = \mathscr{F}^{1} \Big( \sum_{i_r=0}^{n_r} (\sqrt{n_t} * d_t * d_r) G(f, s, i_r) \mathscr{F}(x(t, i_r, v)) \Big)\]where \((\sqrt{n_t} * d_t * d_r)\) is not applied if
prescaled=True
.This operation can be discretized and performed by means of a linear operator
\[\mathbf{D}= \mathbf{F}^H \mathbf{G} \mathbf{F}\]where \(\mathbf{F}\) is the Fourier transform applied along the time axis and \(\mathbf{G}\) is the multidimensional convolution kernel.
[1] Wapenaar, K., van der Neut, J., Ruigrok, E., Draganov, D., Hunziker, J., Slob, E., Thorbecke, J., and Snieder, R., “Seismic interferometry by crosscorrelation and by multidimensional deconvolution: a systematic comparison”, Geophysical Journal International, vol. 185, pp. 13351364. 2011.  G :