【问题标题】:MFCC - 13 CoefficientsMFCC - 13 个系数
【发布时间】:2012-11-28 10:51:00
【问题描述】:

我正在尝试根据我找到的这篇论文 (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 个值吗?或者,我得到总能量了吗?

我希望有人可以帮助我。

【问题讨论】:

标签: signal-processing speech-recognition mfcc


【解决方案1】:

不,你错了。

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

你用 FFT 做的都是错的。

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

http://cmusphinx.sourceforge.net

【讨论】:

  • 嘿,非常感谢您的回复。所以你的意思是,我对块进行 FFT,然后执行等式: Mel(f) = 2595 * log10(1 + f / 700) 现在 f 是 FFT?我需要从头开始,我不允许使用代码
  • 我不知道你所说的“做方程式”是什么意思。你一定用过其他动词。 Mel scale 用于构建 FFT 域中的 filterbank 三角滤波器。
  • 嘿,谢谢你的回复。我已将数据拆分为“帧”,所以我是否为每个块取 13 个系数?希望你能回复,谢谢:)
  • 我不能留下少于 15 个符号的回复,所以你不会得到你明显问题的答案。
  • 我对您刚刚写的内容感到困惑。我唯一需要知道的是我已经将信号分成帧,n = 100,m = 256(我相信)这会产生大约 390 个块,所以,每个块有 13 个系数还是整个块只有 13 个系数声音文件?
【解决方案2】:

在寻找类似的东西几天后,我偶然发现了一个非常有用的关于如何获得 MFC 系数的教程: Mel Frequency Cepstral Coefficient (MFCC) tutorial

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

【讨论】:

  • @loanna 谢谢你 :) 这很有用!你做 DSP / 语音识别吗?
【解决方案3】:

我对你刚刚写的内容感到困惑。我唯一需要知道的是 我已将信号分成帧,n = 100,m = 256(我相信) 它产生大约 390 个块,那么,是否有 13 个系数 每个块或整个声音文件只有 13 个?

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

而且你计算mfcc系数的方法是错误的,你应该按照你提到的1-6个步骤。

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

步骤 2) 为整个声音文件构建框架以获得许多块

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2011-10-19
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2017-07-07
    • 2017-08-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多