我有同一个天文物体的两个光谱。基本问题是:如何计算这些光谱之间的相对位移,并在该位移上获得准确的误差?
如果您仍在我身边,请提供更多详细信息。每个光谱将是一个具有x值(波长),y值(通量)和误差的数组。波长偏移将是子像素。假设像素是规则间隔的,并且将只有一个波长偏移应用于整个光谱。因此,最终答案将类似于:0.35 +/- 0.25像素。
这两个光谱将是许多无特征的连续体,它们被一些不容易建模(且不是周期性的)的相当复杂的吸收特征(凹陷)所打断。我想找到一种直接比较两个光谱的方法。
每个人的第一个本能是进行互相关,但是随着子像素的移动,您将不得不在光谱之间进行插值(首先要进行平滑处理?),而且,错误似乎很难纠正。
我目前的方法是通过与高斯核卷积来平滑数据,然后对平滑结果进行样条化处理,并比较两个样条化谱线-但我不信任它(尤其是错误)。
有人知道正确执行此操作的方法吗?
这是一个简短的python程序,将产生两个可以播放的玩具光谱,这些光谱偏移了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))