|
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.
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/multiplexacion-desmultiplexacion.sh, cuyo contenido se muestra a continuación:
#!/bin/sh
# # 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. Este script está también incluido en el fichero http://www.ace.ual.es/˜vruiz/docencia/redes/practicas/guion.tar.gz. Podemos ejecutar dicho script escribiendo:
multiplexacion-desmultiplexacion.sh
|