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

# sawtooth

scipy.signal.sawtooth(t, width=1)

  Return a periodic sawtooth or triangle waveform.

  The sawtooth waveform has a period `2*pi`, rises from -1 to 1 on the interval 0 to `width*2*pi`, then drops from 1 to -1 on the interval `width*2*pi` to `2*pi`. width must be in the interval [0, 1].

  Note that this is not band-limited. It produces an infinite number of harmonics, which are aliased back and forth across the frequency spectrum.

  Parameters:
    t array_like

      Time.

    width array_like, optional

      Width of the rising ramp as a proportion of the total cycle. Default is 1, producing a rising ramp, while 0 produces a falling ramp. width = 0.5 produces a triangle wave. If an array, causes wave shape to change over time, and must be the same length as t.

  Returns:
    y ndarray

      Output array containing the sawtooth waveform.

  Notes

  Array API Standard Support

  `sawtooth` 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 | ⛔ | n/a

  > See Support for the array API standard for more information.

  Examples

  A 5 Hz waveform sampled at 500 Hz for 1 second:

      >>> import numpy as np
      >>> from scipy import signal
      >>> import matplotlib.pyplot as plt
      >>> t = np.linspace(0, 1, 500)
      >>> plt.plot(t, signal.sawtooth(2 * np.pi * 5 * t))