Librosa mel 滤波器组递减三角形

Jac*_*man 3 matplotlib mfcc librosa

我有点难以理解 MFCC。

从我读到的 mel 滤波器组应该是一系列三角形,它们变得更宽并且它们的峰值在同一个地方。像这样...

在此处输入图片说明

但是,当我使用 librosa 计算 mel 滤波器组时,我得到...

在此处输入图片说明

代码:

import librosa
import matplotlib.pyplot as plt

sr = 16000
mel_basis = librosa.filters.mel(sr=sr, n_fft=512, n_mels=10,fmin=0, fmax=sr / 2)
plt.plot(mel_basis)
Run Code Online (Sandbox Code Playgroud)

Jac*_*man 5

我现在更有见识了,我觉得给出的答案并不完全正确,所以我想我应该回答我自己的问题。

librosa.filters.mel 返回一个形状为 (n_mels, n_fft/2 +1) 的矩阵。这意味着矩阵中的每一行都是一个 mel。列是梅尔滤波器组每个频率的权重。频率以循环数最多 n_fft 的数量表示,由于混叠(奈奎斯特定理),我们丢弃了其中的一半。

这意味着为了正确绘制mels,需要转置矩阵。因为我们实际上想要 N 个不同的图,其中 N 是梅尔的数量。

plt.plot(mel.T)

这给出了以下图像: 在此处输入图片说明

请注意,这组 mel 滤波器组仍然不是预期的。这是因为 Librosa 使用了标准化版本的 mel-filter bank,这意味着每个 mel 的面积为 1,而不是传统的等高 1。从 librosa 返回的矩阵可以转换为等高的 mel-过滤组:

mels /= np.max(mels, axis=-1)[:, None]

然后情节是这样的:在此处输入图片说明