Hallo Gerd,
inzwischen konnte ich ein wenig mit Deinen Daten experimentieren. Anbei einige meiner gewonnenen Erkenntnisse als Zwischenstand:
1):
Die Wellenlängen sind
nicht ganz äquidistant (s. Anhang). Der Savitzky-Golay-Algorithmus basiert jedoch auf dieser Annahme.
Minimale Schrittweite = 0,40; Maximale Schrittweite = 0,60; Maximale Differenz der Schrittweite = 0,20.
Wir können die Methode etwas großzügiger Weise trotzdem anwenden. Wir machen bei der Anwendung etwas größere Fehler als üblich wären.
2):
Ich verwende einen "Glättungsgrad = 1": d. h. 5 benachbarte Punkte. Das ist die minimale Option beim Savitzky-Golay-Filter. Das Maximum wäre 17 Punkte = Glättungsgrad = 7.
Ein höherer Glättungsgrad killt die Peaks, also bleiben wir bei Glättungsgrad = 1.
3):
Zur Rauschunterdrückung habe ich mit verschiedenen Werten experimentiert:
SoOft = 1 ... 1000-mal.
Je öfter der SG-Filter angewandt wird, desto weniger ist das Rauschen, aber eventuell relevante Peaks können verschwinden.
Die gefundenen Peaks sind bei
SoOft = 0: --> 271 Peaks
SoOft = 1: --> 154 Peaks
SoOft = 10: --> 66 Peaks
SoOft = 20: --> 54 Peaks
SoOft = 30: --> 47 Peaks
SoOft = 100: --> 36 Peaks
SoOft = 500: --> 20 Peaks
SoOft = 1000: --> 11 Peaks
Einige Diagramme sind im Anhang (Holmium.zip) zu sehen.
Allerdings habe ich die Peaks nicht über die 1. Ableitung bestimmt, sondern durch folgenden einfachen Vergleich dreier benachbarter Punkte der mehrfach geglätteten Meßdaten-Kurve in Excel:
Code:
Public Function Peak(xa#, xb#, xc#, ya#, yb#, yc#)
Dim Faktor#
Dim Res#
Faktor = 1.002 ' d.h. ein Peak in der geglätteten Kurve muß mindestens 0,2% größer sein als seine beiden Nachbarn
If (ya * Faktor <= yb) And (yb >= yc * Faktor) Then Peak = xb Else Peak = ""
End Function
Durch den
Faktor läßt sich die Anzahl der Treffer stark beeinflussen. Das Ergebnis ist allerdings noch unbefriedigend und bin noch am Überlegen, wie man das Ganze verbessern könnte.
Einige Ideen:
a):
Obige VBA-Routine zur Peak-Bestimmung auf noch mehr Nachbarpunkte erweitern, um noch vorhandene zufällige Schwankungen auszufiltern.
b):
Die 2. Ableitung verwenden: Die Nullstelle der 1. Ableitung ist bekanntlich identisch mit dem Extremwert der 2. Ableitung: d.h. positive und negative Peaks (d.h. die Absolut-Werte) zusammenzählen.
c):
Beim Glätten Gewichte verwenden (?)
d):
Neben den Peaks auch die Täler (Mulden) bestimmen und einen normierten Schwellenwert für eine signifikant anzusehende relative Peak-Höhe zu den Nachbar-Peaks definieren, damit nicht jeder kleine "Huckel" als Peak angesehen wird.
Im Beitrag
Choosing the optimal parameters for a Savitzky–Golay smoothing filter unter
https://nirpyresearch.com/choosing-o...othing-filter/ ist eine Methode zur Wahl der "optimalen Parameter" der Savitzky–Golay-Filter beschrieben, allerdings habe ich die Methode noch nicht verstanden und kann sie auch nicht anwenden...
Vielleicht hast Du weitere Ideen.
Grüße
Andreas