Skip to main content
`Ctrl`+`K`
scipy.signal.

# deconvolve

scipy.signal.deconvolve(signal, divisor)

  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:
    quotient ndarray

      Quotient, typically the recovered original signal

    remainder ndarray

      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 | ⚠️ no JIT | ⛔
  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.])