Анализ аудио Birdsong - выяснение, насколько хорошо совпадают два клипа

У меня есть ~100 звуковых файлов wav с частотой дискретизации 48000 птиц того же вида, между которыми я хотел бы измерить сходство. Я начинаю с волновых файлов, но я знаю (очень немного) больше о работе с изображениями, поэтому я предполагаю, что мой анализ будет сделан на изображениях спектрограммы. У меня есть несколько образцов птиц разных дней.

Вот несколько примеров данных вместе с (извинения за немаркированные оси; x - выборка, y - линейная частота, умноженная на 10 000 Гц):альтернативный текстЭти пение птиц, по-видимому, встречаются в "словах", отдельных сегментах песни, что, вероятно, является уровнем, на котором я должен сравнивать; оба различия между подобными словами и частотой и порядком различных слов. альтернативный текст

Я хочу попытаться устранить шум цикады - цикады чирикают с довольно постоянной частотой и имеют тенденцию к фазовому согласованию, так что это не должно быть слишком сложным.альтернативный текст

Кажется, что некоторые пороговые значения могут быть полезны.

Мне сказали, что большая часть существующей литературы использует ручную классификацию, основанную на характеристиках песен, например, Pandora Music Genome Project. Я хочу быть похожим на Echo Nest; используя автоматическую классификацию. Обновление: многие люди изучают это.

У меня вопрос, какие инструменты я должен использовать для этого анализа? Мне необходимо:

  • Фильтр / порог общего шума и сохранить музыку
  • Отфильтровывать специфические шумы, такие как цикад
  • Разделите и классифицируйте фразы, слоги и / или ноты в песнях птиц
  • Создать показатели различия / сходства между частями; то, что улавливает различия между птицами, сводя к минимуму различия между разными призывами одной и той же птицы

Моим оружием выбора является numpy / scipy, но может ли что-то вроде openCV быть здесь полезным?

Изменить: обновил мою терминологию и перефразировал подход после некоторого исследования и полезного ответа Стива.

4 ответа

Решение

Пришлось сделать это ответом, так как это просто слишком долго для комментария.

Сейчас я в основном работаю в этой области, поэтому чувствую, что у меня есть кое-какие знания. Очевидно, с моей точки зрения, я бы рекомендовал работать со звуком, а не с изображениями. Я также рекомендую использовать MFCC для извлечения характеристик (о которых вы можете думать как о коэффициентах, которые суммируют / характеризуют конкретные поддиапазоны звуковой частоты [потому что они есть]).

ГММ идут.

Для выполнения этой задачи у вас должно быть несколько (предпочтительно много) помеченных / известных данных, в противном случае нет никаких оснований для машинного обучения.

Техническость, которую вы можете найти полезной:

"Затем, во время тестирования, вы отправляете вектор MFCC запроса в GMM, и он скажет вам, к какому виду он относится".

Точнее, вы отправляете запрос каждому GMM (который, если вы используете их правильно, каждый дает вам оценку вероятности [вероятности] того конкретного вектора признаков, испускаемого этим распределением вероятностей). Затем вы сравниваете все оценки правдоподобия, которые вы получаете от всех GMM, и классифицируете их по величине, которую вы получаете.

UBMS

Вместо того, чтобы "отфильтровывать" шум, вы можете просто смоделировать все фоновые шумы / искажения канала с помощью UBM (универсальная фоновая модель). Эта модель состоит из GMM, обученного с использованием всех доступных данных обучения (то есть всех данных обучения, которые вы использовали для каждого класса). Вы можете использовать это, чтобы получить "отношение правдоподобия" (Pr[x будет излучаться конкретной моделью] / Pr[x будет излучаться фоновой моделью (UBM)])), чтобы помочь устранить любое смещение, которое можно объяснить фоновой моделью. сам.

Интересный вопрос, но довольно широкий. Я рекомендую ознакомиться с существующей литературой по автоматической идентификации песен птиц. (Да, есть группа людей, работающих над этим.)

В этой статье (редактировать: извините, неработающая ссылка, но эта глава Dufour et al. 2014, возможно, еще яснее) используется базовый двухэтапный метод распознавания образов, который я бы рекомендовал сначала: извлечение объектов (статья использует MFCC), затем классификация (статья использует GMM). Для каждого кадра во входном сигнале вы получаете вектор MFCC (от 10 до 30). Эти векторы MFCC используются для обучения GMM (или SVM) вместе с соответствующими метками видов птиц. Затем, во время тестирования, вы отправляете вектор MFCC запроса в GMM, и он скажет вам, какой вид он считает.

Хотя некоторые из них применяли методы обработки изображений к проблемам с классификацией / снятием отпечатков пальцев (например, этот документ от Google Research), я не решаюсь рекомендовать эти методы для вашей проблемы или подобных ей из-за раздражающих временных вариаций.

"Какие инструменты я должен использовать для этого анализа?" Среди многих других:

  1. Извлечение функции: MFCCs, обнаружение начала
  2. Классификация: GMM, SVM
  3. Google

Извините за неполный ответ, но это широкий вопрос, и в этой проблеме есть нечто большее, чем краткий ответ.

В зависимости от того, как вы хотите определить свое приложение, вам может понадобиться контролируемый или неконтролируемый подход. В первом случае вам понадобится некоторый процесс аннотации, чтобы обеспечить фазу обучения набором сопоставлений из сэмплов (аудиофайлов) в классы (идентификаторы птиц или любой другой класс). В случае неконтролируемого подхода вам необходимо кластеризовать ваши данные так, чтобы похожие звуки были сопоставлены с одним кластером.

Вы можете попробовать мою библиотеку: pyAudioAnalysis, которая предоставляет высокоуровневые оболочки для классификации звука и кластеризации звука.

По-видимому, вы уже выполняете STFT или что-то подобное для создания этих изображений, поэтому я предлагаю составить полезную сводку этих смешанных структур время / частота. Я помню систему, построенную для немного другой цели, которая смогла эффективно использовать данные формы звукового сигнала, разбив их на небольшое количество (< 30) бинов по времени и амплитуде и просто посчитав количество выборок, попавших в каждый бин, Вы могли бы сделать что-то подобное, либо в области времени / амплитуды, либо в области времени / частоты.

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