algorithm - 采样信号的相似度算法(数学)

标签 algorithm math vectorization som self-organizing-maps

假设我对一些信号进行了采样并为每个信号构建了一个样本向量。计算这些向量的(不)相似性的最有效方法是什么?请注意,采样的偏移量不得计算在内,例如 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 系数对与其他系数相关的相似性有多大影响?

最佳答案

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

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

关于algorithm - 采样信号的相似度算法(数学),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087045/

相关文章:

python - 重复,但在 numpy 中以可变大小的 block

javascript - 如何找到多重集的所有分区,其中每个部分都有不同的元素?

algorithm - 循环关系的最坏情况和最佳情况运行时复杂度 T(n) = 2T(n/2) + T(n-1) + 常数

javascript - 我可以对变量调用 ".log"

c++ - 检查鼠标是否在旋转的 Sprite 上方? C++

c - 为什么 Clang 不向量化 big-int XOR?

c# - 错误 : Specified key is not a valid size for this algorithm

java - 优化 digit <= 2 算法(类似于 Project Euler 303)

multithreading - 用于有向图中循环检测的多线程算法

Python - 如何生成成对汉明距离矩阵