8

给定两个以数字格式录制的声音,是否有一种算法可以比较两者并返回相似系数?

4

4 回答 4

4

鉴于您的澄清,我认为您正在寻找的内容属于语音识别算法

即使您只是在寻找相似度的度量而不是试图将语音转换为文本,但概念仍然是相同的,如果大部分算法非常有用,我不会感到惊讶。

但是,您必须更正式、更精确地定义这个相似系数才能到达任何地方。

编辑:我相信语音识别算法会很有用,因为它们会抽象声音并与某些已知形式进行比较。从概念上讲,这可能与拍摄两个录音、提取它们并比较它们没有什么不同。

来自关于 HMM 的维基百科文章

“在语音识别中,隐马尔可夫模型将输出一系列 n 维实值向量(n 是一个小整数,例如 10),每 10 毫秒输出一个。向量将由倒谱系数组成,这是通过对语音的短时间窗口进行傅里叶变换并使用余弦变换对频谱进行去相关,然后获取第一个(最重要的)系数来获得的。”

因此,如果您对两个录音都运行这样的算法,您最终会得到代表录音的系数,并且可能更容易测量和建立两者之间的相似性。

但是现在你又遇到了定义“相似系数”的问题,引入狗和马并没有真正的帮助。

(它确实有点作用,但在评估算法和选择一个而不是另一个方面,你必须做得更好)。

于 2010-05-11T09:01:42.310 回答
4

我建议查看 HTK 语音识别工具包http://htk.eng.cam.ac.uk/,尤其是关于特征提取的部分。

我认为是好的指标的功能:

  • Mel-Cepstrum 系数(一般音色)
  • LPC(用于谐波)
于 2010-05-11T09:45:40.710 回答
3

有许多不同的算法——这个任务的通用名称是Speaker Identification——从这个维基百科页面开始,然后从那里开始工作:http ://en.wikipedia.org/wiki/Speaker_recognition

于 2010-05-11T07:52:53.323 回答
0

我不确定这是否适用于声音文件,但它让你知道如何继续我希望。这是如何在另一个图像中找到图案(图像)的基本方法。

您首先必须计算两个声音文件的 fft,然后进行相关。在公式中,它看起来像(伪代码):

fftSoundFile1 = fft(soundFile1);
fftConjSoundFile2 = conj(fft(soundFile2));
result_corr = real(ifft(soundFile1.*soundFile2));

其中 fft = 快速傅里叶变换,ifft = 逆, conj = 共轭复数。对声音文件的样本值执行 fft。然后 result_corr 向量中的峰值将为您提供高相关性的位置。请注意,在这种情况下,两个声音文件的大小必须相同,否则您必须将较短的声音文件放入 max(soundFileLength) 向量的文件中。

问候

编辑:.* 表示(在 matlab 风格中)一个组件明智的 mult,你不能做一个向量 mult!下一个编辑:请注意,您必须使用复数进行操作 - 但是那里有几个 Complex 类,所以我认为您不必为此烦恼。

于 2010-05-11T08:03:16.247 回答