确定发生最具建设性干扰的偏移

时间:2014-04-14 09:02:10

标签: algorithm language-agnostic waveform

我有两个数据数组:

我想将这些相似的图形对齐在一起(通过向任一阵列添加偏移量):

基本上我想要的是最具建设性的干扰,如两个波一起产生相同的波但振幅更大时所示:

这也与发现最具破坏性的干扰相同,但其中一个阵列必须如图所示反转:

请注意,第二波被反转(峰值变为低谷/反之亦然)。

实际数据不仅包括一个主峰和一个小峰和谷,而且包括许多,并且可能没有任何明显的峰值。我已经使图中的数据更简单,以显示我希望数据是如何对齐的。

我在考虑一些循环,例如:

biggest = 0
loop from -10 to 10 as offset
    count = 0
    loop through array1 as ar1
        loop through array2 as ar2
            count += array1[ar1] + array2[ar2 - offset]
    replace biggest with count if count/sizeof(array1) > biggest

但是,这需要循环遍历两个数组的偏移和循环。我真正的数组定义非常大,这可能需要很长时间。

我如何确定将data1与data2匹配所需的偏移?

JSFiddle(请注意,这与语言无关,我想比实际代码更了解算法)

2 个答案:

答案 0 :(得分:2)

使用Convolution查看Cross-correlationFast Fourier Transformation的计算结果。这就是它在现实生活中的应用方式。

答案 1 :(得分:-1)

如果(且仅当)您的数据具有非常可识别的峰值,您可以做到,人类会做什么:匹配峰值:Fiddle

import和part是function matchData()

改进后的版本会搜索N max和min spikes,然后计算平均偏移量。