Предыстория: я работаю над приложением для iPhone (на которое ссылаются в нескольких других публикациях ), которое «слушает» храп / дыхание во время сна и определяет наличие признаков апноэ во сне (в качестве предварительного экрана для «лаборатории сна») тестирование). Приложение, в основном, использует «спектральную разницу» для обнаружения храпа / вдоха, и оно работает довольно хорошо (корреляция около 0,85–0,90) при сравнении с записями в лаборатории сна (которые на самом деле довольно шумные).
Проблема: большинство «спальных» шумов (вентиляторов и т. Д.) Я могу отфильтровать с помощью нескольких методов и часто надежно обнаруживать дыхание на уровнях S / N, когда человеческое ухо не может его обнаружить. Проблема в голосовом шуме. Нет ничего необычного в том, что на заднем плане работает телевизор или радио (или просто кто-то говорит на расстоянии), а ритм голоса близко соответствует дыханию / храпу. Фактически, я запустил запись покойного автора / рассказчика Билла Холма через приложение, и это было по сути неотличимо от храпа в ритме, изменчивости уровня и некоторых других мерах. (Хотя я могу сказать, что, по-видимому, у него не было апноэ во сне, по крайней мере, не во время бодрствования.)
Так что это немного далеко (и, вероятно, часть правил форума), но я ищу некоторые идеи о том, как отличить голос. Нам не нужно как-то отфильтровывать храп (подумал, что это было бы неплохо), но нам просто нужен способ отвергнуть слишком «шумный» звук, который чрезмерно загрязнен голосом.
Любые идеи?
Опубликованные файлы: я разместил некоторые файлы на dropbox.com:
Первый - довольно случайная часть рок-музыки (я полагаю), а вторая - запись разговора покойного Билла Холма. Оба (которые я использую в качестве своих образцов «шума», отличающихся от храпа) были смешаны с шумом, чтобы запутать сигнал. (Это значительно усложняет задачу их идентификации.) Третий файл - это десять минут вашей записи, где первая треть в основном дышит, средняя треть - смешанное дыхание / храп, а последняя треть - довольно устойчивый храп. (Вы получаете кашель за бонус.)
Все три файла были переименованы из «.wav» в «_wav.dat», поскольку многие браузеры безумно затрудняют загрузку wav-файлов. Просто переименуйте их обратно в ".wav" после загрузки.
Обновление: я думал, что энтропия "делает свое дело" для меня, но это оказалось в основном особенностями тестовых случаев, которые я использовал, плюс алгоритм, который не был слишком хорошо разработан. В общем случае энтропия делает для меня очень мало.
Впоследствии я попробовал метод, в котором я вычисляю БПФ (используя несколько различных оконных функций) общей величины сигнала (я пробовал мощность, спектральный поток и несколько других мер), сэмплированных примерно 8 раз в секунду (беря статистику из основного цикла БПФ) что каждые 1024/8000 секунд). Для 1024 сэмплов это время составляет около двух минут. Я надеялся, что смогу увидеть закономерности в этом из-за медленного ритма храпа / дыхания против голоса / музыки (и что это также может быть лучшим способом решения проблемы « изменчивости »), но пока есть намеки паттерна здесь и там, я ничего не могу запереть
( Дополнительная информация: В некоторых случаях БПФ величины сигнала дает очень четкий паттерн с сильным пиком на частоте около 0,2 Гц и гармониками ступеньки. Но в большинстве случаев паттерн почти не настолько различен, и голос и музыка могут генерировать менее отчетливые версии аналогичного паттерна. Может быть какой-то способ вычислить значение корреляции для добродетели, но, похоже, для этого потребуется подгонка кривой к полиному 4-го порядка, и делать это раз в секунду в телефоне кажется нецелесообразным.)
Я также попытался сделать то же самое БПФ со средней амплитудой для 5 отдельных «полос», на которые я разделил спектр. Полосы 4000-2000, 2000-1000, 1000-500 и 500-0. Схема для первых 4 полос была в целом аналогична общей схеме (хотя в полосах более высоких частот отсутствовала реальная «выделяющаяся» полоса и часто исчезающе малый сигнал), но полоса 500-0 в целом была просто случайной.
Щедрость: Я собираюсь дать Натану награду, даже если он не предложил ничего нового, учитывая, что его предложение было самым продуктивным на сегодняшний день. У меня все еще есть несколько баллов, которые я хотел бы наградить кому-то еще, если бы они пришли с некоторыми хорошими идеями.
источник
Ответы:
Задний план
Согласно приведенным ниже статьям, храп характеризуется максимумом около 130 Гц и полностью сконцентрирован ниже 12 кГц:
Давайте посмотрим, сможем ли мы использовать это.
MATLAB Пример
У нас плохая запись детского храпа ; 10-минутный 8-битный монофонический WAV-файл. Частота дискретизации составляет 8 кГц, что означает полосу пропускания аудиосигнала 4 кГц. Уровень очень низкий, поэтому сначала я его компандирую .
Ось у нормализована к полосе пропускания 4 кГц, поэтому отметка 0,1 соответствует частоте 400 Гц. При 186 с появляется кашель, соответствующий кашлю; игнорируй это. Мы можем смутно видеть выемки во время каждого храпа. Мало того, они кажутся сконцентрированными ниже 0,2 х 4 кГц = 800 Гц. Давайте внимательнее посмотрим.
На этот раз ось частоты была обозначена в герцах. Теперь зазубрины довольно четкие. Мы даже можем видеть обертоны шума линии электропередачи, начиная с 60 Гц (180 Гц, 300 Гц, 420 Гц). Теперь перейдем к сути алгоритма: давайте классифицируем сигнал на основе энергии в этом поддиапазоне с удалением шума линии.
Если мы хотим стать модными, мы можем отказаться от негабаритных шипов:
Низкое отношение сигнал / шум, проявляющееся в трудности распознавания сигнала на первом графике, означает, что мы имеем свободу действий только в половине стандартного отклонения (значение которого было 4,1). Стебли отмечают храпы.
источник
Просто добавив это здесь, чтобы охватить все возможности, вы можете использовать энтропию, я не знаю, каков уровень энтропии храпа против речи, но если он достаточно отличается, это может сработать. http://www.ee.columbia.edu/~dpwe/papers/ShenHL98-endpoint.pdf
источник
Возможно, статистика временного домена? Храп, по-видимому, имеет относительно длительные периоды устойчивого состояния, в то время как речевая энергия довольно мало меняется за короткие промежутки времени. Это можно сочетать и со спектральным анализом. Гласные имеют более низкочастотное содержание, а согласные - более высокие частоты. Во время речи спектр может быстро подпрыгивать назад и вперед между этими состояниями, в то время как сохранение может оставаться в одном состоянии в течение более длительных периодов времени.
источник
Спектральная сложность со временем. Я предполагаю, что человеческая речь, вероятно, использует больше фонем и с гораздо большей статистической сложностью в их последовательности, чем последовательности храпа фонем.
Это, вероятно, гораздо более простая проблема, чем непрерывное распознавание речи, поскольку вам не нужно фактически правильно распознавать какую-либо конкретную фонему или предложение, только количество спектральных сегментов, звучащих фонемой, и некоторую статистическую меру сложности их последовательностей (энтропия или может сработать тест на сжимаемость). Затем посмотрите, сможете ли вы определить надежный порог для этих мер.
источник