3

我之前发现过类似的帖子,但没有什么能真正回答这个问题。

在我的指纹识别中,我生成了一个包含 5 个整数的记录集。例如:33,42,88,121,194

这些对应于对于特定音乐样本具有最高幅度的频率。例如:对于 30ms 的音频样本,我有以下频率的桶:

0-40

40-80

80-120

120-180

180-250

我试图产生一个散列(一个宽容的),它可能会为 33,42,88,121,194 产生与它所说的相同的散列

33,43,88,122,195

如果频率存在细微差异,则会形成类似的散列。

第一关是这个 LSH 吗?正如我所读到的,这最适合音频指纹识别。

如果没有,任何人都可以为可能做我正在寻找的功能提供一些伪代码或 c# 吗?我已经阅读了 LSH 和 matlab 和 perl 的实现,但我不理解它们,所以发布指向它们的链接不会对我有太大帮助。

再次感谢!

4

1 回答 1

0

这可能与此重复:比较两个频谱图以找到它们匹配算法的偏移量,看起来您正在尝试做的是为样本中峰值的粗略分布生成直方图。有几种方法可以做到这一点,另一个“示例”在这里:比较两个频谱图以找到它们匹配算法的偏移量

这样做的一种方法是使用峰值数据及其分布(随时间)的快速傅立叶变换来产生蒸馏形式的样品的粗略等价物。要做到这一点,你做的事情大致类似于:

  1. 将样本分成一些离散的部分(比如 1 秒)
  2. 为每个样本部分开发一个近似样本的指纹(比如取 5-7 个高低峰,对它们进行归一化,然后对它们进行散列
  3. 您现在可以单独保留每个指纹(在一个集合中),或者根据您的需要对序列运行转换以生成单个指纹。大多数情况下,您只需将序列附加在一起即可以 1 秒的间隔获得线性指纹。

要比较指纹,您对第二个样本运行相同的过程,然后使用 Diff 算法比较两者,使用一些“模糊”来确定它们的接近程度。您将需要在两个维度上比较指纹、离散指纹的顺序以及每个样本的总体差异。

这篇关于制作与 Shazaam 等效的粗略 Java 的文章不久前发布:http ://www.redcode.nl/blog/2010/06/creating-shazam-in-java/ ,可能对您有所帮助。

于 2012-02-01T01:42:47.700 回答