Pri*_*kar 2 python audio feature-extraction mfcc librosa
我正在尝试使用以下代码从具有 13 个 MFCC 的音频文件中提取 MFCC 功能:
import librosa as l
x, sr = l.load('/home/user/Data/Audio/Tracks/Dev/FS_P01_dev_001.wav', sr = 8000)
n_fft = int(sr * 0.02)
hop_length = n_fft // 2
mfccs = l.feature.mfcc(x, sr=sr, n_mfcc=13, hop_length=hop_length, n_fft=n_fft)
Run Code Online (Sandbox Code Playgroud)
但它显示了这个警告。这是什么意思,我该如何摆脱它?
UserWarning: Empty filters detected in mel frequency basis. Some channels will produce empty responses. Try increasing your sampling rate (and fmax) or reducing n_mels.
warnings.warn('Empty filters detected in mel frequency basis. '
Run Code Online (Sandbox Code Playgroud)
MFCC 基于梅尔谱图,而梅尔谱图又通常基于离散傅立叶变换 (DFT)。傅里叶变换从时域获取信号并将其转换为频域。这意味着 N 个时域样本被转换为 N 个频域值(注意对称性——你实际上只有 N/2 个频率值)。就像时域样本在线性时间尺度上一样,频域样本在线性频率尺度上。相比之下,梅尔尺度不是线性的,而是(大约)对数的。
您需要了解以下有关傅立叶变换的信息。当您有一个 F_s = 8000Hz 且窗口长度为 N 的信号时:
- 对信号(的窗口摘录)进行傅立叶变换。
- 使用三角形重叠窗口将上面获得的频谱功率映射到梅尔标度上。
- 获取每个 mel 频率的功率对数。
- 对 mel 对数幂列表进行离散余弦变换,就好像它是一个信号一样。
- MFCC 是所得频谱的幅度。
在第 2 步中,您必须将 DFT 生成的任何内容映射到不同的比例,即梅尔比例。如果 DFT 分辨率 ?f 太低而无法将功率值映射到(可能)更精细的梅尔尺度,这将不起作用。把它想象成一个图像:当你有一个粗糙的图像时,你不能通过将它映射到更高的分辨率来提高质量。这意味着,您必须确保您的 DFT 分辨率 ?f 足以满足您要使用的梅尔频段。
为确保这一点,您必须使用更长的窗口 N 或更少的 mel band n_mfcc。其核心问题是,您不能同时拥有高频率分辨率和高时间分辨率。
另请参阅有关 FFT 参数的 IRCAM 介绍。
| 归档时间: |
|
| 查看次数: |
2287 次 |
| 最近记录: |