Ich habe im Grunde verstanden, wie die Gummiband- / Grundlinienkorrektur funktioniert.
- Das gegebene Spektrum ist in (N) Bereiche unterteilt.
- Die niedrigsten Punkte in jedem Bereich werden bestimmt.
- Die anfängliche Grundlinie wird aus diesen Punkten aufgebaut.
- Jetzt werden alle Punkte im Spektrum durch die Differenz zwischen dem niedrigsten Punkt im aktuellen Bereich und dem niedrigsten Punkt auf der Grundlinie gezogen.
Es gibt jedoch einige Nuancen, mit denen ich nicht umgehen kann. Was ist beispielsweise, wenn einer der Punkte genau an der Grenze zwischen zwei Bereichen usw. liegt?
Außerdem muss ich nachweisen können, dass der Algorithmus, den ich schreibe, solide ist und von anderen Arbeiten oder wissenschaftlichen Arbeiten referenziert werden kann.
Wenn mir jemand einen Hinweis geben könnte, würde ich mich sehr freuen.
frequency-spectrum
preprocessing
チ ー ズ パ ン
quelle
quelle
Antworten:
Dies kann leicht in
R
oder erfolgenPython
. Es stehen gut getestete Funktionen zur Verfügung, sodass Sie sich keine Gedanken über Grenzen oder Nuancen machen müssen. Darüber hinaus sind beide kostenlos und bei Wissenschaftlern beliebt.Lösung für R.
Für die Verarbeitung von Spektraldaten gibt es ein spezielles Paket namens hyperSpec . Dort ist die Gummiband-Grundlinienkorrektur bereits implementiert (Funktion
spc.rubberband
). Alle Details sind in der Dokumentation hervorgehoben. Die Verwendung ist ziemlich einfach:Lösung für Python
Es gibt keine (nach meinem besten Wissen) sofort einsatzbereite Lösung für Python, aber Sie können die
scipy.spatial.ConvexHull
Funktion verwenden, um Indizes aller Punkte zu finden, die eine konvexe Hülle um Ihr Spektrum bilden. Angenommen, das Spektrum ist inx
undy
Arrays enthalten:Das Array
v
enthält Indizes der Scheitelpunkte, die in CCW-Richtung angeordnet sind, z[892, 125, 93, 0, 4, 89, 701, 1023]
. Wir müssen einen Teil extrahieren, derv
aufsteigend ist, z. B. 0–1023.Jetzt wird die Grundlinie wie folgt korrigiert:
quelle
Es kann viele Techniken geben. Ihre Idee scheint mir gut zu sein.
Zwei weitere Ideen:
Machen Sie eine FFT Ihrer Daten und filtern Sie die niedrigsten Frequenzen heraus. Dies entfernt auch die Grundlinienmodulationen. Natürlich müssen Sie die richtige Filterbreite von Hand oder anhand einer fundierten Vermutung aus den Daten ermitteln.
Verwenden Sie Kosinusfunktionen mit mehreren langen Wellenlängen und passen Sie Ihre Daten linear an. Sie können die Peaks auch über einen einfachen Filter oder durch Gewichtung der Datenpunkte mit ihrer Signalstärke entfernen.
quelle
Lösung in Python mit Modpoly und Imodpoly Algorithmus.
Python-Bibliothek zur Basiskorrektur / -entfernung. Es verfügt über einen Modpoly- und einen IModploy-Algorithmus, der basiskorrigierte Ergebnisse zurückgeben kann, wenn Sie die ursprünglichen Werte als Python-Liste oder Pandas-Reihe eingeben und den Polynomgrad angeben. Installieren Sie die Bibliothek als
pip install BaselineRemoval
. Unten ist ein Beispielquelle
[EDIT 2018/03/24] Seit der Antwort wurden mehrere Verwendungen von Spektraldaten aufgezeichnet
Wenn Ihre spektralen Peaks relativ fein und oberhalb einer Basislinie mit einem niederfrequenteren Verhalten fast positiv sind, empfehle ich, BEADS (Baseline Estimation And Denoising w / Sparsity) , einen Algorithmus, der auf der Sparsity der Daten und basiert, auszuprobieren soome seiner Derivate. Es funktioniert gut mit chromatographischen Daten. Matlab-Code ist verfügbar , und auf der BEADS-Seite werden R- oder C ++ - Codes sowie bekannte Verwendungen erfasst . Hier finden Sie Anwendungen für Raman-Spektren, astronomisches hyperspektrales Galaxienspektrum, Röntgenabsorptionsspektroskopie (XAS), Röntgenbeugung (XRD) und kombinierte XAS / XRD-Messungen.
quelle