如果只有本地 argmax 数据可用,则查找高分辨率噪声信号的变化

计算科学 信号处理
2021-12-24 15:36:41

假设我有一个信号,它包含几个高度大致相等的脉冲,我必须将其与峰值的预期位置相关联,以找到该信号相对于参考信号的偏移,参考信号可能仅包含脉冲。

可能我会做一些事情,比如计算两者之间的互相关,也许在一些归一化之后,然后读取偏移作为最大值。

现在假设信号已经过预处理,我只能访问检测到的局部最大值的位置。由于噪声,一些峰值可能未被检测到,而其他峰值可能在真正没有脉搏的地方被检测到。更常见的是,除了全局偏移之外,检测到的最大值在位置上也有独立的进一步误差。

我总是能做的,就是把这个位置列表,把它变成一个大小为 1(比如说)的脉冲序列,在一个大阵列中中间有 0,用一些内核卷积它,大到足以容纳不确定的个体位置,但足够小以保持连续脉冲大部分分离,并与参考信号的预期位置进行互相关,变成一个阵列。

然而,是否有一种很好的算法可以在不将其转换为信号的情况下执行此操作,即仅比较两个列表,一个与局部最大值,另一个与参考位置?例如,当信号具有非常高的分辨率时,这可能很有用,因此必须将非常稀疏的信号变为非常大的阵列。

编辑作为一个具体的例子,假设参考文献说我们有最大值

100,200,400,1000,1200,1600,2000,

测量值为

181.7,366.6,480.0,971.5,1559.1,1821.4,1981.4,

例如,我可以采用一长串零来插入域,在对应于 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
1个回答

如果我理解正确,您有一个带有脉冲的周期性参考信号,以及一个局部最大值列表。从每个局部最大值,搜索最近的参考信号脉冲并测量距离(偏移)。如果您的参考信号和测量信号的频率相同,那么这种偏移应该始终指向相同的方向。

如果你有所有的局部偏移,你可以对它们进行平均,以找到两个信号整体偏移的良好估计值。

我认为,互相关,可能与平滑,是要走的路。您遍历所有可能的偏移量si在你的两个数据集之间xi,yi.

Cj=i=1Nxiyisj

这里Cj应该衡量两个数据集与给定班次的匹配程度sj. 对于一个完美的数据集,你只会得到一个大的 C_j,其他的都是零。由于您的数据中有一些噪音,您可能必须事先平滑峰值,或者使用原始数据集而不仅仅是峰值列表。

对两个信号进行平滑处理的次数越多,上述方法就应该越稳健。