Usando FXOTune para reducir el eco

Cuando me cambié de piso, allá por noviembre, empecé a tener problemas de eco en las llamadas a través de la TDM. Nada había cambiado de puertas para adentro, así que supuse que este cambio se debía a que estaba a una distancia mayor de la central, o que el par de cobre no estaba en el mejor estado.

De cualquier modo, no era una situación sostenible, ya que era bastante molesto. Buscando un poquillo en google y voip-info.org (para variar), me encontré con esta página sobre fxotune http://www.voip-info.org/wiki/view/Asterisk+fxotune. Copio y pego:

fxotune optimizes the line characteristics of a TDM device to minimize the *source* of echo. This is generally referred to as ‘balancing the hybrid’ and is quite important in echo cancellation. Once the hybrid is properly balanced, software echo cancellers will work very nicely.

No soy teleco, pero ese balanceo del híbrido, viene a ser ajustar la impedancia (resistencia) del puerto FXO, para que coincida con la de la línea, y evitar que se refleje lo menor posible la señal enviada o recibida. Si estoy metiendo la pata hasta el fondo, hacédmelo saber jeje. También ajusta los coeficientes de eco, aunque aquí sí que estoy totalmente perdido.

Por cierto, las clónicas vienen configuradas con una impedancia fija (no configurable) de 600 ohmnios, que está bien para las líneas americanas, no así para las españolas y gran parte de Europa. Si tienes una clónica, no te molestes.

Conociendo al enemigo

No hay mejor cosa que poder “ver” el eco ;). La herramienta fxotune permite hacer un análisis y volcar el resultado a un fichero CSV. Éste contiene 2 columnas, la primera el valor de la señal inyectada en la línea (representada en magenta), y la segunda la señal reflejada por la misma (en azul). Esta última, en condiciones óptimas, debería ser 0.

Analizamos el eco en el canal 4, empleando una señal de 1004Hz:

# ./fxotune -d -b 4 -w 1004

Luego usando Excel o OOCalc, usando los datos del fichero fxotune_dump.vals, generamos un gráfico, tal que así:
Antes

Como véis, hay una gran parte de la señal que nos viene de vuelta, y todo eso se lo mama el cancelador de eco. Pobrecillo.

El funcionamiento de fxotune es sencillo.

  1. Abre el puerto FXO
  2. Envía un dígito DTMF (5), de forma que se deje de escuchar el tono de invitación a marcar, y se quede el canal abierto.
  3. Envía una serie de señales y lee la respuesta.
  4. Pasamos al siguiente puerto FXO y empezamos de nuevo
  5. Genera /etc/fxotune.conf, que nos permitirá cargar los coeficientes al arrancar la máquina.

Al tajo:

fxotune -i 5
# Cargamos los valores que acabamos de calcular:
fxotune -s

Repetimos el test de antes, y obtenemos este otro gráfico, donde podemos ver que la señal reflejada se ha reducido considerablemente. Lo suficiente para que el cancelador de eco por software pueda hacerse cargo de él, y eliminarlo.
Despues

No hay que olvidar añadir un “fxotune -s” en /etc/init.d/rc.local o donde lo creáis conveniente, para que estos valores optimizados para nuestra línea se carguen en cada reinicio.

Conclusión

Ya no tengo eco en la línea ;)

Espero que os sirva.. No os olvidéis de comentar aquí los resultados.

Actualización 10-03-2007: Es necesario ejecutar “fxotune -s” entre test y test, para que se carguen efectivamente los coeficientes en la tarjeta. Usamos señal de 1004Hz para dibujar la gráfica. Recordatorio de ejecutar “fxotune -s” al iniciar el sistema.

Escrito por julianjm el 8/03/2007. |
Tags: , , ,

29 Comments »

  1. […] colega Julian J.M. acaba de escribir en su blog un estupendo artículo sobre cómo analizar y manejar la herramienta […]

    Pingback by SinoLogic » Analizando y Cancelando el eco con FXOTune SPAIN WordPress 2.0.4 — 8 March 2007 @ 19:52

  2. […] del puerto FXO, de manera que se adapte mejor a la de la línea. En el blog de Julian JM tenéis un howto muy […]

    Pingback by Mi Brain-Training Personal» Blog Archive » Cancelando el eco en plan pr0 WordPress 2.0.5 — 9 March 2007 @ 17:24

  3. Muy interesante.
    Yo lo queria aplicar para un enlace gsm. Supongo que
    si que mediría es el eco entre la TDM i el enlace, pero lo que interesa es con todo el circuito establecido llamando a un mobil. ¿Como puedo establecer una llamada completa durante la prueba?
    No lo he probado todavia pero si con -i le hago llamar, no veo como podria establecer un retardo para que se establezca la llamada y se pueda descolgar.

    Comment by albert busoms SPAIN Windows XP Internet Explorer 6.0 — 12 March 2007 @ 10:43

  4. Hola Albert,

    Ten en cuenta que este proceso solamente ajusta la impediancia del puerto, para que coincida con el de la línea.

    En principio, es el enlace TDM el que tiene que garantizar que no haya eco. Y si lo hay, es el cancelador de eco que use asterisk el que se puede hacer cargo, si no es muy grande, claro.

    Julian J. M.

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.2 — 12 March 2007 @ 11:26

  5. No sé a ciencia cierta si daría mejores resultados si los test que ejecuta el FXOTune fuesen más reales al probar con un número de teléfono en lugar de con un dígito.

    ./fxotune -i -e 1 -n -l 8 -m 18 -vvvvvv

    De esta manera, podrías obtener un eco diferente posiblemente más acorde a lo que buscas.

    Un saludo,

    Comment by Elio Rojano SPAIN Debian GNU/Linux Mozilla Firefox 2.0.0.2 — 20 March 2007 @ 9:07

  6. Hola Elio!

    Lo que se pretende reducir con fxotune es el eco eléctrico, causado por rejlejos de la señal por desajustes en las impedancias. Y eso require realizar el ajuste para el tramo de cable desde tu casa hasta la central telefónica.

    El tramo desde la central hasta el domicilio del otro abonado es algo que tu no puedes solucionar ;). Además dependerá de si es otra línea analógica, o digital, o ambas (enlace digital de central a central, y paso a analógico en esta última).

    En sistemas puramente digitales (SIP, RDSI) no existe el eco eléctrico (canales de ida y vuelta independientes). El acústico depende de la calidad y/o ajustes de los terminales.

    Julian

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.2 — 20 March 2007 @ 10:24

  7. Hola.
    He probado a realizar el proceso y el comando fxotune solo me admite -i y -s
    Cuando ejecuto como lo pones me sale esto

    [root@ht /]# fxotune -d -b 4 -w 1004
    Usage: fxotune
    -i : Tests for FXO modules and sets echo coefficients, dialing to clear dialtone
    -s : Sets the FXO modules echo coefficients on your system to the best settings

    Comment by tecnicosht SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 21 March 2007 @ 11:05

  8. #7 necesitas tener instalado el Zaptel 1.4.x.

    Yo en su día lo tuve funcionando con asterisk 1.2.x. Son compatibles.

    Julian.

    Comment by julianjm SPAIN Windows 2000 Mozilla Firefox 1.5.0.10 — 21 March 2007 @ 13:02

  9. y no se puede hacer algo similar con zaptel 1.2.x ??

    Comment by tecnicosht SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 2 April 2007 @ 15:49

  10. Sí, también dispone de fxotune, aunque el algoritmo que usa se mejoró bastante en zaptel 1.4.x. Además del ajuste de la impedancia, “toca” algunos otros parámetros.

    Otra cosa que tampoco tiene es la posibilidad de sacar estas gráficas tan chulas jejeje.

    Saludos

    Comment by julianjm SPAIN Ubuntu Linux Mozilla Firefox 2.0.0.3 — 2 April 2007 @ 22:57

  11. Muy buen articulo si señor. Una cosa, el fxotune -s hay q ejecutarlo antes o despues que cargue el asterisk. Estop es para configurar el script de arranque.

    Gracias..

    Comment by hercross SPAIN Windows XP Mozilla Firefox 1.5.0.11 — 19 April 2007 @ 7:44

  12. Se ejecuta _antes_. Yo añadí un par de lineas a /etc/init.d/zaptel, alrededor de la línea 105. Son las marcadas con #####:

    elif [ $system = redhat ]; then
    action “Running ztcfg: ” /sbin/ztcfg
    fi
    RETVAL=$?

    sleep 5 ######
    /sbin/fxotune -s ######

    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    ;;
    stop)

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 19 April 2007 @ 7:55

  13. Pregunta, se podria ejecutar en un script aparte. M explico yo tengo hehco un escript en el que le cargo los modulos necesario y arranco el asterisk, antes de asterisk start podria meter el fxotune -s?

    Que en mi caso seria :

    /usr/src/asterisk/zaptel1.xxxxxx/fxotune -s

    Comment by hercross SPAIN Windows XP Mozilla Firefox 1.5.0.11 — 19 April 2007 @ 8:07

  14. Por supuesto. Antes de iniciar asterisk, y después de cargar los módulos, inserta:

    sleep 5
    /usr/src/asterisk/zaptel1.xxxxxx/fxotune -s

    Saludos

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 19 April 2007 @ 8:23

  15. Ok muchisimas gracias

    Comment by hercross SPAIN Windows XP Mozilla Firefox 1.5.0.11 — 19 April 2007 @ 8:24

  16. Otra cosa yo lo he ejecutado, tengo zaptel 1.2 asi q no puedo sacar las graficas, despues de ejecutarlo abro el fxotune.conf y me saca esto:

    3=3,0,0,0,0,0,0,0,0
    4=3,0,0,0,0,0,0,0,0

    Son los canales 3 y 4, los datos que sacan son correctos?

    Gracias..

    Comment by hercross SPAIN Windows XP Mozilla Firefox 1.5.0.11 — 19 April 2007 @ 8:30

  17. Sí, es correcto. Con zaptel 1.2 solo ajusta la impedancia de la línea (el primer valor de los que aparecen. En la versión 1.4 ajustan también otros coeficientes, pero que no sabríadecirte para qué sirven.

    Saludos
    Julián.

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 19 April 2007 @ 8:43

  18. Ok entendido, sabes de algun sitio en el que pueda ver infoprmacion acerca del primer digito?

    Mas que nada para saber si en una instalcion me pone un 3 como en esta y en otra un 8 (pej) saber que quiere decir eso, o que esta haciendo realmente.

    Thanks

    Comment by hercross SPAIN Windows XP Mozilla Firefox 1.5.0.11 — 19 April 2007 @ 8:49

  19. Buscando sobre el tema, he dado con este PDF:
    http://www.silabs.com/public/documents/tpub_doc/anote/Wireline/Silicon_DAA/en/an84.pdf

    El primer valor, se refieren a el como ACIM,
    y los 8 restantes, como Coef1 a Coef8.

    El foro donde comentan sobre este tema:
    http://forums.whirlpool.net.au/forum-replies-archive.cfm/483550.html

    Saludos
    Julián google-is-your-friend Menendez.

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 19 April 2007 @ 9:38

  20. Ok muchas gracias vamos a leer un poko.

    Gracias

    Comment by hercross SPAIN Windows XP Mozilla Firefox 1.5.0.11 — 19 April 2007 @ 10:38

  21. Hola Julian, he probado lo que me comentas y si que cambian los datos. Lo unico que no consigo es sacar las graficas. Yo tengo el archivo .vals y lo abro con el excel, creo la grafica, pero lo unico que consigo es un borron amarillo.

    Podrias decirme como sacarlas?

    Gracias..

    Comment by jgonzalez SPAIN Windows XP Mozilla Firefox 2.0 — 22 April 2007 @ 18:27

  22. #21, cuando lo abres en una hoja de cálculo, tienen que quedarte 3 columnas, la primera con el número de muestra, y las dos siguientes con la señal emitida y la recibida.

    Yo lo que hice fue seleccionar un subconjunto de los datos, porque si no no se apreciaba bien el dibujo de la señal. Creo que seleccioné unas 100 muestras (filas). Y usé las opciones por defecto para el gráfico.

    Si sigues con problemas, envíame la hoja de cálculo con los datos y te echo una mano.

    Julián.

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.3 — 22 April 2007 @ 19:21

  23. Perfecto ya me sale, yo es que cogia todos los datos y claro en tan poco espacio me salia un burruño.

    Muchas gracias

    Comment by jgonzalez SPAIN Windows XP Mozilla Firefox 2.0 — 22 April 2007 @ 19:36

  24. Hola Julian,

    Antes que nada muy buen articulo.
    Pasando a la consulta… yo diariamente roto los logs de Asterisk con logrorate y en el script coloco esta linea para que Asterisk se reinicie (asi libera memoria, etc.)

    /usr/sbin/asterisk -rx ‘ restart when convenient’ > /dev/null 2> /dev/null

    Con este reiniciado se pierde la carga de los valores de fxotune.conf ? es decir, deberia volver a correr fxotune -s ? en tal caso, se me ocurre de colocarlo en el script de safe_asterisk.

    Saludos y gracias.
    Maxi.

    Comment by Maxi ARGENTINA Windows 2000 Mozilla Firefox 2.0.0.6 — 7 August 2007 @ 14:13

  25. hola
    Tengo una duda como puedo eliminar el eco en una línea digital (E1) yo había leído que las líneas digitales no presentaban este tipo de problema, pero tengo un asterisk 1.4.9 con una tarjeta TE120P una línea digital E1 axtel con 30 líneas y en ocasiones escucho eco al realizar una llamada. El fxotune solo funciona cuando trabajo con tarjetas para líneas análogas si no me equivoco. Alguna idea???

    Comment by karola MEXICO Windows XP Internet Explorer 7.0 — 17 January 2008 @ 23:53

  26. Las líneas digitales no “generan” eco eléctrico… Los canales de envío y recepción son independientes.

    El eco que tu escuchas se está produciendo en algún punto entre tu Asterisk y la persona a la que llamas, y es donde se pasa de 4 a 2 hilos (de digital a analógico).

    Este eco debería anularse en el híbrido que hace la conversión, pero no suele hacerse el caso en llamadas nacionales (muy poco retardo). Si no hay VozIp por medio, no deberías notarlo.

    Haz la prueba a llamar desde una extensión Zap, en lugar de un teléfono IP, y debería reducirse en gran medida.

    Utiliza un cancelador de eco por software (HPEC, Octasic, OSLEC).

    Comment by julianjm SPAIN Ubuntu Linux Mozilla Firefox 2.0.0.11 — 28 January 2008 @ 10:05

  27. Julian

    Es posible instalar HPEC para lineas digitales??? y eliminar el echo.. O me conviene mejor poner una tarjeta TE122B que ya trae echo cancelation.

    Comment by Ruben Zamora MEXICO Windows XP Internet Explorer 7.0 — 29 March 2008 @ 13:56

  28. Si las líneas utilizan Zaptel (primarios o rdsi básico con bristuff) supongo que sí.

    Con mISDN se que funcionan OSLEC (gpl) y el cancelador de Octasic. Beronet tiene una versión de mISDN parcheada para usar este cancelador: http://www.beronet.com/downloads/SoftEcho/ Eso sí, hay que pagar por canal.

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.13 — 29 March 2008 @ 14:27

  29. Hola julian como andas
    Una consulta este cancelador de eco funciona si uso equipos como los spa de linksys

    Comment by Ezequiel ARGENTINA Windows XP Internet Explorer 7.0 — 19 April 2008 @ 4:46

RSS feed for comments on this post. | TrackBack URI

XHTML ( Puedes usar estas etiquetas): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .