Что является предупреждением 'Пустые фильтры обнаружены на частоте плавления' около? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь извлечь функции MFCC из аудиофайла с 13 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)

Но это показывает это предупреждение. Что это значит и как от этого избавиться?

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. '

1 Ответ

1 голос
/ 08 июля 2019

MFCC основаны на спектрограммах плавления, которые, в свою очередь, обычно основаны на дискретном преобразовании Фурье (DFT) .Преобразование Фурье принимает сигнал из временной области и преобразует его в частотную область.Это означает, что N выборок во временной области преобразуются в N значений в частотной области (обратите внимание на симметрию - у вас фактически есть только N / 2 значений частоты).Подобно тому, как выборки во временной области находятся на линейной шкале времени, выборки в частотной области находятся на линейной шкале частот.Напротив, mel-scale не линейный, а (приблизительно) логарифмический.

Вам необходимо знать следующее о преобразовании Фурье.Когда у вас есть сигнал с F_s = 8000 Гц и длиной окна N:

  • Количество различных частотных бинов равно: SL = N / 2
  • Максимальная частота, которую вы можете кодироватьэто: F_max = F_s / 2 ( Найквист-Шеннон )
  • Разрешение по частоте равно: Δf = F_max / SL

Теперь рассмотрим, как MFCCs вычисляются (см. Также здесь ):

  1. Возьмите преобразование Фурье (оконный фрагмент) сигнала.
  2. Картазначения спектра, полученные выше, на шкалу плавления, используя треугольные перекрывающиеся окна.
  3. Возьмите логарифмы степеней на каждой из частот плавления.
  4. Возьмите дискретное косинусное преобразование спискамощностей логарифма, как если бы это был сигнал.
  5. MFCC - это амплитуды результирующего спектра.

На шаге 2 вы должны отобразить любой ваш DFTпроизводится в другом масштабе, в мелком масштабе.Если разрешение DFT Δf слишком низкое для сопоставления значений мощности с (потенциально) более мелкой шкалой плавления, это не работает.Думайте об этом как об изображении: если у вас грубое изображение, вы не можете повысить качество, сопоставив его с более высоким разрешением.Это означает, что вы должны убедиться, что ваше разрешение DFT Δf достаточно хорошо для тех полос мель, которые вы хотите использовать.

Чтобы гарантировать это, вы должны либо использовать более длинное окно N или меньше полос мель n_mfcc,Суть проблемы в том, что у вас не может быть одновременно: высокочастотное разрешение и одновременно высокое временное разрешение.

См. Также IRCAM Intro о параметрах FFT .

...