Спектрограмма MFCC против спектрограммы Сципи

В настоящее время я работаю над сверточной нейронной сетью (CNN) и начал смотреть на различные графики спектрограмм:

введите описание изображения здесь

Что касается графика Либрозы (MFCC), спектрограмма сильно отличается от других графиков спектрограммы. Я взглянул на комментарий, размещенный здесь, в котором говорится о развернутой спектрограмме MFCC. Как выполнить задачу (разумный код Python), опубликованную решением, указанным там?

Кроме того, не пропустит ли этот график MFCC с низким разрешением какие-либо неприятности при прохождении изображений через CNN?

Любая помощь в выполнении кода Python, упомянутого здесь, будет искренне признательна!

Вот мой код Python для сравнения спектрограмм, а вот местоположение анализируемого wav-файла.

Код Python

# Load various imports
import os
import librosa
import librosa.display
import matplotlib.pyplot as plt

import scipy.io.wavfile
#24bit accessible version
import wavfile

plt.figure(figsize=(17, 30))

filename = 'AWCK AR AK 47 Attached.wav'
librosa_audio, librosa_sample_rate = librosa.load(filename, sr=None)
plt.subplot(4,1,1)
xmin = 0
plt.title('Original Audio - 24BIT')
fig_1 = plt.plot(librosa_audio)

sr = librosa_sample_rate

plt.subplot(4,1,2)
mfccs = librosa.feature.mfcc(y=librosa_audio, sr=librosa_sample_rate, n_mfcc=40)
librosa.display.specshow(mfccs, sr=librosa_sample_rate, x_axis='time', y_axis='hz')
plt.title('Librosa Plot')
print(mfccs.shape)


plt.subplot(4,1,3)
X = librosa.stft(librosa_audio)
Xdb = librosa.amplitude_to_db(abs(X))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
# plt.colorbar()

# maximum frequency
Fs = 96000.

samplerate, data = scipy.io.wavfile.read(filename)
plt.subplot(4,1,4)
plt.specgram(data, Fs=samplerate)
plt.title('Scipy Plot (Fs=96000)')

plt.show()

person Joe    schedule 14.12.2020    source источник


Ответы (1)


MFCC - это не спектрограммы (время-частота), а кепстрограммы (время-кепстр). Сравнивать MFCC со спектрограммой визуально непросто, и я не уверен, что это очень полезно. Если вы хотите сделать это, то инвертируйте MFCC, чтобы получить обратно (мел) спектрограмму, выполнив обратный DCT. Вероятно, вы можете использовать для этого mfcc_to_mel. Это позволит оценить, сколько данных было потеряно при прямом преобразовании MFCC. Но это может не сказать много о том, сколько релевантной информации для вашей задачи было потеряно или насколько уменьшился неактуальный шум. Это необходимо оценить для вашей задачи и набора данных. Лучше всего попробовать разные настройки и оценить производительность, используя те оценочные метрики, которые вам нужны.

Обратите внимание, что MFCC могут быть не таким хорошим представлением для типичных 2D CNN, которые применяются к спектрограммам. Это потому, что местоположение было уменьшено: в области MFCC частоты, которые близки друг к другу, больше не находятся рядом друг с другом по вертикальной оси. А поскольку 2D CNN имеют ядра с ограниченной локальностью (тип 3x3 или 5x5 на ранней стадии), это может снизить производительность модели.

person Jon Nordby    schedule 15.12.2020
comment
Спасибо за ваш ответ. Искренне признателен! Где я могу найти дополнительную информацию о MFCC, связанную с вашим ответом? Я еще не встречал информации, которую вы упомянули в своем ответе. Можете ли вы направить меня к авторитетному источнику / документу, описывающему некоторую информацию, которой вы поделились со мной здесь? Спасибо! - person Joe; 15.12.2020
comment
Для MFCC я добавил несколько ссылок здесь. stackoverflow.com/a/65208434/1967571 - не совсем авторитетный, но, вероятно, весьма полезный. Я ожидал бы, что любой хороший учебник по распознаванию речи довольно хорошо его осветит. - person Jon Nordby; 15.12.2020
comment
Что касается CNN по вопросам MFCC, мне не известен авторитетный источник. Это своего рода здравый смысл и с некоторой косвенной поддержкой в ​​эмпирических оценках (CNN на мельспекограмме работают лучше, чем на MFCC). Если вы найдете для этого хороший источник, я был бы рад его увидеть! - person Jon Nordby; 15.12.2020