librosa.util.cyclic_gradient

librosa.util.cyclic_gradient(data, edge_order=1, axis=- 1)[source]

Estimate the gradient of a function over a uniformly sampled, periodic domain.

This is essentially the same as np.gradient, except that edge effects are handled by wrapping the observations (i.e. assuming periodicity) rather than extrapolation.

Parameters
datanp.ndarray

The function values observed at uniformly spaced positions on a periodic domain

edge_order: {1, 2}

The order of the difference approximation used for estimating the gradient

axisint

The axis along which gradients are calculated.

Returns
gradnp.ndarray like data

The gradient of data taken along the specified axis.

See also

numpy.gradient

Examples

This example estimates the gradient of cosine (-sine) from 64 samples using direct (aperiodic) and periodic gradient calculation.

>>> import matplotlib.pyplot as plt
>>> x = 2 * np.pi * np.linspace(0, 1, num=64, endpoint=False)
>>> y = np.cos(x)
>>> grad = np.gradient(y)
>>> cyclic_grad = librosa.util.cyclic_gradient(y)
>>> true_grad = -np.sin(x) * 2 * np.pi / len(x)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, true_grad, label='True gradient', linewidth=5,
...          alpha=0.35)
>>> ax.plot(x, cyclic_grad, label='cyclic_gradient')
>>> ax.plot(x, grad, label='np.gradient', linestyle=':')
>>> ax.legend()
>>> # Zoom into the first part of the sequence
>>> ax.set(xlim=[0, np.pi/16], ylim=[-0.025, 0.025])
../_images/librosa-util-cyclic_gradient-1.png