2.6 La digitalización de señales

Las señales (independientemente de si representan fuentes de información analógicas o digitales) necesitan digitalizarse antes de ser procesadas por un sistema digital (una computadora, por ejemplo). El proceso al que deben ser sometidas se conoce como digitalización y consiste básicamente en registrar el valor aproximado de la señal cada cierto intervalo de tiempo.

El número de muestras capturadas durante la digitalización está directamente relacionado con la máxima componente de frecuencia de la señal. Dicha relación es expuesta por el Teorema del Muestreo Uniforme de esta forma:

Si capturamos 2n muestras/segundo de una señal entonces la máxima componente de frecuencia registrada de dicha señal tiene n Hercios.

La digitalización implica normalmente una pérdida irreversible de parte de la información que transporta la señal, por dos motivos:

  1. Si la señal no está limitada en banda por mucho que aumentemos la frecuencia de muestreo no será posible registrar todas sus componentes de frecuencia.
  2. Si la señal no es digital, es imposible utilizando un número finito de bits representar cada uno de sus estados.

Evidéntemente, las señales digitales digitalizadas sólo adolecen del primer problema.

2.6.1 Digitalización de señales digitales

Una forma sencilla de crear versiones digitales de señales digitales consiste en replicar tantas veces como sea preciso cada uno de los distintos valores que toma la señal digital. Esto es lo que realiza el programa http://www.ace.ual.es/˜vruiz/docencia/redes/practicas/sampler.c (véase el Apéndice H.8). Nótese que si la señal no fuera digital este proceso no sería tan simple.

Cuestión 2.2:
Razone por qué no sería tan simple.

En la entrada de sampler.c, cada número real (representado físicamente como un número en punto flotante de 32 bits de precisión) indica un estado de la señal digital. La salida es simplemente una replicación de cada uno de estos estados.

Cuestión 2.3:
¿No cree que sobran bits para representar cada muestra? ¿Cuántos cree que serían realmente necesarios? ¿Por qué cree que se han usado números reales?

Para generar el fichero de entrada para sampler.c podemos usar el programa http://www.ace.ual.es/˜vruiz/docencia/redes/practicas/ascii2float.c (véase el Apéndice H.2).

Finalmente, para averiguar el contenido de un fichero .float podemos utilizar el programa http://www.ace.ual.es/˜vruiz/docencia/redes/practicas/float2ascii.c (véase el Apéndice H.5).

Taller 2.1:
  1. Ejecute el PC virtual (http://www.ace.ual.es/˜vruiz/docencia/redes/debian). El resto de pasos se realizarán en él.
  2. Descarge el fichero http://www.ace.ual.es/˜vruiz/docencia/redes/practicas/sources.tar.gz.
  3. Descomprima el fichero anterior. Se creará un directorio llamado sources. En ese directorio encontraremos todos los programas que vamos a utilizar.
  4. Compile los fuentes en C. Situándonos en el directorio sources, escribir:
    make all

  5. Asegurarse de que los scripts poseen permiso de ejecución para el dueño del fichero (aparece una “x” en la cuarta posición comenzando desde la izquierda cuando escribimos el comando ls -l en el directorio en el que hemos descargado el script).
Taller 2.2:
Ejecute:
ascii2float << EOF | float2ascii

y escriba una serie de números reales separados por la tecla <Enter>. Cuando no desee introducir más números escriba EOF y pulse finalmente <Enter>. Nota: con el redirector de flujo de entrada << provocamos que todo lo que tecleemos se convierta en la entrada estándar del programa sobre el que estamos realizando la redirección, hasta que no escribimos el código de fin de entrada (en este caso la cadena EOF). Nota 2: el redirector de flujo | provoca que la salida estándar del programa que queda a la izquierda se la entrada estándar del programa que queda a la derecha.