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.
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:
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.
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).
Das vollständige Python-Skript ist hier zum Download hinterlegt. Nachfolgend werden hier nur die wichtigsten Passagen ausführlich behandelt.
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.
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.
Die Qualität einer Kalibration hängt start von den gewählten Referenzpeaks und der genutzen Integrationszeit ab!
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.

Ü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.
Ab drei Referenzpunkten wird ein quadratisches Modell verwendet:
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:
Aktualisiert am: 22.01.2026
