Aynı astronomik nesnenin iki spektrumuna sahibim. Temel soru şudur: Bu spektrumlar arasındaki göreceli değişimi nasıl hesaplayabilir ve bu vardiyada doğru bir hata alabilirim?
Hala benimleysen biraz daha ayrıntı. Her spektrum x değeri (dalga boyu), y değeri (akı) ve hata içeren bir dizi olacaktır. Dalgaboyu kayması alt piksel olacak. Piksellerin düzenli aralıklarla yerleştirildiğini ve tüm spektruma yalnızca tek bir dalga boyu kaydırması olacağını varsayın. Böylece son cevap şuna benzer: 0.35 +/- 0.25 piksel.
İki spektrum, kolayca modellenmeyen (ve periyodik olmayan) oldukça karmaşık emilim özellikleri (daldırma) ile noktalanan çok sayıda özelliksiz süreklilik olacaktır. İki spektrumu doğrudan karşılaştıran bir yöntem bulmak istiyorum.
Herkesin ilk içgüdüsü çapraz korelasyon yapmaktır, ancak alt piksel kaymalarıyla, spektrumlar arasında enterpolasyon yapmak zorunda kalacaksınız (önce yumuşatarak?) - Ayrıca, hataların doğru olması kötü görünüyor.
Şu anki yaklaşımım, bir gauss çekirdeği ile kıvrım yaparak verileri düzeltmek, daha sonra düzgünleştirilmiş sonucu spline etmek ve iki spline spektrumu karşılaştırmak - ama buna güvenmiyorum (özellikle hatalar).
Herkes bunu düzgün yapmak için bir yol biliyor mu?
İşte oynayabileceğiniz 0,4 piksel (toy1.ascii ve toy2.ascii'de yazılmıştır) ile değiştirilen iki oyuncak spektrumunu üretecek kısa bir python programı. Bu oyuncak model basit bir gaussian özellik kullanıyor olsa da, gerçek verilerin basit bir modele sığmayacağını varsayalım.
import numpy as np
import random as ra
import scipy.signal as ss
arraysize = 1000
fluxlevel = 100.0
noise = 2.0
signal_std = 15.0
signal_depth = 40.0
gaussian = lambda x: np.exp(-(mu-x)**2/ (2 * signal_std))
mu = 500.1
np.savetxt('toy1.ascii', zip(np.arange(arraysize), np.array([ra.normalvariate(fluxlevel, noise) for x in range(arraysize)] - gaussian(np.arange(arraysize)) * signal_depth), np.ones(arraysize) * noise))
mu = 500.5
np.savetxt('toy2.ascii', zip(np.arange(arraysize), np.array([ra.normalvariate(fluxlevel, noise) for x in range(arraysize)] - gaussian(np.arange(arraysize)) * signal_depth), np.ones(arraysize) * noise))