【问题标题】:Similarity algorithm (mathematics) of sampled signals采样信号的相似度算法(数学)
【发布时间】:2026-01-29 18:00:01
【问题描述】:

假设我已经对一些信号进行了采样,并为每个信号构建了一个样本向量。计算这些向量的(不)相似度的最有效方法是什么?请注意,采样的偏移量不能计算在内,例如 sin 和 cos 信号的采样向量应该被认为是相似的,因为它们在顺序上是完全一样的。

有一种简单的方法可以做到这一点,即“滚动”另一个向量的单位,计算每个滚动点的欧几里德距离,最后选择最佳匹配(最小距离)。这个解决方案工作得很好,因为我唯一的目标是从向量池中找到输入信号最相似的样本向量。

但是,当向量的维数增长时,上述解决方案也非常无效。与 N 维向量的“非顺序向量匹配”相比,顺序匹配的向量距离计算要多 N 倍。

是否有任何更高/更好的数学/算法来比较具有不同偏移量的两个序列?

这方面的用例是使用 SOM 进行序列相似性可视化。

编辑:比较每个向量的积分和熵怎么样?它们都是“序列安全的”(= 时不变的?)并且计算速度非常快,但我怀疑它们本身是否足以区分所有可能的信号。除了这些,还有什么可以使用的吗?

EDIT2: Victor Zamanian 的回复不是直接的答案,但它给了我一个可能的想法。解决方案可能是通过计算它们的傅里叶变换系数并将它们插入到样本向量中来对原始信号进行采样。第一个元素 (X_0) 是信号的平均值或“水平”,随后的 (X_n) 可直接用于比较与其他样本向量的相似性。 n 越小,它对相似性计算的影响就越大,因为用 FT 计算的系数越多,FT 信号的表示就越准确。这带来了一个额外的问题:

假设我们有 FT-6 采样向量(值刚刚从天而降)

  • X = {4, 15, 10, 8, 11, 7}
  • Y = {4, 16, 9, 15, 62, 7}

这些向量的相似度值可以这样计算:|16-15| + (|10 - 9| / 2 ) + (|8 - 15| / 3) + (|11-62| / 4 ) + (|7-7| / 5)

那些加粗的是附加问题。是否有一些系数/其他方法可以知道每个 FT 系数对与其他系数的相似性有多大影响?

【问题讨论】:

  • 我可能误解了最后一部分,但在我看来,这些大胆的分母并不本能地代表频域中两个信号之间的差异。 FT系数|C_k|仅仅是 k 处频率的幅度。也许您可以计算两个 DFT 中频率幅度本身之间的差异?并将其存储在一个新的向量中?甚至可能对该向量中的值求和?这可能取决于也可能不取决于您对哪种差异感兴趣。但我当然不是专家!不要把我的话当真! :-)

标签: algorithm math vectorization som self-organizing-maps


【解决方案1】:

如果我正确理解您的问题,也许您会对某种类型的cross-correlation 实现感兴趣?我不确定这是否是最有效的做法或是否符合目的,但我想我会提到它,因为它看起来很相关。

编辑:也许Fast Fourier Transform (FFT) 可能是一个选项?傅立叶变换非常适合区分信号,我相信也有助于找到相似的信号。例如。正弦波和余弦波在实平面上是相同的,只是具有不同的虚部(相位)。 FFT 可以在 O(N log N) 内完成。

【讨论】:

  • 感谢您的回复!取自*“该公式实质上是沿 x 轴滑动 g 函数,计算它们在每个位置的乘积的积分。”所以这个方法和我的解决方案一样“滑动”,但计算更复杂。所以这种方法还不是更好的解决方案。
  • 哦,好吧。觉得值得一试。 :) 我确实看到了一些结果,比如“matlab 中的快速互相关”和类似的东西。所以也许有可用的优化实现。抱歉,我无法提供更多帮助!
  • 谢谢!现在我明白了!我可以通过找到它们的傅立叶系数来采样所有信号。获得的样本向量将自动是时不变的,并且它们的相似度计算起来很简单!这正是我一直在寻找的那种“Heureka”!谢谢!
【解决方案2】:

谷歌“翻译不变信号分类”你会发现likethese的东西。

【讨论】:

  • 谢谢! Darvishi 的方法也在计算每个班次的相似度,所以这不是我想要的。熊等人的看起来很复杂,但我会研究一下。尽管如此,我还是得到了一些不错的术语来谷歌:)