Какие методы можно использовать для идентификации и удаления эха из аудиосистемы?

14

Фон

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

Я беспокоюсь о том, что звук из динамиков будет поднят микрофоном и отправлен обратно оригинальному человеку. Раньше я слышал, что это случалось все время в первые дни разговоров VoIP, но вряд ли слышал это больше.

Я предполагаю, что группы придумали способы отменить эхо, но как они это делают?

подходы

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

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

Моя следующая мысль, что в Интернете должен быть кто-то, кто делал это раньше с успехом, но не нашел хороших примеров. Поэтому я прихожу сюда, чтобы посмотреть, какие методы могут быть использованы для решения этого типа проблемы.

Kellenjb
источник
1
Акустическое эхоподавление - это обширная предметная область с множеством книг и десятилетий научных работ по этой теме. Вот одна SO Q & A по теме: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2
1
@ hotpaw2 Не знаю, почему на вашу ссылку Акустическое эхо в ссылке Java не нажимали.
Марк Бут
Пожалуйста, предложите мне, я пытаюсь отменить эхо, присутствующее в речи, вход в один микрофон в зале. я пробую это, как вы упомянули адаптивный фильтр, для этого вы даете опорный сигнал в качестве разговора на дальнем конце. но я не здесь опорный сигнал. мой сигнал - это эхо оригинального сигнала, который, скажем, 500 мс с сигналом динамика на микрофон.

Ответы:

15

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

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

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

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

Как видно из диаграммы, сигнал фильтруется (свернут с) ш п для получения выходного сигнала д [ п ] . Затем мы вычитаем д [ п ] от требуемого сигнала д [ п ] для получения ошибки сигнала е [ п ] . Обратите внимание, что w n - это вектор коэффициентов, а не число (следовательно, мы не пишем w [ n ]Икс[N]весNd^[N]d^[N]d[N]е[N]весNвес[N]). Поскольку он меняет каждую итерацию (каждую выборку), мы присваиваем текущую коллекцию этих коэффициентов . Как только e [ n ] получено, мы используем его для обновления w n по выбранному алгоритму обновления (подробнее об этом позже). Если вход и выход удовлетворить линейную зависимость , которая не изменяется с течением времени , и данный алгоритм обновления хорошо разработанный, ш п будет в конечном итоге сходятся к оптимального фильтра и д [ п ] будет внимательно следить за д [ п ] .Nе[N]весNвесNd^[N]d[N]

Эхоподавление

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

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

Икс[N]d[N]весNИкс[N]Y[N]d[N]е[N]знак равноd[N]-Y[N]

весN

ИксNзнак равно(Икс[N],Икс[N-1],...,Икс[N-N+1])T

NвесNИкс

весNзнак равно(вес[0],вес[1],...,Икс[N-1])T

Y[N]знак равноИксNзнак равновесN

Y[N]знак равноИксNTвесNзнак равноИксNвесN

вес

весN+1знак равновесN+μИксNе[N]ИксNTИксNзнак равновесN+μИксNИксNTвесN-d[N]ИксNTИксN

μ0μ2

Реальные приложения и проблемы

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

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

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

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

Phonon
источник
2
«Адаптивный фильтр работает с сигналом»? Вы случайно ни слова.
эндолит
@endolith Спасибо. Я не мог придумать хороший способ исправить это, поэтому я использовал alter . Вы можете отредактировать это с чем-то более интересным. =)
Фонон
3

Я не уверен, как определить задержку без какой-либо предварительной калибровки

Я бы начал с изменения алгоритма акустической дактилоскопии, такого как Shazam .

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

Существует также проблема того, насколько масштабировать сигнал, прежде чем вычесть его.

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

finnw
источник
Снятие отпечатков пальцев Shazam не может дать точное приближение задержки. Он использует множество сложных процессов извлечения признаков для сравнения аудиосэмплов, не все из которых основаны на времени.
Фонон
@Phonon, Shazam, возможно, сейчас использует дополнительные алгоритмы, но один из приведенных в статье статей основан на времени и дает хорошую оценку задержки.
Finnw
Возможно, что-то вроде взаимной корреляции отправленных и полученных спектрограмм скажет вам задержку. Должен быть устойчивым к эффектам фильтрации и добавленному шуму
эндолит