Анализ аудио Birdsong - выяснение, насколько хорошо совпадают два клипа - PullRequest
19 голосов
/ 21 декабря 2010

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

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

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

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

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

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 22 декабря 2010

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

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

ГММ идут.

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

Техническая информация, которая может оказаться вам полезной:

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

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

UBMS

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

5 голосов
/ 21 декабря 2010

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

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

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

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

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

Извините занеполный ответ, но это широкий вопрос, и здесь есть еще кое-что, чем можно кратко ответить на него.

1 голос
/ 27 апреля 2015

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

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

1 голос
/ 21 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...