AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TeeChart Peak-Erkennung

Ein Thema von norwegen60 · begonnen am 26. Jul 2022 · letzter Beitrag vom 29. Jul 2022
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
514 Beiträge
 
Delphi 12 Athens
 
#1

TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 06:19
Hallo zusammen,

gibt es eine einfache Möglichkeit in einer Messkurve Peaks zu erkennen und bei diesen z.B. deren Werte mit einem Mark zu versehen. Da es eine Messkurve ist, liegt auch ein Rauschen vor. Es müsste also die Möglichkeit geben, die Empfindlichkeit einzustellen. Gewünscht ist so was wie im Anhang dargestellt.
Ich habe eine Lösung wo ich die Peaks per 1. Ableitung = 0 erkenne und dann bei den Nicht-Peaks die Marks mit chChart.Series[0].Marks[i].Visible := False; abschalte. Es ist aber je nach Messwerten nicht ganz einfach, die Sensitivität einzustellen. Vielleicht gibt es ja aber was von der Stange.

Grüße
Gerd
Angehängte Grafiken
Dateityp: png Holmium.png (158,5 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat
Andreas13

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

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 09:57
Hallo Gerd,
wenn die X-Werte (in Deinem Fall die Wellenlänge) äquidistant (gleichabständig) wären, kann man die Meßdaten mit der Methode von

Savitzky, A. und Golay, J. (1964): Smoothing and Differentiation of Data by Simplified Least Squares Procedure. Analytical Chemistry 36 (1964) p. 1627 – 1639.

zunächst glätten, um das Rauschen zu unterdrücken und danach die Peaks relativ einfach und sicher bestimmen. Die Savitzky-Methode kann auch die 1. und 2. Ableitungen liefern. Bei geglätteten Kurven scheint mir jedoch eine einfache Überprüfung der Monotonie der Kurve schneller: Ein Peak liegt vor, wenn benachbarte Werte nicht mehr größer (oder kleiner) sind.

Grüße
Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
514 Beiträge
 
Delphi 12 Athens
 
#3

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 10:28
Ich mache die 1. Ableitung jetzt schon mit Savitzky, A. und Golay .
Trotzdem brauche ich noch eine zusätzliche Sensitivität. Nur das glätten mit Savitzky reicht nicht

Die Darstellung in TeeChart ziert sich auch noch ein bisschen. Keine Ahnung warum von den Peaks rechts keiner gemarkt wird. Erkannt werden sie korrekt
Angehängte Grafiken
Dateityp: png Holmium2.png (38,8 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Andreas13

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

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 10:33
Hi Gerd,
man kann (soll) je nach Rauschen der Daten den Savitzky-Golay-Filter mehrmals hintereinander laufen lassen.
Könntest Du evtl. Testdaten zur Verfügung stellen?
Grüße, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
514 Beiträge
 
Delphi 12 Athens
 
#5

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 11:01
Hallo Andreas,

wenn ich das Averaging übertreibe, gehen eng beieinander liegende Peaks unter, aber er findet über 1000 immer noch Peaks
Ich habe deshalb zusätzlich zu Derivation (Wechsel von - nach +) noch eine Mindestdifferenz drin.
Im Beispieldaten muss Differenz min 75 sein um die gelisteten Peaks zu finden
Differenz berechene ich über Min/Max-Werte so dass ich sie normieren von 0..100 normieren kann

Grüße
Gerd
Angehängte Dateien
Dateityp: txt Holmium.txt (70,5 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz