Elucubraciones sobre el eco en RDSI

Lo que en principio iba a ser una simple puntualización en la lista de correo asterisk-es, se me convirtió en una parrafada inmensa, que paso a publicar en este humilde blog X-D

Una llamada en RDSI es una comunicación de datos 64kbps full duplex, es decir, 8Kb/s en cada sentido, e independientes, utilizando el codec G711a. O funciona, o no funciona, pero no produce eco por que se mezcle el canal de ida con el de vuelta. Así que realmente da lo mismo qué tarjeta RDSI utilices, si funcionan las llamadas de voz, tendrás exactamente el mismo tipo de eco, tengas una HFC de 1 puerto, o una OctoBRI. Ojo, que no hablo de tarjetas activas, con su DSP y demás florituras, sino de Billions y AVM Fritz! y similares. Continúa:

¿Cuándo tenemos eco al usar una línea RDSI? En llamadas 100% digitales (de extremo a extremo), si usamos un teléfono de mala calidad, y el micro se retroalimenta con la salida del altavoz, por ejemplo al usar el manos libres. Esto es eco acústico.

La otra posibilidad es que en el otro extremo usan una línea analógica. Por consiguiente, en en algún punto del camino existirá un híbrido donde se hará la transformación de digital a analógico (paso de 4 a 2 hilos). Es aquí donde lo que tu has enviado puede volver por el canal de vuelta.

De cualquier modo, esta señal que retorna nos afecta mucho más a los que usamos VoIP. El usuario de un EuroMix RDSI pinchado directamente al TR1, por ejemplo, escuchará su voz, pero con tan poco retardo, que se convierte en “sidetone”, y eso es bueno. Evita que gritemos más de la cuenta pensando que no nos escuchan.

Decía que nos afecta en mayor grado a los usuarios de VoIP porque, por cuestiones de diseño (paquetización), estamos introduciendo una latencia adicional (20ms como mínimo, más las que introduzca la propia red IP). Ahora es cuando ese “sidetone” se convierte en eco, con un retraso de 40ms como mínimo (más 80ms si estamos en una ADSL externa). Por cierto, esta es la razón de que normalmente se use “ecochancelwhenbridged=no” cuando hablamos por un teléfono conectado al puerto FXS y la línea está en el FXO. No es necesario cancelar nada, ya que no molesta, al ser el retardo muy pequeño.

Pero volvamos al ejemplo. Este eco (que ahora sí es molesto) lo cancelamos antes de pasar la llamada a VoIP. A muy grandes rasgos, almacenamos los últimos segundos de audio en enviamos a la línea, y lo comparamos con el posible retorno, unos cuantos milisegundos en el futuro, buscando rastros de señal retornada y anulándolos. Los canceladores de eco suelen usar 128 milisegundos como mucho (con zaptel puedes subirlo a 256, aunque me parece excesivo). Si el retardo es superior, cualquier usuario (y no sólo los de VoIP) se quejaría de eco. En llamadas internacionales, o de larga distancia, es la propia compañía telefónica la que hace la cancelación de eco. La señal de retorno no sería percibida como sidetone, sino como eco (la señal no viaja más rápido que la velocidad de la luz, ida y vuelta a Nueva York no es instantáneo). Pero claro, en llamadas “locales” no les compensa utilizar estos canceladores (son un recurso limitado), y más cuando solo nos beneficiaría a unos pocos.

Respecto a las ganancias, mi opinión es que hay que dejarlas a 0, tanto txgain como rxgain. Como hemos dicho, una llamada RDSI es una comunicación de datos, lo que llega es exactamente igual a lo que salió. Si aumentas el rxgain para compensar las llamadas de un usuario que está en analógico, por poner un ejemplo, estarás también alterando ganancia de los que te llaman desde otra RDSI. Es el usuario analógico el que tiene que ajustar su ganancia de salida, o en todo caso el que gestione el híbrido (i.e, la compañia telefónica).

Este punto lo tengo comprobado empiricamente:

  1. En una centralita asterisk conectada a una RDSI, configuré un DID que únicamente llamaba a la aplicación.
  2. Desde otra centralita asterisk, en otra ciudad, pero también por RDSI, hice una llamada a ese DID.
  3. Usando ztmonitor en ambos extremos, las lecturas eran idénticas.

Por cierto, como no conseguí ningún número “oficial” de teléfonica para hacer el milliwatt test, utilicé la centralita del punto 1 para ajustar las ganancias de mi TDM en casa, siguiendo las indicaciones de este email de la lista asterisk-users: http://lists.digium.com/pipermail/asterisk-users/2004-November/064312.html

Un documento muy bueno en temas de eco y VoIP es éste de Cisco: http://www.cisco.com/en/…/technologies_white_paper09186a00800d6b68.shtml

Bueno, esto es todo por hoy, y eso que iba a ser un email cortito jejeje

echo “Eco!”;

Escrito por julianjm el 10/04/2007. |
Tags: ,

2 Comments »

  1. Un matiz sobre los milisegundos, creo que son taps en vez de milisegundos.

    Te adjunto lo que sale en el zapata.conf:

    ; Enable echo cancellation
    ; Use either “yes”, “no”, or a power of two from 32 to 256 if you wish to
    ; actually set the number of taps of cancellation.

    en el misdn.conf:

    ; this enables echocancellation, with the given number of taps
    ; be aware, move this setting only to outgoing portgroups!
    ; A value of zero turns echocancellation off.
    ;
    ; possible values are: 0,32,64,128,256,yes(=128),no(=0)

    y en el voip-info:

    echocancel: Disable or enable echo cancellation (default is ‘yes’). It is recommended that you do not turn this off. You may specify echocancel as ‘yes’ (128 taps), ‘no’ (0 taps, disabled), or a preset number of taps which are one of 16, 32, 64, 128, or 256. Each tap is one sample from the data stream, so on a T1 this will be 1/8000 of a second. Accordingly the number of taps equate to a 2ms, 4ms, 8ms, 16ms or 32ms tail length. Beware that if you set echocancel to a different value, Asterisk will fall back to the default of 128 taps without warning.
    echocancel=no

    Para opciones más potentes (hasta 256ms o 1024 taps) en la cancelación de eco software también hay:

    Octaware SoftEcho que se puede descargar de beronet y ya está integrada en mISDN.

    Comment by Lluis SPAIN Windows XP Mozilla Firefox 2.0.0.4 — 13 July 2007 @ 11:11

  2. Efectivamente, 8 taps=1ms, por lo que 256 taps serían unos 32ms. Más que de sobra para llamadas nacionales en la red conmutada. Para largas distancias puede quedarse corto, pero ya entran en funcionamiento los canceladores de las compañías telefónicas.

    Gracias por la corrección!

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.4 — 13 July 2007 @ 11:21

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> .