首先,我必须强调,我不是编码专业的,只是信号处理的专业人士。我是一名化学家,碰巧正在从事一个涉及两者的项目。因此,请提前原谅我的问题,如果我的问题措辞不好,或者对您来说似乎微不足道(此外,我不是以英语为母语的人)。我有几个彼此不直接相关的问题,所以当我得到答案时,我可能会打开几个线程。
因此,我正在开展一个涉及激光干涉图案的项目,更重要的是,将这种图案沿水平 (x) 轴移动。这是我通过相机观察到的典型衍射图案:
我的目标是精确测量在我的实验过程中发生的这种模式的转变。为了更好地理解我的意思,我附上了一个信号从另一个偏移的例子。请记住,这里呈现的偏移大约为 40 像素,被认为是巨大的,并且在我的工作中永远不会真正发生,我通常观察到大约 0-5 像素的偏移。
为了实现这个目标,我编写了一个 C# 代码来计算两个数组之间的互相关(我通过计算每个 768 像素行旁边的信号的平均值,将我的图像缩减为一条 1024 像素行)。已使用此公式(使用 Accord 框架)计算了互相关:
corr(a, b) = ifft(fft(a_and_zeros) * conj(fft(b_and_zeros)))
.
这个特定的数字是在对两个相同的图像进行互相关时获得的(我想我可以称之为自相关,但我不确定,而且正如预期的那样,我发现了 0 个像素的偏移)。请记住,该数字是对互相关结果数组进行修改的产物,因为应用快速傅里叶变换会导致峰值在数组边缘“切成两半”。
如您所见,峰很尖,我认为应该是平滑的。当我想观察低偏移时,这是一个问题,因为峰值的“锐度”隐藏了真正的最大值:
当偏移变大时问题就消失了,但是我无法解释的一个非常尖锐的峰值的存在被暴露出来:
请注意,这个峰值不是来自我修改数组以使峰值居中,如果我不修改结果,它会出现在边缘。
这最终导致我的结果对于低班次(也就是我关心的班次)不现实,如下所示:
如您所见,事情并不完全正确(这是项目的开始,因此实验设置远非完美,代码也是如此),但趋势是存在的,我真的能够解决这个高峰问题再进一步。
所以我来找你是希望找出我的实验为什么会这样,以及我能做些什么!是否有与互相关工作方式或其他原因有关的原因?到目前为止,我在代码中找不到任何问题。
非常感谢 !