24 diciembre, 2007

CSI VIII: Transmisión de datos

Bien, con este post regresamos al fascinante mundo de la Cosas que Sí se dan en Informática. En capítulos anteriores vimos cómo podíamos transmitir datos sobre redes distintas (Internet). Y entonces comenté que los datos (0s y 1s) no son siempre lo que parecen, sino que se codifican de cierta forma buscando algunas propiedades.

En el post de hoy vamos a meternos un poco más en harina para dejar claro conceptos que a menudo se confunden. Con esa base teórica explicaremos algunas técnicas de codificación. Empezamos con términos. Dato es cualquier entidad capaz de transmitir información. Señal es la representación eléctrica o electromagnética de los datos. La señalización es el hecho de la propagación física de las señales a través del medio. Y lo que queremos es comunicar datos mediante su propagación y procesamiento de señales.
Bienvenidos al universo de la transmisión de datos.


Con ejemplos se ve más claro. La voz es el típico caso de dato analógico: toma valores continuos en el tiempo. Los datos digitales toman en cambio valores discretos (prefijados) en el tiempo. Un ejemplo claro son las cadenas de caracteres. Las señales analógicas son ondas electromagnéticas que varían continuamente y que pueden propagarse por medios guiados (un cable de teléfono) o no (el aire). Las señales digitales son secuencias de pulsos de tensión, transmitidos por un medio conductor, como el cable USB.

Entonces ¿los datos analógicos se transmiten mediante señales analógicas y viceversa?. Sí, pero no sólo. En un teléfono típico, la voz (que se mueven en una frecuencia entre 100Hz y 7kHz) se transmite mediante una señal analógica entre 300Hz y 3400Hz. Esto es más que suficiente, pues la mayor parte de la energía de la voz se concentra entre los 700Hz y menos de 2kHz. En el otro extremo el teléfono realiza el proceso inverso y la voz resultante es muy parecida... pero no igual.

¿Qué pasa cuando queremos enviar un fichero (datos digitales) a través de una linea de teléfono (transmisión analógica)?. Que necesitamos un modem: un aparato que modula los datos en una señal de cierta frecuencia portadora. ¿Y cuando necesitamos ciertos codecs para ver una peli en el ordenador? Pues que necesitamos algo que transforme señales digitales en datos analógicos y viceversa. Si no, no va.

Y falta lo más fácil: representar datos digitales mediante señales digitales. Eso es muy sencillo. Si tenemos un dato, por ejemplo un uno, lo representamos con un nivel alto de tensión. Y si tenemos un cero, con un nivel bajo o ausencia de tensión. Y listo. Bueno, sí, pero no se hace de este modo, sobretodo cuando queremos transmitir grandes cantidades de datos y a largas distancias. Es entonces cuando codificamos la señal.

En general, desde ya hace unos años, la transmisión digital se ha impuesto a la analógica. La razón primordial es que es más barato y sencillo lidiar con señales digitales. Las nuevas tecnologías (como fibra óptica) se abaratan y resulta factible tender dorsales a lo largo del océano para comunicar continentes. Se trabaja más fácilmente con señales digitales en la eliminación de ruido, mientras que es necesario aplicar filtros de frecuencias en amplificadores analógicos para evitar la transmisión de señales molestas. Asimismo, es más seguro aplicar técnicas de cifrado sobre datos originalmente digitales que analógicos.

Pero la transmisión digital tiene sus inconvenientes. Especialmente molesta es la atenuación de la señal. Ésta, a largas distancias, se deforma. La calidad del medio transmisor es un factor clave en este caso. Por otro lado existe lo que llamamos ruido, que no es más que la intromisión de señales no deseadas en la nuestra. En ocasiones un pico de intensidad de corriente puede provocar un salto en la señal. En transmisión de voz podríamos oírlo como un chasquido sin la menor importancia. En la señal digital puede provocar que un bit a cero en el origen se vea como un uno en el destino, provocando un error en el mensaje.

¿En qué cosas puede ayudar la codificación empleada?. Pues nos puede ayudar a bajar la frecuencia de señal. Las señales con ausencia de componentes de alta frecuencia se pueden transmitir por canales con menor ancho de banda1. Además, es deseable que la señal no tenga componente de continua, esto es, que que la suma de sus tensiones (señales) se acerque a cero, ya que así se reducen las interferencias.

Pensemos en otro problema menos "físico". ¿Cómo sabemos lo que dura un elemento de la señal (por ejemplo un 1)?. Supongamos que somos el receptor y recibimos, durante un milisegundo, un nivel alto de tensión. ¿Cuántos unos hay ahí?. Vale que podemos ponernos de acuerdo con el receptor para decidir cuando dura... ¡pero el problema es que jamás tendremos el mismo reloj!. Imaginemos que cada uno dura 100ns. Si su reloj se adelanta medio ns respecto al mío, al cabo del microsegundo yo me creeré que he recibido 10 unos... ¡pero él me habrá enviado 15!. Bueno, pues la codificación también puede ayudar en este problema de sincronización.

La codificación también puede ayudar a detectar errores. ¿Qué cómo?. Pues imaginemos que, al codificar, añadamos un bit 0 si el número de 1s transmitidos es par y 1 si es impar. En ese caso el receptor cuenta los unos y, si la paridad no concuerda, sabe que ha existido un fallo2. Claro, que si ha habido un número par de fallos, la cosa ya no funciona. Pero algo tan simple detecta gran número de fallos a bajo nivel, antes de que el software, más lento, se dé cuenta.

La codificación también sirve para minimizar el ruido. Ya veremos cómo. Y por último... hasta ahora hemos estado pensando en codificar UN bit de datos en UN elemento de tensión, pero, ¿y si decido tener no dos sino cuatro niveles de tensión?. Entonces podré codificar DOS bits en UN elemento. Con esta operación tan sencilla acabo de duplicar la capacidad de mi canal... y le he puesto mucho más difícil al receptor enterarse de lo que digo.

Y ya paro. Y en el siguiente post veremos algunas de estas técnicas maravillosas.

1 No hay que confundir ancho de banda con la velocidad de transmisión, ojo, aunque estén relacionados (lo dijo Nyquist). Ancho de banda de un canal hace referencia a las frecuencias que "caben" en él. La velocidad de transmisión son los bits por segundo que se transmiten.
2 Ver: bit de paridad

Mis apuntes de Redes. Tomados del famoso Stallings

Posts relacionados