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

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

Что касается графика Librosa (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()
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 284
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Спасибо за ваш ответ. С уважением! Где я могу найти дополнительную информацию о MFCC, связанную с ответом, который вы мне дали? Я еще не встречал информацию, которую вы упомянули в своем ответе. Можете ли вы указать мне авторитетное место/документ, описывающий некоторую информацию, которой вы поделились со мной здесь? Спасибо!

Joe 15.12.2020 16:48

Для MFCC я добавил здесь несколько ссылок. stackoverflow.com/a/65208434/1967571 - не очень авторитетный, но, вероятно, весьма полезный. Я ожидаю, что любой хороший учебник по распознаванию речи достаточно хорошо расскажет об этом.

Jon Nordby 15.12.2020 16:52

Что касается CNN по вопросам MFCC, я не знаю авторитетного источника. Это своего рода «здравый смысл» и с некоторой косвенной поддержкой в ​​​​эмпирических оценках (CNN на melspecogram работают лучше, чем на MFCC). Если вы найдете хороший источник для этого, хотелось бы увидеть его!

Jon Nordby 15.12.2020 16:53

Другие вопросы по теме