scipy.signal.

deconvolve#

scipy.signal.deconvolve(signal, divisor)[source]#

Deconvolves divisor out of signal using inverse filtering.

Returns the quotient and remainder such that signal = convolve(divisor, quotient) + remainder

Parameters:
signal(N,) array_like

Signal data, typically a recorded signal

divisor(N,) array_like

Divisor data, typically an impulse response or filter that was applied to the original signal

Returns:
quotientndarray

Quotient, typically the recovered original signal

remainderndarray

Remainder

See also

numpy.polydiv

performs polynomial division (same operation, but also accepts poly1d objects)

Notes

Array API Standard Support

deconvolve has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable SCIPY_ARRAY_API=1 and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

Library

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

⚠️ computes graph

n/a

See Support for the array API standard for more information.

Examples

Deconvolve a signal that’s been filtered:

>>> from scipy import signal
>>> original = [0, 1, 0, 0, 1, 1, 0, 0]
>>> impulse_response = [2, 1]
>>> recorded = signal.convolve(impulse_response, original)
>>> recorded
array([0, 2, 1, 0, 2, 3, 1, 0, 0])
>>> recovered, remainder = signal.deconvolve(recorded, impulse_response)
>>> recovered
array([ 0.,  1.,  0.,  0.,  1.,  1.,  0.,  0.])
>>> remainder
array([0., 0., 0., 0., 0., 0., 0., 0., 0.])