Распознавание данных, сгруппированных в фигуры

9

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

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

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

Кроме того, я предпочитаю Python, но я открыт для программирования на других языках, если у вас есть другой способ сделать это.

Спасибо!

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

Ответы:

2

Два вопроса:

1 / Около 8 с, мы можем наблюдать стабильный шаг в течение 100 мс или около того, затем внезапное увеличение падает до 8,5 с. Является ли вся эта последовательность (от 8 до 8,5 с) единой сущностью, или вы считаете, что две стадии (стабильная, а затем убывающая) представляют собой две сущности?

2 / Вы хотите работать с или без надзора. Знаете ли вы заранее «шаблоны», чтобы искать?

  • Если вы хотите работать без присмотра (скажем, вы собрали записи и нацелены на извлечение из них «структурированного представления»), ваша задача на первом этапе сродни обнаружению голосовой активности. Просто используйте интенсивность сигнала, возможно, в сочетании с метрикой «тональности» (скажем, с отношением максимума автокорреляции в диапазоне ширин, 1 кГц - 5 кГц), чтобы обнаружить сегменты, где присутствует активный сильный тон. Медианный фильтр результирующей последовательности, чтобы сгладить его, а затем пороговое значение, чтобы получить различные сегменты. Как только вы разбили свой сигнал на сегменты, вы можете делать с ними интересные вещи. Например, вы можете извлечь для каждого из них траекторию основного тона (последовательность с самым сильным пиком частоты для каждого кадра FFT или что-то более устойчивое, извлеченное с помощью оценки истинного основного тона), используйте DTW для вычисления матрицы попарных расстояний между каждым блоком и используйте алгоритм кластеризации (k-средних, агломерационная кластеризация), чтобы идентифицировать группы одинаковых шаблонов основного тона (сегменты 8: 8,5 и 10: 10,5). Вероятно, что неконтролируемый подход будет чрезмерно сегментирован - например, 7.6: 8.5 и 9.6: 10.5 будут распознаны как повторение двух одинаковых блоков, в то время как для вас они могут быть принципиально одним шаблоном, но вы можете использовать что-то вродеSequitur, чтобы иметь один уровень структуры выше.

  • Если у вас есть предопределенный словарь «шаблонов», которым вы хотите пометить свой сигнал, вам лучше следовать типу подходов, используемых для распознавания речи, с тем единственным отличием, что распознавание речи не учитывает высоту тона, в то время как в вашем информация о кейсе - единственная информация, которую следует учитывать! Система распознавания речи решает задачи сегментации и распознавания в одной операции декодирования FST.

pichenettes
источник