Як ви можете визначити, чи є сигнал (коли ваш сигнал схожий на шум)?


11

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

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

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

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

Основна техніка

(Для Йоди)

Звуковий сигнал дискретизується (як правило, з різних причин 8000 Гц), а потім FFTed у 1024 блоках. (У моїх експериментах фільтри Хеммінга та блоки, що перекриваються, здаються, мають незначний ефект, хоча вони можуть бути переглянуті пізніше.)

FFT ділиться на "смуги" (в даний час 5, трохи перекошені за розміром, щоб розмістити більше деталей на нижньому кінці) і "спектральна різниця" та рівень кожної смуги підсумовуються. Довгострокові середні значення пікових обмежених значень використовуються як "пороги", а подальше коригування зміщення використовується для підтримки приблизно 20% "перевищення граничного значення".

Кожному значенню "понад поріг" надається вага 1 (під пороговим значенням задається вага 0), але потім ця вага коригується за очевидною "мінливістю" (приблизно в 2 Гц) в діапазоні, щоб надати більше ваги смугам які несуть більш очевидний сигнал.

Ваги смуг підсумовуються, а потім підсумовуються ваги наступних блоків підсумовуються протягом приблизно секунди для отримання бігової "оцінки". Це знову порівнюється з середньою межею потоку (плюс кілька евристик) для виявлення виникнення / зсуву хропіння.

Оновлення

Мені раптом прийшло в голову, що якщо мій алгоритм ефективно підтримує сигнал постійного рівня (за моєю проблемою рівня сигналу), спосіб ефективного вимірювання SNR - це вимірювання шуму, коли сигналу немає.

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

Тож у мене ще немає повної відповіді, але я просунувся.

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


"Це знову мій детектор хропіння" - ви можете, будь ласка, посилання на своє попереднє запитання (де ви, мабуть, описали його детально) або додати деякі деталі свого детектора в це питання?
Лорем Іпсум

Відповіді:


5

Поки ви ніби ототожнювали хропіння через наявність сильної періодичної картини в аудіо. Якщо ви скажете мені, що можуть бути інші джерела з такою ж властивістю, саме час перейти до та зосередитись на властивості сигналу, більш специфічній для хропіння; і я б запропонував більш детально зазирнути в тембр самого записаного звуку. Зважаючи на те, що слухач людини може відганяти хропіння від дихання, ви можете вдатися до традиційного підходу класифікації звукових сигналів. Обчисліть такі функції, як MFCC і Шаблони коливань на ваших аудіоданих, і навчіть байєсівський класифікатор (або більш складний), щоб дискримінувати хропіння від дихання.

Можливо, час також переглянути літературу з цієї теми ... Наприклад, я знайшов це: http://web.itu.edu.tr/kamasak/pubs/pdf/pm7_8_007.pdf


Одна проблема полягає в тому, що характер звуку змінюється настільки сильно, що залежить від людини до людини і навіть для однієї людини протягом ночі. Але дякую за підказки - я розберуся в них.
Даніель Р Хікс

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

У мене більше 50 наборів даних. На жаль, алгоритм, який ідеально працює на одному наборі, виходить з ладу на іншому. У деяких телевізор перебуває у фоновому режимі, у деяких гуркіт повітряних маніпуляторів тощо. Дихання / хропіння ледь чутно або лущиться фарбою. Суб'єкт може змінювати позиції і повністю змінювати характер свого хропіння. Явно потрібна якась схема самонастроювання.
Даніель Р Хікс

які функції ви використовуєте для класифікації?
пікенети

Передусім просто "спектральна різниця" (також її називають "спектральний потік") для виявлення "настання" та "зміщення". Але моя діюча схема ділить спектр на смуги і "важить" кожну смугу, виходячи з видимої сили сигналу в цій смузі (про що судять за величиною варіації різниці спектрів, що виникає приблизно в 1/2 Гц). Це добре допомагає виявити дихання / хропіння у всьому діапазоні гучності, навіть при значному шумі, але воно фактично втрачає всі показники фактичної гучності. А просто перегляд одночасного загального рівня звуку не працює через проблеми із шумом.
Даніель Р Хікс

0

Можливо, вам знадобиться побудувати динамічний класифікатор, який може адаптуватися до поточної тематики, фази сну та аудіосередовища, а не налаштовуватися на фіксований навчальний набір.


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