MenuMENU

EasyCalibrate Pro

Wellenlängen-Kalibration von Spektrometern mit Polynomen zweiter Ordnung

Im Skript EasyCalibrate haben wir gezeigt, wie man mit nur wenigen Zeilen Python-Skript eine Wellenlängenkalibrierung (d. h. die Zuordnung Pixel ➙ Wellenlänge (nm) für unsere DIY-Spektrometer) durchführt. Zu diesem Zweck wurde eine lineare Regression verwendet, die für einfache Anwendungen mit geringen Kalibrierungsanforderungen vollkommen ausreichend ist.

Wenn man jedoch anspruchsvollere Experimente durchführen möchte, wird man schnell feststellen, dass eine lineare Kalibrierung für diesen Zweck nicht ausreicht. Abhilfe schafft hier die Verwendung von Polynomen zweiten Grades.

Auf dieser Seite stellen wir ein entsprechendes verbessertes Python-Skript vor. Mit diesem Skript können unsere DIY-Spektrometer so kalibriert werden, dass beispielsweise die Positionen der Emissionspeaks über den gesamten Sensorbereich im Experiment mit einer Genauigkeit von wenigen Zehnteln eines Nanometers bestimmt werden können.

Wellenlängenkalibration mit roter CCFL (Kaltkathodenlampe) als Referenzquelle

Zur Demonstration des Skriptes wird als Beispiel-Referenzquelle hier eine rote Kaltkathodenlampe (CCFL) verwendet, da diese Lichtquellen relativ einfach und preiswert zu beschaffen sind (wir helfen hier auch gerne).

Einsatz finden diese z. B. in der Effekt-Beleuchtung von Gaming-PCs oder als LCD-Backlights.

Aber auch sonst bieten CCFLs gleich eine Reihe an weiteren Vorteilen:

  • der Betrieb ist mit Hilfe eines batteriebetriebenen Inverters möglich;
  • in der Startphase zeigen CCFLs mehrere schmale Emissionslinien zwischen 435 nm und 810 nm, die relativ gleichmäßig über den Empfindlichkeitsbereich unseres DIY-Spektrometers verteilt sind; sehr praktisch für eine zuverlässige und robuste polynomische Kalibration mittels quadratischem Fit;
  • die Lage der Emissionslinien ist sehr temperaturstabil.

Für die Kalibration können aber auch andere Lichtquellen (wie z. B. LEDs oder Laserdioden) mit bekannten Emissionsmaxima genutzt werden. Aber auch Bandpass- oder Kantenfilter sind geeignet. Im Beispielskript sind einige dieser Möglichkeiten bereits vorbereitet (aber auskommentiert). Diese können bei Bedarf jederzeit wieder aktiviert und mit den speziell beim Benutzer genutzen Wellenlängen und Bezeichnungen modifiziert werden.

Kurz und kompakt: Das leistet EasyCalibrate Pro

Die Software bietet eine Live-Anzeige der Zeilenkameradaten (Counts über Pixel, nach erfolgter Kalibration zusätzlich mit Wellenlängenskala) und ermöglicht das Einstellen der Integrationszeit sowie das Starten und Stoppen der Kamera.

Referenzpeaks können interaktiv markiert werden – entweder per Rechtsklick oder über die Leertaste. 

Für die Kalibration wird abhängig von der Anzahl der Referenzpunkte ein Fit durchgeführt: Bei zwei Referenzpunkten erfolgt ein linearer Fit, ab drei Referenzpunkten ein quadratischer Fit (2. Ordnung). Die Kalibration kann gespeichert und wieder geladen werden, wobei aus Kompatibilitätsgründen zu anderen Skripten sowohl eine CSV-Datei als auch eine TXT-Datei erzeugt werden. Zusätzlich lässt sich das aktuell aufgenommene Spektrum als CSV exportieren (Pixel, Counts und optional Wellenlänge).

Der Workflow schnell erklärt

  1. Skript starten
    python EasyCalibratePro.py
  2. CCFL einschalten und sofort messen
    In den ersten ~20 s sind die Argonlinien noch vorhanden.
  3. Live-Auslese anhalten (Start/Stop)
    Für reproduzierbares Setzen der Peaks wird die Live-Auslese gestoppt.
  4. Kalibrierdialog vorbereiten
    »Start Calibration« öffnen, Referenzbuttons sind sichtbar.
  5. Referenz wählen ➙ Peak setzen
    Setzen per Rechtsklick oder Leertaste (beides ist gebunden).
  6. Fit berechnen (Calibrate)
    • 2 Punkte: linear
    • ≥3 Punkte: quadratisch (2. Ordnung)
  7. Kalibration speichern (Save)
    Es entstehen eine CSV-Datei (a,b,c) und optional eine TXT-Datei für ältere Tools.

Das vollständige Python-Skript ist hier zum Download hinterlegt. Nachfolgend werden hier nur die wichtigsten Passagen ausführlich behandelt.


Bildschirmvideo: »Kalibration mit roter CCFL (während der Startphase)«

Dieses Video zeigt den Workflow bei Nutzung des Skriptes. Zunächst wird nach Einschalten der Lampe eine Integrationszeit gewählt, bei der die Referenzpeaks gut sichtbar sind. Nach Stoppen der Kamera kann dann in Ruhe die Identifikation und Markierung der Linen durchgeführt werden.

Besonderheit bei der CCFL-Kalibration: Messfenster ca. 20 Sekunden

Bei der roten CCFL sind zu Beginn neben den Hg-Linien auch Argonlinien gut sichtbar. Genau diese Argonlinien sind für die Kalibration so wertvoll, weil sie zusätzliche Referenzpunkte im roten/NIR-Bereich liefern. Sie verschwinden jedoch innerhalb von ca. 20 Sekunden, sobald die Lampe auf Betriebstemperatur kommt.

Warum? Während des Aufwärmens steigt die Quecksilberdampfdruck-/Konzentration in der Röhre; das Spektrum wird zunehmend von Hg-dominierten Prozessen geprägt, und Argonemissionen treten in den Hintergrund (je nach Lampentyp teils schnell, teils langsamer).

Nach dem Warmlaufen ist das Spektrum stabil, aber für eine »Mehrpunkt«-Kalibration weniger attraktiv: Die rote Farbe entsteht nun vor allem durch einen Phosphor, der eine starke Emission um ca. 615 nm und schwächere Anteile zwischen ca. 575 – 625 nm zeigt; die zusätzlichen Argonlinien sind dann nicht mehr verfügbar.

Für die Kalibration sollten die Referenzlinien daher in den ersten ~20 s nach dem Einschalten durch geeignete Wahl der Integrationszeit sichtbar gemacht und die Kamera dann gestoppt werden. Praktisch bedeutet das zudem: Das Kalibrationsskript sollte bereits gestartet sein, bevor die CCFL eingeschaltet wird.

Qualität der Kalibration: Best Practices

Die Qualität einer Kalibration hängt start von den gewählten Referenzpeaks und der genutzen Integrationszeit ab!

Zeitfenster beachten:
Die Referenzen sollten schnell und eindeutig zu finden sein. Hier z. B. innerhalb der ersten ~20 s setzen, bevor Argonlinien verschwinden. Vorbereitete »Fingerprints« (siehe unten) der benötigten Signale verwenden!
Referenzpunkte geschickt verteilen:
Nicht nur »in der Mitte« kalibrieren; Linien an den Enden des Messbereichs bewusst mitnehmen (hier z. B.: Ar 696/763/810).
Sättigung vermeiden:
Peaks dürfen nicht oben »abgeschnitten« sein, weil der Sensor dann eventuell übersteuert/gesättigt ist; sonst verschiebt sich das Maximum.
Peak-Maximum markieren:
Bei Emissions-Linien immer das Maximum wählen, nicht eine Flanke. Flanken eignen sich mehr bei der Nutzung von Kantenfiltern

»Spektraler Fingerabdruck«: Die Lagen der im Skript genutzten Emissionslinien sind in diesem Spektrum markiert. Einfach anklicken und ausdrucken: Hiermit sollte die Identifikation der entsprechenden Linien während der Kalibration dann kein Problem sein.


Referenzlinien im Skript: CCFL (Hg/Ar) als Beispielkonfiguration

Am Anfang des Skripts wird die Referenzquelle über einen auskommentierten Block ausgewählt. Für die rote CCFL (Hg/Ar) sind fünf Referenzpunkte vorbereitet:

# calibration data for five emission lines (Hg/Ar) of a red CCFL (Cold Cathode Fluorescent Lamp)

# number of calibration points (min. 2, max. 5)
N_REF_POINTS = 5  

# wavelengths of the calibartion lines/points
ref_values_nm = [435.83, 546.07, 696.54, 763.51, 810.37][:N_REF_POINTS]

# label of buttons
ref_labels = ["Peak for \"Hg 435\"", "Peak for \"Hg 546\"", "Peak for \"Ar 696\"", "Peak for \"Ar 763\"", "Peak for \"Ar 810\""][:N_REF_POINTS]


Im Skript finden sich aber auch bereits schon (auskommentierte) Abschnitte für die Verwendung anderer Referenzquellen, u.a. für Bandpassfilter oder preiswerte Laserdiodenmodule.


Polynomische Regression 2. Ordnung in der Spektrometer-Kalibration

Warum reicht »linear« oft nicht aus?

Über größere Spektralbereiche ist die Abbildung »Pixel ➙ Wellenlänge« in realen Aufbauten häufig leicht nichtlinear (Optikgeometrie, Abbildungsfehler, Dispersionseffekte). Ein quadratischer Ansatz ist hier ein etablierter, stabiler Kompromiss: deutlich genauer als linear, aber wesentlich robuster als höhere Polynome.

Modell und Fit im Skript

Ab drei Referenzpunkten wird ein quadratisches Modell verwendet:

λ(px)=apx2+bpx+c
 

Im Code (Kernzeilen):

               a, b, c = np.polyfit(pixels, waves, 2)
               polyfit = np.poly1d([a, b, c])
 

Bei genau zwei Punkten wird automatisch linear gefittet.

 

Hier können Sie unkompliziert eine Frage oder Anfrage zu unseren Produkten stellen:

Produktanfrage

Ich bitte um


Aktualisiert am: 22.01.2026