Які методи можна використовувати для виявлення та видалення відлуння з аудіосистеми?


14

Фон

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

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

Моє припущення, що групи придумали способи скасувати відлуння, але як це зробити?

Підходи

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

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

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


1
Скасування акустичного відлуння - це велика тематика, що містить багато книг і десятиліть науково-дослідних робіт на цю тему. Ось одна відповідь на тему:
stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java

1
@ hotpaw2 Не впевнений, чому ваше скасування акустичного відлуння в посиланні Java не можна було натискати.
Марк Бут

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

Відповіді:


15

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

Адаптивні фільтри

Адаптивний (цифровий) фільтр - це фільтр, який змінює свої коефіцієнти і з часом переходить до деякої оптимальної конфігурації. Механізм цієї адаптації працює, порівнюючи вихід фільтра з деяким бажаним виходом. Нижче наведена схема загального адаптивного фільтра:

введіть тут опис зображення

Як видно з діаграми, сигнал фільтрується (згорнутий с) ш п для отримання вихідного сигналу д [ п ] . Потім ми віднімаємо д [ п ] від необхідного сигналу д [ п ] для отримання помилки сигналу е [ п ] . Зауважимо, що w n - вектор коефіцієнтів, а не число (отже, ми не пишемо w [ n ]x[n]wnd^[n]d^[n]d[n]e[n]wnw[n] ). Оскільки це змінює кожну ітерацію (кожну вибірку), ми підписуємо поточну колекцію цих коефіцієнтів на . Після отримання e [ n ] ми використовуємо його для оновлення wne[n] за вибором алгоритму оновлення (докладніше про це пізніше). Якщо вхід і вихід задовольнити лінійну залежністьяка не змінюєтьсяплином часуі цей алгоритм поновлення добре розроблений,ш п будекінцевому підсумку сходяться до оптимального фільтра і д [ п ] буде уважно стежити за д [ п ] .wnwnd^[n]d[n]

Відміна відлуння

Проблема скасування ехо може бути представлена ​​в контексті проблеми адаптивного фільтра, де ми намагаємося створити якийсь відомий ідеальний вихід із заданим входом шляхом пошуку оптимального фільтра, що задовольняє співвідношення вхід-вихід. Зокрема, коли ви схопите гарнітуру і привітаєтеся "привіт", вона отримана на іншому кінці мережі, змінена акустичною реакцією кімнати (якщо вона відтворюється вголос) і подається назад у мережу, щоб повернутися назад до вас як відлуння. Однак, оскільки система знає, як звучало початкове "привіт", і тепер вона знає, як звучить зворотний і затримковий "привіт", ми можемо спробувати вгадати, що за відповідь кімнати використовує адаптивний фільтр. Тоді ми можемо використовувати цю оцінку, з'єднайте всі вхідні сигнали з такою імпульсною відповіддю (яка б дала нам оцінку ехо-сигналу) і відніміть його від того, що йде в мікрофон людини, яку ви подзвонили. На діаграмі нижче показаний адаптивний ехолот.

введіть тут опис зображення

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

wn

xn=(x[n],x[n1],,x[nN+1])T

Nwnx

wn=(w[0],w[1],,x[N1])T

y[n]=xn=wn

y[n]=xnTwn=xnwn

w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwnd[n]xnTxn

μ0μ2

Справжні життєві програми та проблеми

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

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

введіть тут опис зображення

Існує велика кількість літератури як про адаптивних фільтрах, так і для скасування відлуння, а також деякі бібліотеки з відкритим кодом, до яких можна скористатися.


2
"завдання адаптивного фільтра - це сигнал"? Ви випадково слово.
ендоліт

@endolith Дякую Я не міг придумати гарний спосіб її виправити, тому я використав alter . Ви можете редагувати це чимось цікавішим. =)
Фонон

3

Я не впевнений, як визначити, яка затримка відбувається з попередньою калібруванням

Я б почав із модифікації такого алгоритму акустичного відбитків пальців, як той, який використовував Шазам .

Ваші вимоги багато в чому подібні до Shazam (функції повинні пережити алгоритм стиснення, призначений для телефонії; вони також проходять через низькоякісні мікрофони), тому ви, ймовірно, могли використовувати ті самі функції (локальні максимуми потужності в часовому / частотному просторі), хоча ви можете збільшити часовий дозвіл за рахунок роздільної здатності частоти.

Існує також питання про те, наскільки масштабувати сигнал, перш ніж віднімати його.

Рівномірне масштабування майже точно не буде достатньо точним. Вам потрібно зробити щось на кшталт наближення частотної характеристики з фільтром FIR, а потім передавати свій сигнал (затримку) мікрофона через перевернутий фільтр, перш ніж відняти його від прийнятого сигналу.


Відбиток пальців Шазама не може дати точного наближення затримки. Він використовує безліч складних процесів вилучення функцій для порівняння зразків звуку, не всі з яких є часовими.
Фонон

@Phonon, Shazam зараз може використовувати додаткові алгоритми, але той, що у зв'язаному документі, заснований на часі та дає хорошу оцінку затримки.
finnw

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