Einzelnen Beitrag anzeigen

Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#6

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 17:06
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
Angehängte Dateien
Dateityp: zip Holmium.zip (450,7 KB, 4x aufgerufen)
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (26. Jul 2022 um 17:17 Uhr)
  Mit Zitat antworten Zitat