如何将 Mel 频谱图拆分为不同频率范围的子带

How do I split Mel Spectrogram into sub-bands of different frequency ranges

我对音频信号处理还很陌生,但是我遇到了这个作业,但遇到了困难。

我想要实现的是,假设我已经使用 Mel Spectrogram 对语音音频进行了特征提取,频率范围为 Mel 标度(300Hz,3400Hz)。 我怎样才能进一步将其分成 5 个不重叠的子带,例如

频段 1:[300Hz,627Hz]

频段 2:[628Hz,1060Hz]

频段 3:[1061Hz,1633Hz]

频段 4:[1634Hz,2393Hz]

频段 5:[2394Hz,3400Hz]

我一直试图到处寻找实际实施的例子,但找不到。

如果有人能给我一些建议或指导我正确的方向,我将不胜感激。

由于您的问题基于作业,因此此答案将提供您需要的工具(不是实际答案!)。

假设您像这里一样使用了 librosa 的 Mel Spectrogram:
https://librosa.org/doc/latest/generated/librosa.feature.melspectrogram.html

然后,您将获得频谱图的二维 numpy 数组。
对于上面的例子,使用 S.shape 给出 (128, 230)

这意味着产生了128个mel-bands(频率分组)和230个时间分组。

然后您需要做一些 array slicing 以获得正确的波段。示例:S[0:5] 获取所有时间步长的前五个波段。您需要计算一下哪些波段代表哪些频率。