1

我正在尝试根据我找到的这篇论文(http://arxiv.org/pdf/1003.4083.pdf)计算 MFCC 算法,所以到目前为止我所做的是:

步骤 1) 预加重

步骤 2) 构图

步骤 3) 汉明窗

步骤 4) 快速傅里叶变换

步骤 5) 梅尔滤波器组处理

步骤 6):离散余弦变换

基本上,我使用了 Mel Bank 滤波器并将它们与实际的原始信号相乘。然后我对这些结果执行 FFT,如下所示:

帧 1 上的 FFT:

在此处输入图像描述

然后我计算了 FFT 的 DCT,结果如下所示:

帧 1 上的 DCT:

在此处输入图像描述

到目前为止这看起来正确吗?有没有办法让我检查一下,以便我知道我正朝着正确的方向前进?

另外,我需要获得 13 个系数,但我不知道如何确定要获得哪些。我得到 256 个值,那么我要取前 13 个值吗?或者,我得到总能量了吗?

我希望有一个人可以帮助我。

4

3 回答 3

9

经过几天的类似搜索,我偶然发现了一个非常有用的关于如何获得 MFC 系数的教程:梅尔频率倒谱系数 (MFCC) 教程

(虽然线程很旧,但我希望答案可能对未来的读者有所帮助)

于 2013-03-13T12:12:58.937 回答
4

我对你刚刚写的东西感到困惑。我唯一需要知道的是我已将信号分成帧,n = 100,m = 256(我相信)这会产生大约 390 个块,所以,每个块有 13 个系数还是整个块只有 13 个系数声音?

答案是每个块有 13 个系数,而不是整个声音文件。

并且您计算 mfcc 系数的方法是错误的,您应该按照您提到的 1-6 个步骤进行操作。

步骤 1) 对整个声音文件进行预加重。

步骤 2) 对整个声音文件进行构图以获得许多块

步骤 3) 每个块的汉明窗口

步骤 4) 每个块的快速傅里叶变换

步骤 5) 每个块的 Mel 滤波器组处理

步骤 6):每个块的离散余弦变换

于 2013-12-27T15:52:24.293 回答
2

不,你错了。

您需要在 FFT 之后计算 mel 滤波器组能量的对数,然后才应用 DCT。滤波器组的能量数量应该在 20 或 40 左右,在 DCT 之后你应该得到 20 或 40 个数字,然后取前 13 个。

您对 FFT 所做的一切都是错误的。

您可能想阅读一些 MFCC 代码而不是从头开始做某事,那里有很多实现,例如在 sphinxbase 中:

http://cmusphinx.sourceforge.net

于 2012-12-11T06:28:30.783 回答