La alternativa a TDM es la multiplexación en el dominio de la frecuencia o FDM
(Frecuency Division Multiplexing). En este caso (como ocurre con las emisiones de radio)
cada emisor transmite de forma continua en un rango de frecuencias diferentes. A cada
una de estas bandas de frecuencias se les denomina canal. Este proceso se describe para
tres señales en la Figura 3.3.
En dicha figura wa, wb y wc son los anchos de banda de tres señales a(t), b(t) y c(t),
respectivamente. wc1 y wc2 son la frecuencia de dos señales portadoras c1(t) y c2(t) que
modulan a las señales b(t) y c(t), respectivamente. Si se cumple que wc1 > wa y que
wc2 > wa + wb es posible construir una señal s(t) como
o lo que es lo mismo, construir S(f) como
de la que es posible, más tarde, extraer las señales multiplexadas a(t), b(t) y c(t). Para
ello hay que seleccionar el canal de frecuencias correspondiente y desmodular si es
preciso.____________________________________________________________
Taller 3.1:
- Ejecute el PC virual. El resto de pasos se realizarán en este PC.
- Vamos a multiplexar y desmultiplexar en la frecuencia dos señales
digitales. Lo primero que tenemos que tener en cuenta es que el
espectro de las señales digitales no está limitado en banda (recuérdese la
práctica anterior). Por tanto, tendremos que filtrar ambas señales antes
de multiplexarlas. En este ejemplo supondremos que vamos a
transmitir dos señales a(t) y b(t) que transportan 16 bits cada
una a una tasa de 2 bits/segundo y que el ancho de banda
disponible es de 16 Hz. Dedicaremos, por tanto, 8 Hz a cada
canal. A continuación modularemos una de las señales (b(t), por
ejemplo) utilizando una portadora de 8 Hz y sumaremos las
dos señales. Por tanto, la operación que estamos haciendo
es
donde c(t) es la señal portadora. En el dominio de la frecuencia estamos
realizando el cálculo
Para desmultiplexar cada señal hay que seleccionar el canal de
frecuencias correspondiente. En el caso de a(t) sólo hay que aplicar un
filtro paso bajo que seleccione el canal
Hz. Con esto estamos
eliminando B(f) *C(f) y no es necesario desmodular. Para la recuperar
señal b(t) tendremos que eliminar la banda
Hz con lo que
eliminamos A(f) y a continuación desmodular para obtenemer
B(f).
El script http://www.ace.ual.es/\~{}vruiz/docencia/redes/practicas/progs/multiplexacion-desmultiplexacion.sh,
cuyo contenido se muestra a continuación:
#!/bin/bash
#
# Multiplexación y desmultiplexación de dos señales digitales
#
#
# Creamos la señal a(t)
#
rm -f a_signal.txt # Borramos el fichero
echo "-1.0" >> a_signal.txt # 1. El valor -1 representa el bit 0
echo "1.0" >> a_signal.txt # 2. El valor 1 representa el bit 1
echo "1.0" >> a_signal.txt # 3.
echo "1.0" >> a_signal.txt # 4.
echo "-1.0" >> a_signal.txt # 5.
echo "-1.0" >> a_signal.txt # 6.
echo "-1.0" >> a_signal.txt # 7.
echo "1.0" >> a_signal.txt # 8.
echo "1.0" >> a_signal.txt # 9.
echo "1.0" >> a_signal.txt # 10.
echo "-1.0" >> a_signal.txt # 11.
echo "-1.0" >> a_signal.txt # 12.
echo "1.0" >> a_signal.txt # 13.
echo "-1.0" >> a_signal.txt # 14.
echo "-1.0" >> a_signal.txt # 15.
echo "-1.0" >> a_signal.txt # 16
ascii2float < a_signal.txt | sampler 128 > a_signal.float
#
# Creamos la señal b(t)
#
rm -f b_signal.txt # Borramos el fichero
echo "1.0" >> b_signal.txt # 1. El valor -1 representa el bit 0
echo "-1.0" >> b_signal.txt # 2. El valor 1 representa el bit 1
echo "-1.0" >> b_signal.txt # 3.
echo "1.0" >> b_signal.txt # 4.
echo "-1.0" >> b_signal.txt # 5.
echo "-1.0" >> b_signal.txt # 6.
echo "-1.0" >> b_signal.txt # 7.
echo "1.0" >> b_signal.txt # 8.
echo "-1.0" >> b_signal.txt # 9.
echo "1.0" >> b_signal.txt # 10.
echo "-1.0" >> b_signal.txt # 11.
echo "1.0" >> b_signal.txt # 12.
echo "1.0" >> b_signal.txt # 13.
echo "1.0" >> b_signal.txt # 14.
echo "-1.0" >> b_signal.txt # 15.
echo "1.0" >> b_signal.txt # 16.
ascii2float < b_signal.txt | sampler 128 > b_signal.float
#
# Filtramos a(t). Transmite a una tasa de 2 bps y hay 128 muestras/bit.
# Por tanto, la frecuencia de muestreo es 256 muestras/segundo.
# Esto significa que la máxima componente de frecuencia registrada para a(t)
# es de 128 Hz. Como vamos a filtrar a 8 Hz, cut-off_band = 8/128 = 0.0625.
#
low_pass_filter 0.0625 a_signal.float > a_filtered_signal.float
#
# Lo mismo hacemos para b(t).
#
low_pass_filter 0.0625 b_signal.float > b_filtered_signal.float
#
# Modulamos la señal b(t) usando una portadora c(t).
# b(t) tiene un total de 128*16=2048 muestras
# y 2048/2=1024 bandas de frecuencia. Como el ancho de banda registrado es de
# 128 Hz, cada banda representa un total de 128/1024 = 0.125 Hz. Si queremos
# modular b(t) hasta los 8 Hz, 8/0.125=64 bandas.
#
modulator 64 b_filtered_signal.float > b_modulated_signal.float
#
# Sumamos s(t) = a(t) + c(t)b(t).
#
add a_filtered_signal.float b_modulated_signal.float > s_signal.float
#
# Visualizamos a(t) filtrada, b(t) filtrada y s(t).
#
float2ascii < a_filtered_signal.float > a_filtered_signal.txt
draw_signal.sh a_filtered_signal.txt "a(t) filtrada"
float2ascii < b_filtered_signal.float > b_filtered_signal.txt
draw_signal.sh b_filtered_signal.txt "b(t) filtrada"
float2ascii < s_signal.float > s_signal.txt
draw_signal.sh s_signal.txt "s(t)"
#
# Visualizamos A(f) filtrada, B(f) filtrada y S(f).
#
./spectrum_analyzer a_filtered_signal.float > a_filtered_spectrum.txt
draw_signal.sh a_filtered_spectrum.txt "A(f) filtrada"
./spectrum_analyzer b_filtered_signal.float > b_filtered_spectrum.txt
draw_signal.sh b_filtered_spectrum.txt "B(f) filtrada"
./spectrum_analyzer s_signal.float > s_spectrum.txt
draw_signal.sh s_spectrum.txt "S(f)"
#
# Desmultiplexamos a(t). Eliminamos la banda de frecuencia
# ]8, 16] Hz.
#
low_pass_filter 0.0625 s_signal.float > a_desmultiplexed_signal.float
#
# Desmultiplexamos b(t). Filtramos y desmodulamos.
high_pass_filter 0.0625 s_signal.float > b_unmodulated_signal.float
demodulator 64 b_unmodulated_signal.float > b_desmultiplexed_signal.float
#
# Visualizamos a(t) desmultiplezada y b(t) desmultiplexada.
#
float2ascii < a_desmultiplexed_signal.float > a_desmultiplexed_signal.txt
draw_signal.sh a_desmultiplexed_signal.txt "a(t) desmultiplexada"
float2ascii < b_desmultiplexed_signal.float > b_desmultiplexed_signal.txt
draw_signal.sh b_desmultiplexed_signal.txt "b(t) desmultiplexada"
realiza el proceso que acabamos de describir. Podemos ejecutar dicho
script escribiendo:
multiplexacion-desmultiplexacion.sh
_____________________________________________________________
- Repita el experimento usando 32 Hz de ancho de banda por canal y presente
el script diseñado. ¿Ha mejorado la calidad de las señales desmultiplexadas?
¿Por qué?
- Los espectros de las señales son simétricos respecto de la banda de frecuencia
0. Esto significa que hasta ahora simplemente sólo hemos dibujado la mitad
de los espectros (ignorando las frecuencias negativas). Si multiplicamos una
señal digitalizada por una portadora cuya frecuencia es igual a la máxima
componente de frecuencia de la señal a modular, ¿cómo sería el espectro de
la señal modulada en comparación con el espectro de la señal original? Razone
su respuesta.