Wie kann man eine Kurve richtig glätten?

Nehmen wir an, wir haben einen Datensatz, der ungefähr von gegeben sein könnte

import numpy as np
x = np.linspace(0,2*np.pi,100)
y = np.sin(x) + np.random.random(100) * 0.2

Daher haben wir eine Variation von 20% des Datensatzes. Meine erste Idee war, die UnivariateSpline-Funktion von scipy zu verwenden, aber das Problem ist, dass dies das kleine Rauschen nicht in einer guten Weise berücksichtigt. Wenn Sie die Frequenzen berücksichtigen, ist der Hintergrund viel kleiner als das Signal, so dass ein Spline nur des Cutoffs eine Idee sein könnte, aber dies würde eine Hin- und Her-Fouriertransformation beinhalten, was zu einem schlechten Verhalten führen könnte. Ein anderer Weg wäre ein gleitender Durchschnitt, aber dies würde auch die richtige Wahl der Verzögerung erfordern.

Irgendwelche Tipps / Bücher oder Links, wie man dieses Problem angeht?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage