General Echo HOWTO

Introduction

Echo can be a very difficult problem to overcome in Digium telephony adapters, mainly because each site has its own echo characteristics ("echo profile") which can change over time.  This article defines the two basic types of echo, identifies the type that both software and hardware echo cancelers are equipped to handle, and then discusses troubleshooting techniques to mitigate or eliminate echo.
 

Definition

 

Echo occurs when a speaker's voice signal is transmitted back to the speaker, possibly after a delay.  There are two types of echo present in telephony, acoustic and hybrid echo.  Acoustic echo occurs when audio from a phone loudspeaker is picked up by the microphone, typically on the same handset as the speaker.  Hybrid echo is caused by the reflection of the electrical signal when a sound passes through a hybrid--typically a connection from a two-wire loop to a four-wire transmission line.  A deeper discussion of acoustic and hybrid echo can be found at the following page:

http://en.wikipedia.org/wiki/Echo_cancellation

Note that the software and hardware echo cancelers in DAHDI and Asterisk can only counteract hybrid echo.  Acoustic echo troubleshooting will not be discussed in this article.  If you are experiencing acoustic echo, please consult the manufacturer of your equipment to see if there is anything that can be done for this.

 

 

 

 

Answer

Troubleshooting

 

There are many troubleshooting steps that can generally be taken if you have one of our analog or digital cards, such as the TDM, AEX, or TE series cards.  First, be sure you have upgraded to the latest DAHDI version, see Index of /pub/telephony/dahdi-linux/ for the latest version.   Since both the software and hardware echo cancelers are enabled in DAHDI, using the latest version is crucial to successful echo cancellation.  

Once the latest DAHDI version is installed, enable the echo canceler in /etc/dahdi/system.conf.  The format of the echocanceller directive is as follows:

echocanceller=<echo canceler name>,<channel(s)>[,<channel(s)>[,...]]

Here are some examples:

echocanceller=hwec,1-4   # e.g. a AEX410 with VPMADT032 or VPMOCT032
echocanceller=mg2,25-47  # e.g. second span of TE220 (T1)
echocanceller=kb1,1-15,17-31  # e.g. span of a TE122 (E1)

Next, ensure that echo cancellation is enabled in Asterisk.  In /etc/asterisk/chan_dahdi.conf, ensure the echocancel line appears above the channel definition, like so:

echocancel=yes
channel=>1-4

An alternate value besides "yes" can be given for the echocancel directive.  It must be a power of two (i.e., 16, 32, 64, 128,256,512,1024).  The value "yes" is equivalent to 128.  This number indicates the number of taps the echo canceler will use.  Each millisecond of echo cancellation is equivalent to 8 taps, so 128 taps is 16ms of echo cancellation.  You may need to perform a trial and error process to determine which echocancel value is appropriate for your system.  

The echotraining parameter can also be tweaked to achieve better echo results.  This is only available for the software echo cancelers.  In some instances, the echo canceller doesn't train quickly enough and there is echo at the beginning of a call.  Enabling echo training will cause DAHDI to briefly mute the channel, send an impulse, and use the impulse response to pre-train the echo canceler so it can start out with a much closer idea of the actual echo.  The values may be "yes," "no," or a number of milliseconds to delay before training (default is 400, equivalent to "yes").

echotraining=yes
echotraining=600

WARNING:  In some cases the echotraining option can make echo worse.  If you are trying to debug an echo problem, it is worth checking to see if your echo is better with the option set to yes or no.  Use whatever setting gives the best results.

Analog Card (FXO)

 

If you have one of the TDM or AEX analog devices with an FXO module attached, the first step in troubleshooting echo on your FXO lines is to run an echo calibration.  This is done using the fxotune command.  See the output of fxotune with no options for its usage summary.  Here is an example command to use for a four-port analog card with four FXO modules (AEX410 or TDM410):

fxotune -i 3 -b 1 -e 4 -vvv -p

See the page how-to-basic-fxotune for more details.  

 

Hardware Echo Canceler (VPMOCT series)

 

The VPMOCT032 can be attached to the TDM and AEX analog adapters (series 410, 800, and 2400), and the single-span T1/E1 adapters (TE120 series).  The VPMOCT064 can be attached to the TE200 series T1/E1 adapters, and likewise the VPMOCT128 can be attached to the quad-span TE400 series adapters.  There are no troubleshooting steps that can be taken with the VPMOCT series hardware echo cancelers.  Simply make sure that DAHDI is up to date (thus ensuring the latest VPMOCT firmware is loaded), and that echo cancellation is enabled in system.conf (echocanceller) and chan_dahdi.conf (echocancel).  

Hardware Echo Canceler (VPMADT032)

The VPMADT032 can be attached to the TDM and AEX cards, series 410, 800, and 2400, as well as the single-span TE120 series cards.  As before, make sure that you upgrade DAHDI to the latest available version.  The latest DAHDI version contains the latest shipping VPM firmware and will be loaded when DAHDI loads.  

There are several kernel module parameters for the VPMADT032 that can be tweaked to reduce echo.  Please see the knowledge base article http://support.digium.com/articles/Configuration/VPMADT032-NLP-settings for details on how to do this.

Return to Documentation Home I Return to Sangoma Support