3.4 Multiplexación de señales en el dominio de la frecuencia


PIC

Figure 3.3: Multiplexación en el dominio de la frecuencia usando modulación en amplitud. * denota a la convolución entre señales. a la modulación de señales.


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

s(t) = a(t)+ b(t)c1(t)+ c(t)c2(t),

o lo que es lo mismo, construir S(f) como

S(f) = A (f)+ B(f)* C1(f)+ C(f) *C2(f),

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:

  1. Ejecute el PC virual. El resto de pasos se realizarán en este PC.
  2. 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
    s(t) = a(t)+ b(t)c(t),

    donde c(t) es la señal portadora. En el dominio de la frecuencia estamos realizando el cálculo

    S(f) = A(f)+ B(f) *C(f).

    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 [0,8[ 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 [0,8[ 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

_____________________________________________________________