Лучший способ оценить «качество» автокорреляции?


9

Это отступление от моего приложения храпа .

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

Вопрос № 1: Является ли RMS автокорреляции (пропускающий элемент ноль) такой же хорошей метрикой «качества», как и любая другая, или есть что-то лучше?

Для уточнения: я просто хочу, чтобы числовой способ (вместо «просмотра» на графике) отличал сильно автокоррелированный сигнал от менее хорошо автокоррелированного.

(Я не знаю достаточно, чтобы знать, какие еще вопросы задавать.)

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

Обновление - 22 мая. Наконец-то у меня появилось время поработать над этим. (Меня отвлекло другое приложение, которое буквально вызывает боль.) Я подал вывод автокорреляции в БПФ, и вывод несколько интересный - он показывает довольно драматический пик около начала координат, когда начинается храп.

Так что теперь я столкнулся с проблемой квантования этого пика как-то. Как ни странно, самые высокие пики по абсолютной величине имеют место в другое время, но я пробовал соотношение пика к среднему арифметическому, и это хорошо отслеживается. Итак, какие есть хорошие способы измерить «остроту» БПФ. (И, пожалуйста , не говорите, что мне нужно взять БПФ - эта штука уже близка к глотанию собственного хвоста. :))

Кроме того, мне пришло в голову, что качество БПФ могло бы несколько улучшиться, если бы я зеркально отразил подаваемые результаты автокорреляции с нулем (который по определению равен 1,0) в середине. Это поставило бы «хвосты» на обоих концах. Это (возможно) хорошая идея? Должно ли зеркальное изображение быть вертикальным или перевернутым? (Конечно, я попробую это независимо от того, что вы говорите, но я подумал, что, может быть, я получу некоторые подсказки по деталям.)

Пробовал плоскость--

Мои тестовые случаи можно условно разделить на категорию «с хорошим поведением» и категорию «проблемные дети».

Для «хороших» тестовых случаев плоскостность БПФ автокорреляции резко падает, а отношение пика к средней автокорреляции возрастает во время храпа. Соотношение этих двух чисел (отношение пиков, деленное на плоскостность) является особенно чувствительным, демонстрируя 5-10-кратный подъем во время вдоха / храпа.

Однако для «проблемных детей» цифры идут в противоположном направлении. Отношение пик / среднее значение слегка падает, в то время как плоскостность фактически увеличивается на 50-100%.

Разница между этими двумя категориями (в основном) тройная:

  1. Уровень шума (обычно) выше у «проблемных детей»
  2. Уровни звука (почти всегда) ниже у "проблемных детей"
  3. «Проблемные дети», как правило, состоят из большего количества дыхания и меньшего фактического храпа (и мне нужно обнаружить оба)

Любые идеи?

Обновление - 25/5/2012: Танец победы немного преждевременен, но когда я отразил автокорреляцию о точке, взял БПФ этого, а затем сделал спектральную плоскостность, моя схема комбинированного отношения показала хороший скачок несколько разных сред. Отражение автокорреляции, кажется, улучшает качество БПФ.

Тем не менее, один незначительный момент заключается в том, что, поскольку «постоянная составляющая» отраженного «сигнала» равна нулю, нулевой результат БПФ всегда равен нулю, и этот тип разбивает геометрическое среднее, которое включает в себя ноль. Но пропуск нулевого элемента, кажется, работает.

Результат, который я получаю, далеко не достаточен для самостоятельного определения храпа / вдоха, но кажется, что это довольно чувствительное «подтверждение» - если я не получаю «прыжок», то это, вероятно, не храп / дыхание.

Я не анализировал это близко, но я подозреваю, что происходит то, что свистящий звук появляется где-то во время вдоха / храпа, и этот свист - то, что обнаруживается.


Что касается показателя «силы» корреляции, то вам нужно нормализовать корреляцию двух сигналов перед выполнением корреляции. (После нормализации сумма каждого сигнала должна быть 1). Тогда пик корреляции всегда будет существовать между -1 и 1. Это ваша сила. Я не уверен насчет остальной части вашего вопроса, возможно, вы можете немного отредактировать.
Спейси

Я имею в виду автокорреляцию, поэтому два сигнала одинаковы и по определению «нормализованы» относительно друг друга. Под «силой» я подразумеваю степень автокорреляции.
Даниэль Р Хикс

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

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

Похоже, спектральная плоскость - это то, что он хочет. Даниэль: Хотите определить, насколько сигнал отличается от белого шума?
Эмре

Ответы:


3

прелиминарии

Эта демонстрация становится проще благодаря аудиозаписи пакета MATLAB , который позволяет читать / записывать файлы MP3. Кроме того, вы можете конвертировать файл MP3 в примере в WAV вручную.

Легкий случай

Прежде чем мы рассмотрим ваш проблемный файл, давайте перейдем к SoundCloud и возьмем приличный храп, чтобы мы знали, чего ожидать при высоком SNR. Это стереофонический MP3 формат 52 с частотой 44,1 кГц. Загрузите его в папку по пути MATLAB.

Теперь давайте рассчитаем спектрограмму (я выбрал окно Ханна из 8192 выборок) и спектральную плоскостность:

[snd1,fs1]=mp3read('snoring - brobar.mp3'); % use wavread if you converted manually
[s1,f,t,p1]=spectrogram(mean(snd1,2),hann(8192));
sf1=10*log10(geomean(p1)./mean(p1)); % spectral flatness
plot(linspace(0,length(snd1)/fs1,length(sf1)),sf1); axis tight

Спектральная плоскость храпа Бробара

Огромные провалы в спектральной плоскости (то есть отклонение от белого шума) кричат: «Я храплю». Мы можем легко классифицировать его, посмотрев на отклонение от базовой линии (медиана):

stem(linspace(0,length(snd1)/fs1,length(sf1)),median(sf1)-sf1>2*std(sf1)); axis tight

Классифицированная спектральная плоскостность храпа Бробара

У нас было более двух стандартных отклонений от запаса. Само стандартное изменение, для справки, составляет 6,8487 .

Трудный случай

Теперь давайте посмотрим на ваш файл . Это 10-минутный WAV-файл с частотой 8 кГц. Поскольку уровень очень низкий, это помогает компандировать сигнал.

[snd,fs]=wavread('recordedFile20120408010300_first_ten_minutes');
cmp=compand(snd,255,1);
wavwrite(cmp,'companded'); % used for listening purposes
[s,f,t,p]=spectrogram(snd,hann(8192));
sf=10*log10(geomean(p)./mean(p));
plot(linspace(0,600,length(sf)),sf);

Спектральная плоскостность шумного файла

Видишь эти приятные провалы, сопровождающие каждый храп? Я тоже. Как насчет хороших пиков? Они не храпят, а звук движущегося объекта. Стандартное отклонение мизерное 0,9388

Вывод

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

Хорошая новость заключается в том, что это можно обнаружить храп даже в проблемном случае. Однако, поскольку этот вопрос был не только об обнаружении храпа, я остановлюсь здесь и объясню, как это сделать, в вашем другом вопросе .


Теперь у тебя есть чувство, с чем я сталкиваюсь. Этот образец был «среднего» качества среди образцов, с которыми мне приходилось работать - они гораздо хуже. И я могу прочитать этот пример довольно хорошо с моими существующими алгоритмами.
Даниэль Р Хикс

Какие это алгоритмы?
Эмре

Вкратце: звук пропускается через БПФ 8 раз в секунду, спектр разбивается на 5 полос частот, вычисляется мощность и спектральная разница для каждой полосы, затем результаты оцениваются таким образом, чтобы придать больший вес появившимся полосам. меняться с правильной скоростью.
Даниэль Р Хикс

@ Emre Я перехожу по твоим ссылкам, создал аккаунт на soundcloud, но не вижу, как именно ты скачал этот храп. Нет кнопки загрузки рядом с ней или где-либо еще.
Спейси

@ Мохаммед: я предоставил ссылку для скачивания.
Эмре

1

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

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

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

РЕДАКТИРОВАТЬ:

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


У меня сложилось впечатление, что автокорреляция будет лучше отличать (ритмичный) сигнал от (случайного) шума - шум будет автокоррелировать вблизи нуля. DFT, OTOH, будет представлять шум как шум - расширенный спектр. По крайней мере, это «теория», насколько я понимаю.
Даниэль Р Хикс

Пожалуйста, смотрите мои правки.
Спейси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.