Skip to main content
`Ctrl`+`K`

# scipy.signal.decimate

scipy.signal.decimate(x, q, n=None, ftype='iir', axis=-1, zero_phase=True)

  Downsample the signal after applying an anti-aliasing filter.

  By default, an order 8 Chebyshev type I filter is used. A 30 point FIR filter with Hamming window is used if ftype is ‘fir’.

  Parameters:
    x array_like

      The signal to be downsampled, as an N-dimensional array.

    q int

      The downsampling factor. When using IIR downsampling, it is recommended to call `decimate` multiple times for downsampling factors higher than 13.

    n int, optional

      The order of the filter (1 less than the length for ‘fir’). Defaults to 8 for ‘iir’ and 20 times the downsampling factor for ‘fir’.

    ftype str {‘iir’, ‘fir’} or `dlti` instance, optional

      If ‘iir’ or ‘fir’, specifies the type of lowpass filter. If an instance of an `dlti` object, uses that object to filter before downsampling.

    axis int, optional

      The axis along which to decimate.

    zero_phase bool, optional

      Prevent phase shift by filtering with `filtfilt` instead of `lfilter` when using an IIR filter, and shifting the outputs back by the filter’s group delay when using an FIR filter. The default value of `True` is recommended, since a phase shift is generally not desired.

      New in version 0.18.0.

  Returns:
    y ndarray

      The down-sampled signal.

  See also

  `resample`

    Resample up or down using the FFT method.

  `resample_poly`

    Resample using polyphase filtering and an FIR filter.

  Notes

  The `zero_phase` keyword was added in 0.18.0. The possibility to use instances of `dlti` as `ftype` was added in 0.18.0.

  Examples

      >>> import numpy as np
      >>> from scipy import signal
      >>> import matplotlib.pyplot as plt

  Define wave parameters.

      >>> wave_duration = 3
      >>> sample_rate = 100
      >>> freq = 2
      >>> q = 5

  Calculate number of samples.

      >>> samples = wave_duration*sample_rate
      >>> samples_decimated = int(samples/q)

  Create cosine wave.

      >>> x = np.linspace(0, wave_duration, samples, endpoint=False)
      >>> y = np.cos(x*np.pi*freq*2)

  Decimate cosine wave.

      >>> ydem = signal.decimate(y, q)
      >>> xnew = np.linspace(0, wave_duration, samples_decimated, endpoint=False)

  Plot original and decimated waves.

      >>> plt.plot(x, y, '.-', xnew, ydem, 'o-')
      >>> plt.xlabel('Time, Seconds')
      >>> plt.legend(['data', 'decimated'], loc='best')
      >>> plt.show()