Я работаю над проектом на Python, чтобы обнаружить и классифицировать какую-нибудь птичью песню, и я оказался в положении, когда мне нужно преобразовать волновой файл в данные частоты и времени. Это не было большой проблемой, но чтобы классифицировать различные слоги по группам, мне нужно написать что-то, что будет определять, когда кластеры данных принимают определенную форму. Чтобы дать вам представление о том, как выглядят данные, вот изображение того, как данные выглядят при построении графика:
Мне нужен какой-то способ получить каждый отдельный слог (каждая фигура с разделением по обеим сторонам) и сохранить их либо в переменную, либо в свои собственные файлы, чтобы я мог запустить корреляцию Пирсона между ними с помощью SciPy.
Кроме того, я предпочитаю Python, но я открыт для программирования на других языках, если у вас есть другой способ сделать это.
Спасибо!
источник
Ответы:
Два вопроса:
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.
источник