Suavização ideal de curvas ruidosas
Considere um conjunto de dados aproximado por:
import numpy as np x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2
Isso inclui variação de 20%. Abordagens como UnivariateSpline e médias móveis apresentam limitações.
Filtro Savitzky-Golay
Uma solução eficaz é o filtro Savitzky-Golay, disponível em scipy. Ele usa regressão de mínimos quadrados para estimar o valor no centro de uma pequena janela usando um polinômio. A janela então muda para repetir o processo, resultando no ajuste otimizado de cada ponto.
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()
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3