1

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

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

本质上,我正在考虑在声音剪辑上创建某种散列,并将数据保存为散列的 trie 或后缀树,但我不确定当时如何对其进行比较。

任何想法将不胜感激。

4

3 回答 3

2

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

我会使用ROOT直方图(比如TH2F)来避免必须管理所有边缘情况等,尽管几乎所有科学库都应该支持适当的数据结构。ROOT 支持至少两个直方图相似性度量(卡方Kolmogorov),这将允许您进行定量比较。

于 2010-06-27T22:20:13.217 回答
1

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

于 2010-06-27T20:49:48.123 回答
1

哈希的问题是您需要紧密匹配,而不是完全匹配 - 我正在考虑提取频谱图中局部峰值的(时间,频率)元组,然后将它们放入http://en .wikipedia.org/wiki/Spatial_database

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

于 2010-06-27T20:55:05.490 回答