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)
我现在更有见识了,我觉得给出的答案并不完全正确,所以我想我应该回答我自己的问题。
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]
| 归档时间: |
|
| 查看次数: |
3902 次 |
| 最近记录: |