Найкращий спосіб оцінити "якість" автокореляції?


9

Це збоку від мого додатка з хропінням .

У мене з’явилася тріщина при створенні автокореляції аудіосигналу, щоб побачити, чи «це корелює» з хропінням / диханням дуже добре. У мене є простий алгоритм (виробляє 1,0 як нульовий елемент, що є хорошим знаком), але мені цікаво, як оцінити результат, щоб визначити, чи є сильна автокореляція, і, можливо, далі, як використовувати її для розділення різні можливі джерела звуку.

Питання №1: Чи хороший показник якості автокореляції (пропускний елемент нульовий) метрикою «якості», як будь-який, чи є щось краще?

Щоб пояснити: я просто хочу числовим способом (проти "дивлячись" на діаграму), щоб відрізнити сильно автокорельований сигнал від менш добре автокорельованого.

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

Деякі ранні результати: У деяких випадках автокореляція (або RMS, або пік) показує різкий стрибок хропіння - саме ту відповідь, яку я хотів би бачити. В інших випадках у цих заходів взагалі немає явного руху (а це можуть бути два послідовні хропіння з двома реакціями), а в ситуаціях з високим рівнем шуму вимірювання насправді занурюються (трохи) під час хропіння.

Оновлення - 22 травня: Нарешті я ще трохи попрацював над цим. (Мене зняли в іншому додатку, який буквально болить.) Я подав вихід автокореляції у FFT, і вихід дещо цікавий - він показує досить драматичний пік біля початку, коли хропіть.

Тому зараз я якось стикаюся з проблемою квантування цього піку. Як не дивно, найвищі вершини, з точки зору абсолютної величини, трапляються в інші часи, але я спробував співвідношення піка до середнього арифметичного, і це добре простежує. Отож, які хороші способи виміряти "пік" FFT. (І, будь ласка , не кажіть, що мені потрібно прийняти FFT - ця штука вже близька до проковтування власного хвоста. :))

Крім того, мені спало на думку, що якість FFT може дещо покращитися, якщо я відобразив дзеркальне відображення результатів автокореляції, з нулем (який за визначенням 1,0 величини) посередині. Це поставило б "хвости" з обох кінців. Це (можливо) гарна ідея? Чи має бути дзеркальне зображення вертикальним або перевернутим? (Звичайно, я спробую це незалежно від того, що ви кажете, але я подумав, може, я можу отримати деякі підказки щодо деталей.)

Випробувана плоскостопість--

Мої тестові випадки можна приблизно розділити на категорії «добре себе поводити» та категорії «проблемні діти».

Для тестів, що «добре ведуть себе», плоскостопість ЗПТ автокореляції різко знижується, а відношення піку до середньої автокореляції піднімається під час хропіння. Співвідношення цих двох чисел (пікове відношення, поділене на площину) є особливо чутливим, виявляючи 5-10-кратний підйом під час вдиху / хропіння.

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

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

  1. Рівень шуму (як правило) вище у "проблемних дітей"
  2. Рівень звуку (майже завжди) нижчий у "проблемних дітей"
  3. "Проблемні діти", як правило, полягають у більшій кількості дихання та менш реального хропіння (і мені потрібно виявити і те й інше)

Будь-які ідеї?

Оновлення - 25.05.2012: Занадто рано передбачити танець перемоги, але коли я відобразив автокореляцію щодо точки, взяв FFT про це, а потім зробив спектральну площинність, моя комбінована схема співвідношення показала хороший стрибок у кілька різних середовищ. Відображення автокореляції, схоже, покращує якість FFT.

Однак, одна з основних мір полягає в тому, що оскільки "компонент постійного струму" відбитого "сигналу" дорівнює нулю, результат нульового FFT завжди дорівнює нулю, і цей вид порушує геометричне середнє, що включає нуль. Але пропуск нульового елемента, здається, працює.

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

Я не проаналізував її уважно, але підозрюю, що те, що відбувається, - свистячий звук десь під час дихання / хропіння, і що свист - це те, що виявляється.


Що стосується міри "силової" кореляції, то, що вам потрібно зробити, це нормалізувати два сигнали, що співвідносяться, перш ніж робити кореляцію. (Після нормалізації сума кожного сигналу повинна бути 1). Тоді пік кореляції завжди буде між -1 та 1. Це ваша сила. Я не впевнений у решті запитань, можливо, ви можете трохи відредагувати.
Спейсі

Я маю справу з автокореляцією, тому два сигнали є одним і тим же і, за визначенням, "нормалізуються" відносно один одного. Під "силою" я маю на увазі, скільки існує автокореляції.
Даніель Р Хікс

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

@endolith Я думаю, що він може запитати про міру «піку» вашої функції автокореляції, це для того, щоб відрізнити сигнал з однією дельтою (автокореляція шуму) від сигналу багатьох піків? (автокореляція сигналу з гармоніками). Можливо, тут можна застосувати і міру спектральної плоскості ...
Spacey

Здається, що спектральна площинність - те, чого він хоче. Даніель: Ви хочете визначити, наскільки сигнал відрізняється від білого шуму?
Емре

Відповіді:


3

Прелімінарії

Ця демонстрація простіша з аудіопрочитанням пакету MATLAB , що дозволяє читати / записувати MP3-файли. Крім того, ви можете конвертувати MP3-файл у прикладі в WAV вручну.

Легкий випадок

Перш ніж ми вивчимо ваш проблемний файл, давайте перейдемо до SoundCloud і схопимо гідний хропіння, щоб ми знали, що чекати, коли показник SNR високий. Це стереофонічний формат MP3 з частотою 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

Висновок

Вам потрібно придбати чистіший сигнал, якщо ви хочете покластися на спектральну площину! Я мав це ущільнити, просто щоб щось почути. Якщо виявлено низький показник SNR, запропонуйте користувачеві поставити телефон ближче або використовувати мікрофон, як телефон, що постачається із гарнітурою.

Гарна новина полягає в тому, що це можна виявити хропіння навіть у проблемному випадку. Однак, оскільки це питання стосувалося не лише виявлення хропіння, я зупинюсь тут і поясню, як це зробити у вашому іншому запитанні .


Тепер ти маєш розуміння проти чого я проти. Цей зразок був середньої якості серед зразків, з якими я маю працювати - є набагато гірші. І я можу досить добре прочитати цей зразок за допомогою своїх існуючих алгоритмів.
Даніель Р Хікс

Які алгоритми це?
Емре

Якщо коротко: звук проходить через FFT 8 разів на секунду, спектр розбивається на 5 частотних діапазонів, обчислюється різниця потужності та спектральності для кожного діапазону, після чого результати оцінюються таким чином, що надає більше ваги смугам, які з'являються змінюватись за правильною швидкістю.
Даніель Р Хікс

@Emre Я переглядаю ваші посилання, зробила акаунт звукового звуку, але не можу побачити, як саме ви завантажили цей хроп. Немає кнопки завантаження поруч із ним або деінде.
Спейсі

@Mohammad: Я надав посилання для завантаження.
Емре

1

Автокореляція безпосередньо пов'язана з оберненою DFT спектральної щільності потужності вашого сигналу. У цьому сенсі будь-яка інформація, що міститься в квадраті величини вашого DFT, також міститься у функції автокореляції.

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

Таким чином, автокореляція білого шуму буде функцією дельти, і не матиме вторинних піків (або будь-яких інших піків для цього питання) від його центрального піку. На відміну від цього, якщо сигнал має гармоніку, то його функція автокореляції буде містити вторинні та третинні піки, пропорційні основній гармоніці. Відстань від головного (центрального) піка до другого піку - період вашої основної частоти.

Редагувати:

Я думаю, що ви шукаєте - це міра - число - кодифікує, наскільки функція автокореляції схожа на дельту. З цією метою може бути застосовано вимірювання спектральної плоскості або, в більш загальному випадку, вимірювання вашого геометричного середнього середнього арифметичного.


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

Перегляньте мої редагування.
Спейсі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.