假设我有一个信号,它包含几个高度大致相等的脉冲,我必须将其与峰值的预期位置相关联,以找到该信号相对于参考信号的偏移,参考信号可能仅包含脉冲。
可能我会做一些事情,比如计算两者之间的互相关,也许在一些归一化之后,然后读取偏移作为最大值。
现在假设信号已经过预处理,我只能访问检测到的局部最大值的位置。由于噪声,一些峰值可能未被检测到,而其他峰值可能在真正没有脉搏的地方被检测到。更常见的是,除了全局偏移之外,检测到的最大值在位置上也有独立的进一步误差。
我总是能做的,就是把这个位置列表,把它变成一个大小为 1(比如说)的脉冲序列,在一个大阵列中中间有 0,用一些内核卷积它,大到足以容纳不确定的个体位置,但足够小以保持连续脉冲大部分分离,并与参考信号的预期位置进行互相关,变成一个阵列。
然而,是否有一种很好的算法可以在不将其转换为信号的情况下执行此操作,即仅比较两个列表,一个与局部最大值,另一个与参考位置?例如,当信号具有非常高的分辨率时,这可能很有用,因此必须将非常稀疏的信号变为非常大的阵列。
编辑作为一个具体的例子,假设参考文献说我们有最大值
测量值为
例如,我可以采用一长串零来插入域,在对应于 100、200 等的参考位置处有一个 1,在对应于 181.7、366.6 等的位置处有一个 1,对其中一个进行卷积(或两者)具有一些点扩散函数,例如标准偏差高达约 100 左右的高斯。然后我可以尝试取两者之间的互相关,以找到全局相对偏移,如果噪声不是太差的话。
有没有一种方法可以在不将位置扩展到某种密集阵列的情况下实现相同的目标?
或者,考虑到可能存在误报和误报,什么是识别特定参考点和检测到的最大值之间的最佳匹配的好算法?
在示例中,匹配可以是
100 - not detected
200 - 181.7
400 - 366.6
480.0 false local maximum
1000 - 971.5
1600 - 1559.1
- 1821.4 false local maximum
2000 - 1981.4