将频谱图存储为可与之比较的数据结构的最佳方法是什么?

时间:2010-06-27 20:44:26

标签: database hash substring shazam spectrogram

我创建了一个类似于Shazam的过程,它创建了给定声音片段的Spectrogram。我试图找出一种方法将这些数据存储到数据库中,以便我可以对它进行比较。 (我不需要实际代码,只需要过程中的概念性帮助)

对于那些不熟悉频谱图的人来说,它是x轴上的时间图和y轴上的频率图。我需要一种以可以进行比较的方式保存这些数据的方法。此外,我不能简单地从左到右创建一个长的频率值,因为当尝试使用大型数据集(基本上是N ^ 2子字符串比较)进行搜索时,这会成为时间复杂度问题。

基本上我正在考虑在声音片段上创建某种哈希并将数据保存为哈希的trie或后缀树,但我不确定如何对它进行比较。

非常感谢任何想法。

3 个答案:

答案 0 :(得分:2)

这是一个2D数组。如果大多数数据为0.0,则可能是稀疏

我使用ROOT直方图(比如TH2F)来避免必须管理所有边缘情况等等,尽管几乎任何科学库都应该支持适当的数据结构。 ROOT支持至少两种直方图相似性度量(Chi squaredKolmogorov),可以进行定量比较。

答案 1 :(得分:1)

您可以将其存储为原始2D阵列,否则您需要进行更高级别的特征提取(轨道间距轮廓等)以提取重要特征,然后将其用于比较目的。

答案 2 :(得分:1)

散列的问题是你需要紧密匹配,而不是精确匹配 - 我想到的是在谱图中提取局部峰值的(时间,频率)元组然后将它们放在{{{ 3}}。

要进行搜索,您可以提取n个最高峰(4 - 8?),然后在空间数据库中搜索最接近的峰,找到最合适的匹配。