我有同一个天文物体的两个光谱。基本问题是:如何计算这些光谱之间的相对偏移并获得该偏移的准确误差?
如果您还和我在一起,请提供更多详细信息。每个光谱将是一个具有 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))