같은 천체의 두 가지 스펙트럼이 있습니다. 중요한 질문은 이것입니다. 어떻게 이러한 스펙트럼들 사이의 상대적인 이동을 계산하고 그 이동에서 정확한 에러를 얻을 수 있습니까?
당신이 여전히 나와 함께 있다면 더 많은 세부 사항. 각 스펙트럼은 x 값 (파장), y 값 (플럭스) 및 오류가있는 배열입니다. 파장 이동은 서브 픽셀이 될 것입니다. 픽셀들이 규칙적으로 이격되고 전체 스펙트럼에 단일 파장 시프트 만이 적용될 것이라고 가정하자. 따라서 최종 답변은 0.35 +/- 0.25 픽셀입니다.
두 스펙트럼은 쉽게 모델링되지 않고 주기적이 아닌 다소 복잡한 흡수 특징 (딥)에 의해 특징이없는 연속체가 될 것입니다. 두 스펙트럼을 직접 비교하는 방법을 찾고 싶습니다.
모든 사람의 첫 번째 본능은 상호 상관을 수행하는 것이지만, 서브 픽셀 이동을 사용하면 스펙트럼을 먼저 보간해야합니다 (먼저 스무딩합니까?).
내 현재 접근 방식은 가우스 커널과 함께 데이터를 부드럽게 한 다음 부드러운 결과를 스플라인하고 두 개의 스플라인 스펙트럼을 비교하는 것입니다. 그러나 나는 그것을 믿지 않습니다 (특히 오류).
누구든지 이것을 올바르게하는 방법을 알고 있습니까?
여기에 당신이 가지고 놀 수있는 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))