Spektrum normalisieren wie

Neue Frage »

pauledd Auf diesen Beitrag antworten »
Spektrum normalisieren wie
Hallo

Ich habe mir ein kleines [EDIT:ich darf keine url posten]DIY Spektroskop gebaut und ein Sonnenlichtspektrum aufgenommen. Man erkennt wunderbar die Fraunhoferlinien
und auch die Natrium Doppellinie

Dann habe ich das Spektrum in eine RBG Datenreihe zerlegt und als csv Datei vorliegen.

So sieht der Rotkanal des Spektrums nach dem Gnuploten aus:

[EDIT:ich darf keine url posten]
[attach]46112[/attach]

Jetzt würde ich aber gerne meine Daten so umrechnen das ich nur noch die Spitzen, also Absorptionslinien
als Abweichung vom Hintergrund als Plot habe und den Rest sozusagen als Nulllinie. Ich habe das mit Hand
mal darunter gekritzelt (schwarz).
Hier mal ein Bild wie es der Profi gemacht hat:

[EDIT:ich darf keine url posten]

Die Daten liegen je nach Intensität als 0-65536 Wert vor.
Die csv Datei hat dieses Format:
x-position,R,G,B
1,293,281,40302
2,273,283,45938
...
Mich interessiert aber erstmal nur ein Kanal, wenn ich weis wie ich die Daten verarbeiten muss kann ich den Rest dann selber umrechen.
Hat jemand eine Idee wie ich die Daten verarbeiten müsste?
PS. Windows Programme die das für mich erledigen sind für mich nicht akzepabel! Big Laugh
pauledd Auf diesen Beitrag antworten »

Ich habe einen Tipp erhalten ich solle ein Kontinuum anfitten und dieses dann abziehen, also ein Polynom n-ten Grades. Mal sehen ob ich das mit Python/Numpy hinbekomme/kappiere...
pauledd Auf diesen Beitrag antworten »

Ok, ein Stückchen weiter. Das Polynom funktioniert schon mal.
[attach]46124[/attach]

Jetzt muss ich "NUR" noch herausfinden wie ich das Polynom von den Rohdaten abziehe.
pauledd Auf diesen Beitrag antworten »

Ich denke das Grundprinzip habe ich jetzt. Muss nur noch Feinheiten wie evtl. höherer Polyn. Grad, zwei Y-Achsen und Skalierung anpassen aber so im groben sollte es passen.
[attach]46128[/attach]

das Python Script das ich verwendet habe... es geht davon aus das ich die Daten per stdin füttere, also sowas wie:
code:
1:
cat spectrum.csv | awk -F',' '{print $2}' | python3 script.py


und hier das Script:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
import sys
import matplotlib.pyplot as plt
from numpy import *
import pylab

data = sys.stdin.readlines()        # read values from stdin
ydata = []
xdata = []
polydata = []
equaldata = []
n = 0.0

for i in range(len(data)):          # fill list with raw data
    ydata.append(float(data[i]))
    xdata.append(int(i))

plt.title('Polynominal fit test')
plt.xlabel('x pixel nr.')
plt.ylabel('intensity')

z10 = polyfit(xdata, ydata, 10)     # create polynominal 10th degree
p10 = poly1d(z10)

for i in range(len(xdata)):         # fill list with polynominal values
    polydata.append(p10(i))
for i in range(len(xdata)):         # remove raw data from the polynominal data
    n = polydata[i] - ydata[i]
    equaldata.append(n)

pylab.plot(xdata, ydata, label='raw data')
pylab.plot(xdata,equaldata,'-', label='raw - poly values')
pylab.legend()
pylab.show()
Steffen Bühler Auf diesen Beitrag antworten »

Da Du bisher nur mit Dir selbst geredet hast, ist mir Dein Thread gar nicht aufgefallen, weil ich dachte, es gibt schon richtige Antworten. Somit etwas spät noch mein Senf:

Ich hätte hier nicht mit einem Polynomfit gearbeitet, sondern das Spektrum zunächst geglättet und dann abgeleitet. Die drei "Hubbel" sollten dann schön herauskommen.

Viele Grüße
Steffen
pauledd Auf diesen Beitrag antworten »

Hi Steffen

also mit dem Glätten hätte ich etwas Angst zuviel wegzuglätten. Aber ich werde sicher eine variable Glättung versuchen als Vorstufe einzubauen.
Also mir geht es nicht nur um die drei größeren "Huckel" sondern auch um die feineren Absorbtionslinien:
Es gibt ziemlich kleine/schwache Linien die schnell im Rauschen verwinden können.

[attach]46166[/attach]

Das mit dem Polyfit habe ich von einem User im Astronomie.de Forum / Unterbereich Spektroskopie.
Das wird wohl auch in professioneller Software verwendet, zumindest habe ich es schon bei der Software
CASA [EDIT:ich darf keine url posten] gesehen die u.a. am ALMA und VLA verwendet
wird.
Ich bin inzwischen just for fun von Python zu C++/Qt gewechselt und will das ganze versuchen mit Gui zu bauen, wenns klappt super, wenn nicht, auch nicht so schlimm...
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »