librosa.chirp(fmin, fmax, sr=22050, length=None, duration=None, linear=False, phi=None)[source]

Construct a “chirp” or “sine-sweep” signal.

The chirp sweeps from frequency fmin to fmax (in Hz).

fminfloat > 0

initial frequency

fmaxfloat > 0

final frequency

srnumber > 0

desired sampling rate of the output signal

lengthint > 0

desired number of samples in the output signal. When both duration and length are defined, length takes priority.

durationfloat > 0

desired duration in seconds. When both duration and length are defined, length takes priority.

  • If True, use a linear sweep, i.e., frequency changes linearly with time

  • If False, use a exponential sweep.

Default is False.

phifloat or None

phase offset, in radians. If unspecified, defaults to -np.pi * 0.5.

chirp_signalnp.ndarray [shape=(length,), dtype=float64]

Synthesized chirp signal

  • If either fmin or fmax are not provided.

  • If neither length nor duration are provided.


Generate a exponential chirp from A2 to A8

>>> exponential_chirp = librosa.chirp(110, 110*64, duration=1)

Or generate the same signal using length

>>> exponential_chirp = librosa.chirp(110, 110*64, sr=22050, length=22050)

Or generate a linear chirp instead

>>> linear_chirp = librosa.chirp(110, 110*64, duration=1, linear=True)

Display spectrogram for both exponential and linear chirps.

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(nrows=2, sharex=True, sharey=True)
>>> S_exponential = np.abs(librosa.stft(y=exponential_chirp))
>>> librosa.display.specshow(librosa.amplitude_to_db(S_exponential, ref=np.max),
...                          x_axis='time', y_axis='linear', ax=ax[0])
>>> ax[0].set(title='Exponential chirp', xlabel=None)
>>> ax[0].label_outer()
>>> S_linear = np.abs(librosa.stft(y=linear_chirp))
>>> librosa.display.specshow(librosa.amplitude_to_db(S_linear, ref=np.max),
...                          x_axis='time', y_axis='linear', ax=ax[1])
>>> ax[1].set(title='Linear chirp')