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_hertz
和 upper_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(粗略地说,包络计算的背面)。如果您对人类语音识别感兴趣,这是有道理的,因为您可以专注于更细微的变化,同时忽略更高的频谱(从我们的听觉系统角度来看,这不太有趣)。
我正在测试 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_hertz
和 upper_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(粗略地说,包络计算的背面)。如果您对人类语音识别感兴趣,这是有道理的,因为您可以专注于更细微的变化,同时忽略更高的频谱(从我们的听觉系统角度来看,这不太有趣)。