मेरे पास एक ही खगोलीय वस्तु के दो स्पेक्ट्रा हैं। आवश्यक प्रश्न यह है: मैं इन स्पेक्ट्रा के बीच सापेक्ष बदलाव की गणना कैसे कर सकता हूं और उस पारी पर सटीक त्रुटि प्राप्त कर सकता हूं?
कुछ और विवरण अगर आप अभी भी मेरे साथ हैं। प्रत्येक स्पेक्ट्रम एक एक्स मूल्य (तरंग दैर्ध्य), y मान (प्रवाह) और त्रुटि के साथ एक सरणी होगा। वेवलेंथ शिफ्ट सब-पिक्सल होने वाला है। मान लें कि पिक्सेल नियमित रूप से दूरी पर हैं और केवल पूरे स्पेक्ट्रम पर लागू एक एकल तरंग दैर्ध्य पारी होने जा रही है। तो अंतिम उत्तर कुछ इस तरह होगा: 0.35 +/- 0.25 पिक्सेल।
दो स्पेक्ट्रा बहुत सारे फीचर्स रहित होते हैं जो कि कुछ जटिल अवशोषण सुविधाओं (डिप्स) द्वारा नियंत्रित होते हैं जो आसानी से मॉडल नहीं करते हैं (और आवधिक नहीं हैं)। मैं एक ऐसी विधि खोजना चाहता हूं जो सीधे दो स्पेक्ट्रा की तुलना करती है।
हर किसी की पहली वृत्ति एक क्रॉस-सह-संबंध करना है, लेकिन सबपिक्सल शिफ्ट के साथ, आपको स्पेक्ट्रा (पहले चौरसाई करके) के बीच अंतर करना होगा - साथ ही, त्रुटियों को सही होने के लिए बुरा लगता है।
मेरा वर्तमान दृष्टिकोण एक गाऊसी कर्नेल के साथ बातचीत करके डेटा को सुचारू करना है, फिर सुचारू परिणाम को फैलाने के लिए, और दो स्प्लेन्ड स्पेक्ट्रा की तुलना करना है - लेकिन मुझे इस पर भरोसा नहीं है (विशेष रूप से त्रुटियों)।
किसी को भी ठीक से ऐसा करने का एक तरीका पता है?
यहां एक छोटा अजगर कार्यक्रम है जो दो खिलौना स्पेक्ट्रा का उत्पादन करेगा जो 0.4 पिक्सेल (खिलौना 1 में लिखा है) और खिलौना 2। कासी) जिसे आप खेल सकते हैं। भले ही यह खिलौना मॉडल एक सरल गाऊसी विशेषता का उपयोग करता है, यह मानकर कि वास्तविक डेटा एक साधारण मॉडल के साथ फिट नहीं हो सकता है।
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))