Source code for dispel.signal.interpolators
"""Specific functionality for signal processing of interpolations."""
import numpy as np
from scipy.interpolate import interp1d
[docs]
def custom_interpolator_1d(
path: np.ndarray, up_sampling_factor: float, kind: str
) -> np.ndarray:
"""Interpolate x and y coordinates of a trajectory.
Parameters
----------
path
The given 2 dimensional path to interpolate.
up_sampling_factor
The up-sampling factor.
kind
Specifies the kind of interpolation as a string or as an integer specifying the
order of the spline interpolator to use. The string has to be one of 'linear',
'nearest', 'nearest-up', 'zero', 'slinear', 'quadratic', 'cubic', 'previous', or
'next'. 'zero', 'slinear', 'quadratic' and 'cubic' refer to a spline
interpolation of zeroth, first, second or third order; 'previous' and 'next'
simply return the previous or next value of the point; 'nearest-up' and
'nearest' differ when interpolating half-integers (e.g. 0.5, 1.5) in that
'nearest-up' rounds up and 'nearest' rounds down. Default is 'linear'.
Returns
-------
numpy.ndarray
The interpolated trajectory.
"""
if path.size == 0:
return path
distance = np.cumsum(np.sqrt(np.sum(np.diff(path, axis=0) ** 2, axis=1)))
distance = np.insert(distance, 0, 0)
alpha = np.linspace(0, distance.max(), round(path.shape[0] * up_sampling_factor))
interpolator = interp1d(distance, path, kind, axis=0)
return interpolator(alpha)
[docs]
def cubic_splines(path: np.ndarray, up_sampling_factor: float) -> np.ndarray:
"""Interpolate x and y coordinates of a trajectory using cubic splines.
According to `Scipy` documentation, ``Interpolate data with a piecewise cubic
polynomial which is twice continuously differentiable. Here spline interpolation is
preferred to polynomial interpolation because it yields similar results, even when
using low degree polynomials, while avoiding Runge's phenomenon for higher
degrees.``
Parameters
----------
path
The given 2 dimensional path to interpolate.
up_sampling_factor
The up-sampling factor.
Returns
-------
numpy.ndarray
The interpolated trajectory.
"""
return custom_interpolator_1d(path, up_sampling_factor, kind="cubic")