Оптимальное сглаживание зашумленных кривых
Рассмотрим набор данных, аппроксимированный следующим образом:
import numpy as np x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2
Это включает 20% вариацию. Такие подходы, как UnivariateSpline и скользящие средние, имеют ограничения.
Фильтр Савицкого-Голея
Эффективным решением является фильтр Савицкого-Голея, доступный в scipy. Он использует регрессию наименьших квадратов для оценки значения в центре небольшого окна с помощью полинома. Затем окно смещается, чтобы повторить процесс, что приводит к оптимизации настройки каждой точки.
import numpy as np import matplotlib.pyplot as plt from scipy.signal import savgol_filter x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2 yhat = savgol_filter(y, 51, 3) # window size 51, polynomial order 3 plt.plot(x,y) plt.plot(x,yhat, color='red') plt.show()
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3