【问题标题】:python tensorflow signal processing MFCC featurespython tensorflow 信号处理 MFCC 功能
【发布时间】:2020-06-15 00:47:44
【问题描述】:

我正在测试 tensorflow.signal 实现中的 MFCC 功能。根据示例 (https://www.tensorflow.org/api_docs/python/tf/signal/mfccs_from_log_mel_spectrograms),它正在计算所有 80 个 mfcc,然后取前 13 个。

我已经尝试了上述和“直接计算前 13 个”的方法,结果非常不同:

先拿80,再拿13:

直接计算前 13 个:

为什么会有很大的不同,如果我将这个作为特征传递给 CNN 或 RNN,我应该使用哪一个?

【问题讨论】:

    标签: python tensorflow audio signal-processing mfcc


    【解决方案1】:

    这是因为 MFCC 的性质。请记住,这些系数是在您通过链接代码中的lower_edge_hertzupper_edge_hertz 提供的梅尔标度上的频率范围内计算的。

    在实践中的含义:

    • “直接计算13个系数”:取频率范围[80.0, 7600.0],分成13个bin。最终,您将获得 13 个反映相应频谱幅度的系数(参见MFCC algorithm

    • “先全部80,再取13”:取频率范围[80.0, 7600.0],分成80个bin。现在,只取前 13 个系数。在实践中,这意味着您正在研究非常狭窄和细粒度的频谱,在这种情况下,大致在人类语音频率范围[80, 400] Hz(粗略地说,包络计算的背面)。如果您对人类语音识别感兴趣,这是有道理的,因为您可以专注于更细微的变化,而忽略更高的频谱(从我们的听觉系统的角度来看,这不太有趣)。

    【讨论】:

    • 这完全有道理!我怎么能忘记这件事。感谢您指出这一点。我想在所有情况下,使用我最终将使用的垃圾箱数量进行计算会更有意义,对吧?即,如果我只需要使用 13 个特征,则使用 13 个系数进行计算。
    • @TYZ 不,这取决于用例。如果您对人类语音识别感兴趣,那么关注人类的频率范围是有意义的。如果您做鸟类,那么您可能会对整个频谱感兴趣,并且它们的发声范围更广。换句话说,对于 ASR(自动语音识别),采用例如128 并抢先 40。或 30。视情况而定:)。
    • MFCC系数个数和mel bin个数不一样。
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多