2010-07-04 115 views
15

我想获得两段音频之间的某种距离度量。例如,我想比较动物的声音和模仿动物的人的声音,然后返回声音的相似程度。两个音频序列之间的感知相似性

这似乎是一个难题。什么是最好的方法来处理它?我正在考虑从音频信号中提取几个特征,然后在这些特征上做一个欧几里德距离或余弦相似性(或类似的东西)。什么样的特征容易提取并且有用于确定声音之间的感知差异?我看到了一些关于Ahazam如何使用散列的东西,但这看起来像是一个不同的问题,因为这两个音频是完全相同的,并且还有噪声,而在这种情况下,这两个音频不是相同的,他们只是知觉上相似)

回答

3

我建议寻找频谱分析。虽然这并不像你最想要的那么直截了当,但我期望将音频分解为它的基础频率将提供一些非常有用的数据进行分析。看看这link

+0

谢谢。我可以尝试生成一些不同声音的频谱,看看相似的声音是否会产生类似的频谱,而不同的声音则不会。根据我对维基百科链接的理解,频谱必须使用傅里叶变换创建? – Bart 2010-07-05 09:33:57

3

你的第一步肯定会采取声波Fourier Transform(金融时报)。如果您对频率随时间变化的数据执行FT,您可以比较噪音过程中某些关键频率的频率。

也许你也可以从另一个减去一个波,以获得一种逐步的差分函数。假设模拟噪声作为原始噪声遵循相同的频率和音调趋势,您可以计算出最适合差分函数点的线。将最佳拟合线与原始声波的最佳拟合线进行比较,您可以将趋势线平均化,作为比较的基础。当然,这将是一个非常松散的比较方法。

- 1. hz/ms,也许?我不熟悉在这里工作的单位数量级,我一般在毫微微到毫微米范围内工作。

- 2.只要∀ Δ T,Δ 节距/ΔŤ& Δ 频率/Δ T分别一些公差 X内。

- 编辑格式化,因为我实际上忘了写完整的答案。

+0

你的意思是生成一个正确的频谱?当他们把它对准原声音波时,差分函数的线不会是0吗? – Bart 2010-07-05 09:39:09

+0

是的,我的意思是生成一个频谱。用这么多的话说。 :) 如果比较的最佳拟合线是基于两个声波的平均值,不,我不相信它只是0.可能是错误的! – Andy 2010-07-05 16:20:19

8

用于比较相似的一组声音的方法是在计算机科学的研究称为基于内容的音频IndexingRetrievalFingerprinting

这样做的一种方法是:信号处理的每个音频文件以提取特征,比如音调随时间,频率谱,自相关,动态范围,瞬变等

  1. 运行几个位。

  2. 把所有的功能为每个音频文件转换成一个多维数组和转储每个多维数组到数据库

  3. 使用优化技术(如gradient descent),以找到一个给定的最佳匹配音频文件在你的数据库中的多维数据。

使这项工作很好的诀窍是选择哪些功能。自动执行此操作并取得良好效果可能会非常棘手。在Pandora这些人做得很好,在我看来他们有最好的相似度匹配。他们通过手工编码矢量,通过让人们听音乐并以多种不同方式对它们进行评分。请参阅Music Genome ProjectList of Music Genome Project attributes了解更多信息。

对于自动测量距离,有几个项目是做这样的东西,包括marsysasMusicBrainz,和EchoNest

Echonest有我在这个空间中看到的simplest APIs之一。非常容易上手。

相关问题