AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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
466 Beiträge
 
Delphi 10.3 Rio
 
#1

TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 07: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
Miniaturansicht angehängter Grafiken
holmium.png  
  Mit Zitat antworten Zitat
Andreas13

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

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 10: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
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
466 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 11: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
Miniaturansicht angehängter Grafiken
holmium2.png  
  Mit Zitat antworten Zitat
Andreas13

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

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 11: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
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
466 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 12: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
582 Beiträge
 
Delphi XE5 Professional
 
#6

AW: TeeChart Peak-Erkennung

  Alt 26. Jul 2022, 18: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)
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 18:17 Uhr)
  Mit Zitat antworten Zitat
Andreas13

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

AW: TeeChart Peak-Erkennung

  Alt 29. Jul 2022, 09:48
Hello again,

der Teufel steckt bekanntlich immer im Detail: Eine halbwegs sichere Erkennung von Peaks in Chromatogrammen etc. ist gar nicht so einfach und recht aufwendig.

Ich habe auf ResearchGate https://www.researchgate.net/ zahlreiche Fachartikel zum Thema Peak Recognition gefunden. An dieser Stelle nenne ich nur drei frei zugängliche Beiträge, neben vielen kostenpflichtigen. Aber diese reichen aus meiner Sich bereits aus, um die Problematik und die Tücken der Peak-Erkennung zu verdeutlichen. Möglicherweise kannst Du daraus eine "abgespeckte" aber immerhin akzeptable "ShortCut"-Methode entwickeln und diese in Deine Programme einbauen.

1):
Random Subwindows for Robust Peak Recognition in Intracranial Pressure Signals (2008)
https://www.researchgate.net/publica...essure_Signals

2):
Analysis of Uncertain - Data Smoothing of Histograms (2009)
https://www.researchgate.net/publica..._of_Histograms

3):
Robust Peak Recognition in Intracranial Pressure Signals (2010)
https://www.researchgate.net/publica...essure_Signals

Leider kann ich mich im Moment mit dem Thema der Peak Recognition nicht weiter befassen, weil ich meine frische Corona-Infektion (trotz 3 Impfungen & Vorsichtsmaßnahmen ) auskurieren muß.

Grüße & viel Erfolg
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
466 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TeeChart Peak-Erkennung

  Alt 29. Jul 2022, 12:37
Hallo Andreas,

ich sauf im Moment gerade mit zwei anderen Themen ab udn muss deshalb das Peak-Thema etwas hinten an stellen. Grundsätzlich war die Frag eja auch eher, ob es Bordmittel in TeeChart gibt, aber da bin ich mir mittlerweile sicher, dass es die nicht gibt.

Trotzdem vielen Dank für deine Unterstützung. Ich werde mir die Links anschauen

Grüße
Gerd

PS: Und gute Besserung. Bin auch gerade wieder genesen nach.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf