ฉันมีสเปกตรัมสองอันของวัตถุทางดาราศาสตร์เดียวกัน คำถามสำคัญคือ: ฉันจะคำนวณการเปลี่ยนแปลงสัมพัทธ์ระหว่าง spectra เหล่านี้และได้รับข้อผิดพลาดที่แม่นยำในการเปลี่ยนแปลงนั้นได้อย่างไร
รายละเอียดเพิ่มเติมถ้าคุณยังอยู่กับฉัน แต่ละสเปกตรัมจะเป็นอาร์เรย์ที่มีค่า x (ความยาวคลื่น), ค่า y (ฟลักซ์) และข้อผิดพลาด การเปลี่ยนความยาวคลื่นจะเป็นพิกเซลย่อย สมมติว่าระยะห่างของพิกเซลเป็นประจำและมีเพียงการเลื่อนความยาวคลื่นเดียวที่ใช้กับสเปกตรัมทั้งหมด ดังนั้นคำตอบสุดท้ายจะเป็นดังนี้: 0.35 +/- 0.25 พิกเซล
spectra ทั้งสองนั้นจะมีความต่อเนื่องที่ไม่มีรูปแบบมาแทนที่ด้วยคุณสมบัติการดูดซับที่ค่อนข้างซับซ้อน (dips) ที่ไม่ได้สร้างแบบจำลองได้ง่าย (และไม่ได้เป็นคาบ) ฉันต้องการหาวิธีที่เปรียบเทียบสเปกตรัมทั้งสองโดยตรง
สัญชาตญาณแรกของทุกคนคือการทำครอสสัมพันธ์ แต่ด้วยการเลื่อนพิกเซลย่อยคุณจะต้องสอดแทรกระหว่างสเปคตรัม
วิธีการปัจจุบันของฉันคือทำให้ข้อมูลราบรื่นขึ้นโดยใช้เคอร์เนลแบบเกาส์เซียนแล้วจึงทำให้ผลที่ได้เป็นไปอย่างราบรื่นและเปรียบเทียบสเปกตรัมสองอันที่แยกกัน - แต่ฉันไม่ไว้ใจ (โดยเฉพาะข้อผิดพลาด)
ไม่มีใครรู้วิธีที่จะทำอย่างถูกต้องหรือไม่
นี่คือโปรแกรมไพ ธ อนสั้น ๆ ที่จะสร้างสเปกตรัมของเล่นสองอันที่ถูกเลื่อนด้วย 0.4 พิกเซล (เขียนเป็น toy1.ascii และ toy2.ascii) ที่คุณสามารถเล่นได้ แม้ว่าโมเดลของเล่นนี้จะใช้คุณสมบัติแบบเกาส์เซียนอย่างง่าย แต่สมมติว่าข้อมูลจริงไม่สามารถใช้กับโมเดลแบบง่ายได้
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))