{ } Raw JSON

bundles / scipy 1.17.1 / scipy / signal / _spline_filters / cspline1d

function

scipy.signal._spline_filters:cspline1d

source: /scipy/signal/_spline_filters.py :305

Signature

def   cspline1d ( signal lamb = 0.0 )

Summary

Compute cubic spline coefficients for rank-1 array.

Extended Summary

Find the cubic spline coefficients for a 1-D signal assuming mirror-symmetric boundary conditions. To obtain the signal back from the spline representation mirror-symmetric-convolve these coefficients with a length 3 FIR window [1.0, 4.0, 1.0]/ 6.0 .

Parameters

signal : ndarray

A rank-1 array representing samples of a signal.

lamb : float, optional

Smoothing coefficient, default is 0.0.

Returns

c : ndarray

Cubic spline coefficients.

Notes

Array API Standard Support

cspline1d 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                   ⚠️ no JIT
Dask                  ⚠️ computes graph     n/a                 
====================  ====================  ====================

See dev-arrayapi for more information.

Examples

We can filter a signal to reduce and smooth out high-frequency noise with a cubic spline:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import cspline1d, cspline1d_eval
rng = np.random.default_rng()
sig = np.repeat([0., 1., 0.], 100)
sig += rng.standard_normal(len(sig))*0.05  # add noise
time = np.linspace(0, len(sig))
filtered = cspline1d_eval(cspline1d(sig), time)
plt.plot(sig, label="signal")
plt.plot(time, filtered, label="filtered")
plt.legend()
plt.show()
fig-2c69a9d191a2e88a.png

See also

cspline1d_eval

Evaluate a cubic spline at the new set of points.

Aliases

  • scipy.signal.cspline1d