python tensorflow信号处理MFCC特性

python tensorflow signal processing MFCC features

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

我已经尝试了上述方法和 "compute first 13 directly" 方法,结果却大不相同:

先全部80,再取前13:

直接计算前13:

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

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

实际意义:

  • "Calculate 13 coefficients directly":将频率范围[80.0, 7600.0]分成13个bin。最终,你会得到13个反映相应频谱振幅的系数(见MFCC algorithm

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