2016-01-04 13 views
2

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

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

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

General Schematic

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

EDIT: Благодаря mattm Теперь я знаю, что мне нужно что-то вроде AEC, хотя оно может быть не самым эффективным или даже практичным.

Я использую модуль WIFI-UART (HLK-RM04), и у него есть огромная проблема. есть очень значительная задержка, когда модуль преобразует 8-битные образцы аудио в IP-датаграммы. по какой-то причине эта задержка не существует, когда она распаковывает дейтаграммы, отправленные с android =>, чтобы получить образец от android, требуется ~ 50 мс, но для получения одного из микрофона требуется ~ 650 мс. так как я использую частоту дискретизации 7200, что означает, что алгоритм AEC должен работать с набором данных не менее 4680 выборок в секунду, чтобы сохранить его в режиме реального времени.

ответ

3

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

Ваша проблема решена acoustic echo cancellation. Вы можете увидеть примеры цифровых реализаций акустического эхоподавления в Speex audio codec, который сейчас стар, или реализация в WebRTC. Эти реализации, безусловно, нетривиальны.

У меня нет опыта аналоговой акустической эхоподавления.

Если вы не можете выполнять акустическое эхоподавление на одной стороне (не Android), опыт для другой стороны (Android) будет неудовлетворительным.

+0

В настоящее время я подключил его к домофонной системе, поэтому не может использовать гарнитуру. опыт на самом деле плохой на стороне Android, но AEC может быть слишком много, чтобы справиться, даже для телефона Android, не говоря уже о 8-битном UC. я уточню вопрос, чтобы выяснить, почему – M47

 Смежные вопросы

  • Нет связанных вопросов^_^