objectif
Lisser un signal en préservant la forme via Savitzky-Golay.
code minimal
import numpy as np
from scipy.signal import savgol_filter
x = np.linspace(0, 2*np.pi, 31)
y = np.sin(x) + 0.2*np.random.default_rng(0).normal(size=x.size)
ys = savgol_filter(y, window_length=7, polyorder=2)
print(len(ys) == len(y))
utilisation
from scipy.signal import savgol_filter
import numpy as np
y = np.array([1,2,3,2,1,2,3])
print(savgol_filter(y, 5, 2).round(2).tolist())
variante(s) utile(s)
from scipy.signal import savgol_filter
import numpy as np
y = np.arange(10, dtype=float)
print(savgol_filter(y, 5, 3, deriv=1).round(2).tolist())
notes
- window_length impair; polyorder < window_length.