Это отступление от моего приложения храпа .
У меня была проблема с созданием автокорреляции аудиосигнала, чтобы проверить, хорошо ли это соотносится с храпом / дыханием. У меня есть простой алгоритм (в качестве нулевого элемента выдается 1.0, что является хорошим признаком), но мне интересно, как оценить результат, чтобы определить, сильна ли автокорреляция, и, возможно, далее, как использовать его для разделения различные возможные источники звука.
Вопрос № 1: Является ли RMS автокорреляции (пропускающий элемент ноль) такой же хорошей метрикой «качества», как и любая другая, или есть что-то лучше?
Для уточнения: я просто хочу, чтобы числовой способ (вместо «просмотра» на графике) отличал сильно автокоррелированный сигнал от менее хорошо автокоррелированного.
(Я не знаю достаточно, чтобы знать, какие еще вопросы задавать.)
Некоторые ранние результаты: в некоторых случаях автокорреляция (среднеквадратичное или пиковое) демонстрирует резкий скачок в храпе - именно тот ответ, который я хотел бы увидеть. В других случаях в этих измерениях вообще нет видимого движения (а это может быть два последовательных храпа с двумя ответами), а в ситуациях с высоким уровнем шума измерения фактически падают (немного) во время храпа.
Обновление - 22 мая. Наконец-то у меня появилось время поработать над этим. (Меня отвлекло другое приложение, которое буквально вызывает боль.) Я подал вывод автокорреляции в БПФ, и вывод несколько интересный - он показывает довольно драматический пик около начала координат, когда начинается храп.
Так что теперь я столкнулся с проблемой квантования этого пика как-то. Как ни странно, самые высокие пики по абсолютной величине имеют место в другое время, но я пробовал соотношение пика к среднему арифметическому, и это хорошо отслеживается. Итак, какие есть хорошие способы измерить «остроту» БПФ. (И, пожалуйста , не говорите, что мне нужно взять БПФ - эта штука уже близка к глотанию собственного хвоста. :))
Кроме того, мне пришло в голову, что качество БПФ могло бы несколько улучшиться, если бы я зеркально отразил подаваемые результаты автокорреляции с нулем (который по определению равен 1,0) в середине. Это поставило бы «хвосты» на обоих концах. Это (возможно) хорошая идея? Должно ли зеркальное изображение быть вертикальным или перевернутым? (Конечно, я попробую это независимо от того, что вы говорите, но я подумал, что, может быть, я получу некоторые подсказки по деталям.)
Пробовал плоскость--
Мои тестовые случаи можно условно разделить на категорию «с хорошим поведением» и категорию «проблемные дети».
Для «хороших» тестовых случаев плоскостность БПФ автокорреляции резко падает, а отношение пика к средней автокорреляции возрастает во время храпа. Соотношение этих двух чисел (отношение пиков, деленное на плоскостность) является особенно чувствительным, демонстрируя 5-10-кратный подъем во время вдоха / храпа.
Однако для «проблемных детей» цифры идут в противоположном направлении. Отношение пик / среднее значение слегка падает, в то время как плоскостность фактически увеличивается на 50-100%.
Разница между этими двумя категориями (в основном) тройная:
- Уровень шума (обычно) выше у «проблемных детей»
- Уровни звука (почти всегда) ниже у "проблемных детей"
- «Проблемные дети», как правило, состоят из большего количества дыхания и меньшего фактического храпа (и мне нужно обнаружить оба)
Любые идеи?
Обновление - 25/5/2012: Танец победы немного преждевременен, но когда я отразил автокорреляцию о точке, взял БПФ этого, а затем сделал спектральную плоскостность, моя схема комбинированного отношения показала хороший скачок несколько разных сред. Отражение автокорреляции, кажется, улучшает качество БПФ.
Тем не менее, один незначительный момент заключается в том, что, поскольку «постоянная составляющая» отраженного «сигнала» равна нулю, нулевой результат БПФ всегда равен нулю, и этот тип разбивает геометрическое среднее, которое включает в себя ноль. Но пропуск нулевого элемента, кажется, работает.
Результат, который я получаю, далеко не достаточен для самостоятельного определения храпа / вдоха, но кажется, что это довольно чувствительное «подтверждение» - если я не получаю «прыжок», то это, вероятно, не храп / дыхание.
Я не анализировал это близко, но я подозреваю, что происходит то, что свистящий звук появляется где-то во время вдоха / храпа, и этот свист - то, что обнаруживается.
источник
Ответы:
прелиминарии
Эта демонстрация становится проще благодаря аудиозаписи пакета MATLAB , который позволяет читать / записывать файлы MP3. Кроме того, вы можете конвертировать файл MP3 в примере в WAV вручную.
Легкий случай
Прежде чем мы рассмотрим ваш проблемный файл, давайте перейдем к SoundCloud и возьмем приличный храп, чтобы мы знали, чего ожидать при высоком SNR. Это стереофонический MP3 формат 52 с частотой 44,1 кГц. Загрузите его в папку по пути MATLAB.
Теперь давайте рассчитаем спектрограмму (я выбрал окно Ханна из 8192 выборок) и спектральную плоскостность:
Огромные провалы в спектральной плоскости (то есть отклонение от белого шума) кричат: «Я храплю». Мы можем легко классифицировать его, посмотрев на отклонение от базовой линии (медиана):
У нас было более двух стандартных отклонений от запаса. Само стандартное изменение, для справки, составляет 6,8487 .
Трудный случай
Теперь давайте посмотрим на ваш файл . Это 10-минутный WAV-файл с частотой 8 кГц. Поскольку уровень очень низкий, это помогает компандировать сигнал.
Видишь эти приятные провалы, сопровождающие каждый храп? Я тоже. Как насчет хороших пиков? Они не храпят, а звук движущегося объекта. Стандартное отклонение мизерное 0,9388
Вывод
Вам нужно получить более чистый сигнал, если вы хотите положиться на спектральную плоскость! У меня было компандировать это просто чтобы что-нибудь услышать. Если обнаружено низкое отношение сигнал / шум, попросите пользователя приблизить телефон или использовать микрофон, такой как телефон, который поставляется с гарнитурой.
Хорошая новость заключается в том, что это можно обнаружить храп даже в проблемном случае. Однако, поскольку этот вопрос был не только об обнаружении храпа, я остановлюсь здесь и объясню, как это сделать, в вашем другом вопросе .
источник
Автокорреляция напрямую связана с обратным ДПФ спектральной плотности мощности вашего сигнала. В этом смысле любая информация, содержащаяся в квадрате величины вашего ДПФ, также содержится в функции автокорреляции.
Тем не менее, единственное, что может сказать вам автокорреляция - это наличие гармоник. (Расстояние от центрального пика до следующего наивысшего). Возможно, храпящее дыхание VS имеет разные фундаментальные гармоники, и если так, то «метод автокорреляции», безусловно, будет хорошей отправной точкой, чтобы можно было извлекать особенности (в данном случае гармоники).
Таким образом, автокорреляция белого шума будет дельта-функцией и не будет иметь никаких вторичных пиков (или любых других пиков в этом отношении) от своего центрального пика. Напротив, если сигнал имеет гармоники, то его автокорреляционная функция будет содержать вторичные и третичные пики, соразмерные с присутствующей основной гармоникой. Расстояние от основного (центрального) пика до вторичного пика - период вашей основной частоты.
РЕДАКТИРОВАТЬ:
Я думаю, что то, что вам нужно, - это мера, число, кодирующее, насколько функция автокорреляции похожа на дельту, а функция автокорреляции выглядит так, как будто в ней много пиков. С этой целью может применяться мера спектральной плоскостности или, в более общем случае, измерение среднего геометрического к среднему арифметическому.
источник