# pylops.waveeqprocessing.MDC¶

pylops.waveeqprocessing.MDC(G, nt, nv, dt=1.0, dr=1.0, twosided=True, fftengine='numpy', saveGt=True, conj=False, usematmul=False, prescaled=False, name='M')[source]

Multi-dimensional convolution.

Apply multi-dimensional convolution between two datasets. Model and data should be provided after flattening 2- or 3-dimensional arrays of size $$[n_t \times n_r \;(\times n_{vs})]$$ and $$[n_t \times n_s \;(\times n_{vs})]$$ (or $$2n_t-1$$ for twosided=True), respectively.

Parameters: G : numpy.ndarray Multi-dimensional convolution kernel in frequency domain of size $$[n_{f_\text{max}} \times n_s \times n_r]$$ nt : int Number of samples along time axis for model and data (note that this must be equal to $$2n_t-1$$ when working with twosided=True. nv : int Number of samples along virtual source axis dt : float, optional Sampling of time integration axis $$\Delta t$$ dr : float, optional Sampling of receiver integration axis $$\Delta r$$ twosided : bool, optional MDC operator has both negative and positive time (True) or only positive (False) fftengine : str, optional Engine used for fft computation (numpy, scipy or fftw) saveGt : bool, optional Save G and G.H to speed up the computation of adjoint of pylops.signalprocessing.Fredholm1 (True) or create G.H on-the-fly (False) Note that saveGt=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 for-loop with numpy.dot (False) in pylops.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 case prescaled=True, the kernel is assumed to have been pre-scaled when passed to the MDC routine. name : str, optional New in version 2.0.0. Name of operator (to be used by pylops.utils.describe.describe) ValueError If nt is even and twosided=True

MDD
Multi-dimensional deconvolution

Notes

The so-called multi-dimensional convolution (MDC) is a chained operator [1]. It is composed of a forward Fourier transform, a multi-dimensional 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))\,\mathrm{d}r \Big)$

which is discretized as follows:

$y(t, s, v) = \sqrt{n_t} \Delta t \Delta r\mathscr{F}^{-1} \Big( \sum_{i_r=0}^{n_r} G(f, s, i_r) \mathscr{F}(x(t, i_r, v)) \Big)$

where $$\sqrt{n_t} \Delta t \Delta 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 multi-dimensional 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 multi-dimensional deconvolution: a systematic comparison”, Geophysical Journal International, vol. 185, pp. 1335-1364. 2011.