English version

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

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

Для решения этой проблемы эхо, надо четко понимать саму природу проблемы.
В этой статье мы постараемся кратко объяснить и предложить решения проблемы эхо:


В качестве подробной статьи про эхо, рекомендуем статьи Echo Cancellation Demystified и главу "Местный эффект. Противоместные схемы" .

Почему возникает эхо

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

Как можно бороться с эхо

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


Мостовая схема позволила уменьшить эхо до 12db, но в ней невозможно полностью подавить эхо. Связано это с разбросом параметров разных линий и телефонов, подразумевается равенство сопротивления z и сопротивления линии.
Оставшееся после мостовой схемы эхо называют "Гибридным эхом" (hybrid echo).

С появлением IP телефонии, в разговор добавилась задержка на передачу сигнала, и даже остатки Эхо (12db) сильно мешали разговору.
Для подавления гибридного эхо, была разработана математическая модель подавления гибридного эхо, что и было реализовано программно и описано в стандарте G.168 .

Из написанного выше ясно, что эхо возникает на переходе 2-х независимых линий/потоков на передачу и прием (например VoIP клиент, поток E1, телефонная трубка) в одну аналоговую линию. Именно в этом переходе и необходим эхоподавитель (эхокомпенсатор).

Что такое "длина эхо-тракта"

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

  1. Эхоподавитель (echo canceller) должен распологатся как можно ближе к источнику эхо
  2. Эхоподавитель должен быть настроен на соответствующую (или большую) длину эхо-тракта

Как эта задача решается в Asterisk, мифы про программное эхоподавление.


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

Впоследствии, появился эхоподавитель OSLEC, отлично справляющийся с задачей подавления эхо.
Основной проблемой осталась ресурсоемкость, т.к. для подавления эхо требуется большое количество вычислений.
В то же время, сам эхоподавитель может использовать инструкции MMX/SSE2, снижающие загрузку процессора почти на порядок, но из-за ошибок в драйвере DAHDI, эти инструкции не используются.

В нашей сборке мы исправили поддержку инструкций MMX/SSE2 в DAHDI.
В результате, на процессоре Intel Core 2 Q8500 2.3Ghz с платой Quasar-8 реализован шлюз E1->SIP на 240 одновременных разговора, с эхоподавителем на 32ms и компрессией/декомпрессией G.729.
Учитывая низкую (постоянно падающую) стоимость процессоров, реализация эхоподавления/сжатия в DSP более не является необходимым условием для построения нагруженных систем телефонии.

 

Включение программного эхоподавителя в Asterisk

Для включения программного эхоподавителя в asterisk, необходимо:

  1. Указать драйверу DAHDI в файле system.conf, какой эхоподавитель использовать
    echocanceller=oslec,1-30
  2. Включить эхоподавитель в Asterisk в файле chan_dahdi.conf
    echocancel=yes
    echotraining=no
    echocancelwhenbridged=yes
  3. Во время разговора проверить, что эхоподавитель включен
    dahdi show channel N

Величину эхо-тракта можно задать явно в параметре echocancel.
echocancel=128 указывает на эхо-тракт, равный 128/8 = 16 миллисекунд.

   Поиск | Подписка на новости | Контакты Поиск по сайту


  Россия, Новосибирск
  Контакты


©2001-2012 Parabel inc.