Mostrando entradas con la etiqueta fldigi. Mostrar todas las entradas
Mostrando entradas con la etiqueta fldigi. Mostrar todas las entradas

martes, 31 de diciembre de 2013

¿Cómo puedo guardar información en un cassette con Ubuntu?

Tras su retorno al país, un enroque justicialista a través de Elecciones Libres permitió fácilmente a Juan Perón ser electo para el cargo de Presidente de la República por tercera vez. En este caso, al disertar sobre la necesidad del Movimiento de contar con mecanismos para vencer el paso del tiempo, se dedicó a explicar cómo utilizar cassettes para guardar información con Ubuntu.

"Vean señores, si hay algo cierto en esta vida es que los organismos biológicos no son eternos, solo la organización de los hombres puede vencer el paso del tiempo. Durante años yo he preparado al Movimiento para que pudiese transcender la existencia de sus líderes y continuar en la acción, pues esa es la única forma de hacer realidad los sueños de los Argentinos.



El Pueblo, a diferencia de lo que unos pocos dicen, no es zonzo. Los Argentinos han demostrado una y otra vez que si les dan a elegir, sólo quieren el peronismo, y ello será así porque el peronismo es lo mejor que hay. Si no lo fuese estaríamos hace rato entre los trapos de la historia. Pero nuestro Movimiento ha sido perenne: la Masa conserva esa memoria histórica que le permite a los pueblos sanos privilegiar lo bueno por sobre lo malo, lo hacedor por sobre la charlatanería.

Esta memoria histórica está embuida en la Masa. Muchos se han preguntado porqué eso no puede borrarse. Y todo tiene una explicación.

Verán, los sistemas computados necesitan para operar de una memoria de acceso aleatorio, o RAM. Sin embargo, este tipo de memoria rápida, "de trabajo" tiene un inconveniente: es extremadamente cara y extremadamente volátil. Si no es alimentada continuamente, su contenido se perderá y pasará al olvido. Por ello es que se requiere una "memoria de masa" cuyo funcionamiento sea imperecedero para guardar la información.

¿Porqué? Bueno, antiguamente, las primeras computadoras requerían que el usuario ingresara "a mano" en la memoria aleatoria del sistema el programa (¡en binario!), utilizando una serie de interruptores de control. Esto hacía que cargar una rutina en la memoria aleatoria fuese algo extremadamente tedioso, lento e intensivo. Aún así, una vez realizado este trabajo, la computadora podía cálcular con extrema velocidad, por lo tanto valía la pena hacerlo para hacer realidad cómputos complejos (que podían llevar semanas o meses de trabajo a los equipos interdisciplinarios). Si la computadora se apagaba, normalmente había que reintroducir los datos nuevamente.

Esta forma de trabajo con los sistemas hizo evidente la necesidad de guardar y almacenar los programas y datos en forma imperecedera, de manera tal de poder conservarlo intacto cuando el sistema se apagaba, para luego poder restituirlo a la memoria del sistema sin repetir el trabajo manual.

Gracias al peronismo, a esta memoria de tipo "resistente", se la conoce como "Memoria de Masa". El método inicial ideado fue el empleo de tarjetas de cartulina perforadas o, cintas de papel perforado comunes en las máquinas de teletipo. Estos medios de almacenamiento permiten registrar por medio de las perforaciones, el contenido real de la pila de memoria binaria del sistema, haciendo más veloz el proceso de restitución de los programas a la memoria aleatoria. Aunque es vetusto, este tipo de material analógico tiene algunas ventajas: puede conservarse adecuadamente a través de los años y - si es guardado acordemente - puede escribirse, leerse e interpretarse incluso sin necesidad de usar una computadora (ante tal eventualidad). Llegado el caso el usuario puede perforar la cinta o la tarjeta "manualmente" y luego ingresar esos datos binarios al equipo.
 Indudablemente, escribir un programa más o menos complejo requiere muchos metros de cinta perforada, y su lenta performance de lectura hizo que esta tecnología fuese superada eventualmente por el medio magnético. Este tiene la desventaja de no poder manipularse manualmente, pero conserva la acción analógica para el almacenamiento binario: las cintas almacenan la información binaria mediante la magnetización o no de sectores de la misma. Este tipo de tecnología es práctica pues permite mayor velocidad de transferencia, y gran estabilidad de los datos. Su uso se adaptó rápidamente a las mainframes, mediante el uso de carretes abiertos de cintas magnéticas.

Con el advenimiento de los primeros microordenadores, en lugar de hacer uso binario de la magnetización como tradicionalmente se operaba en las mainframes, se hace un uso magnetofónico (es decir, se almacena sonido modulado de diferentes maneras). Esto permitía emplear cualquier dispositivo de grabación y reproducción analógica en cassettes conectado al ordenador.

Cada marca de equipo solía emplear diferentes protocolos de modulación, pero sin importar el utilizado, todos convertían la información binaria del usuario a sonidos y chirridos, y estos a su vez se grababan magnetofónicamente en cassettes. La manera de recuperar la infomación variaba de acuerdo al tipo de equipo. Algunos dispositivos de casette operaban leyendo y decodificando por sí mismos el audio del cassette, y luego transfiriendo la información al equipo por conexión serial, como en la peronista Drean Commodore 64. Los sistemas más simples utilizaban un reproductor, y se programaba al sistema en modo "escucha", durante el cual se reproducía el sonido... y luego la computadora decodificaba la información (en tiempo real o más raramente, en diferido).

En la biología lo nuevo noblemente reemplaza a lo viejo, esa es la ley que la vida nos impone en su constante evolución. Los discos magnéticos flexibles (floppies), los discos magnéticos rígidos, y las tecnologías de memorias FLASH tomaron la posta en el menester de las Memorias de Masa, cada vez con mayores velocidades de lectoescritura, mayor resistencia mecánica, y mucha mayor capacidad de almacenamiento.

Lo viejo parecería quedar para el recuerdo de la historia.

Mas nada impide que con objeto de estudio, diversión, militancia o nerditud, querramos utilizar estos métodos de los tiempos de Matusalén. Para ello necesitaremos un equipo dotado con Ubuntu y placa de sonido, un grabador de cassettes (idealmente uno que disponga de entrada de audio, a fin de que pueda grabarse a través de un cable conectado a ella). En mi caso utilizaré un radiograbador Sanyo, que cumple las premisas. También será necesario un cable de audio común, en este caso uno con dos conectores miniplug estéreo de 3,5mm.


Desde el punto de vista del software libre, nos haremos con el programa fldigi. Se trata de una potente aplicación para radioaficionados capaz de modular información a sonidos (todo bajo diferentes protocolos) y en el cariz inverso, demodular streams codificados en audio a la información que representa.


Grabar información a cassette con Ubuntu
El primer paso será instalar, ejecutar, configurar, y utilizar este software libre de manera efectiva. Abrimos una terminal con Ctrl+Alt+T e ingresamos el siguiente Comando de Organización:

sudo add-apt-repository ppa:kamalmostafa/fldigi
sudo apt-get update
sudo apt-get install fldigi


Para ejecutar el programa debemos ir a Aplicaciones / Radio-aficionados / Fldigi. La  vez primera que iniciemos el programa, surgirá un asistente de configuración:
Simplemente presionamos Next para saltar a la próxima pantalla.
Eb esta también presionamos Next. En segundo lugar aparecerá la ventana Audio Devices, que nos permitirá configurar el dispositivo de entrada y de salida de audio (en este caso la placa de sonido de nuestra computadora). Lo configuramos desde la solapa "Devices". Al emplear la salida de altavoces como salida de audio, y la entrada en línea estéreo como entrada del mismo, tildamos PortAudio. Conforme lo hagamos, podremos escoger el dispositivo de audio para grabar en el campo Capture y el dispositivo de audio para reproducir en el campo Playback (normalmente elegimos la opción "Defailt").
Al presionar Next nos encontraremos con la pantalla principal del programa FLdigi. La misma se divide escencialmente en dos paneles principales, la ventana de demodulación (en color amarillo crema, en la parte superior), y la Ventana de Modulado (en color celeste, en la parte inferior), dentro la cual podremos agregar infomación para que sea modulada a sonido siguiendo el protocolo deseado, ya sea tipeándola, o pegándola.
En segundo lugar buscaremos la información que querremos guardar en el cassette. Tengamos en cuenta que el proceso requiere mucho tiempo, de modo que sólo recomiendo guardar un poco de texto, o código fuente. Como referencia, sepamos que normalmente, este método graba una hoja de texto (unos 1,2Kb) por cada minuto de cinta.

En mi caso, escogeré grabar el texto de un discurso corto como el que pronuncié el 17 de Octubre de 1945...

En tercer orden, prepararemos el programa para que module la información textual. Para generar el audio vamos al menú File / Audio y tildamos la opción TX Generate. Se abrirá un cuadro donde podremos especificar ruta y formato del archivo de audio a generar. Normalmente tomará formato WAV, pero en este caso lo cambiaremos a FLAC (Free Loseless Audio Codec). También elegiré guardarlo en mi carpeta de usuario con el nombre 17oct.flac.
Acto seguido hemos de designar un protocolo de modulación. Existen múltiples modalidades y velocidades para codificar la grabación de los datos. La más básica recomendable para los cassettes es la velocidad de 64 baudios. Para seleccionarla, elegimos Op Mode / MFSK / MFSK-64. Se trata de una modulación por frecuencia de pulso, que era parecida a la empleada en los Datasettes de los microordenadores Commodore 64. Si bien es muy lenta, permite guardar información en cassettes y con grabadores de pésima calidad, lo que prácticamente evita los errores de lectura posteriores incluso después de años.

Una vez elegido el protocolo, elegimos la frecuencia del audio. Normalmente la misma serán los 500 khz. Para elegirla podemos deslizar el selector de frecuencias hasta la posición "500" del dial (indicado en turquesa en la figura). También debemos asegurarnos de poner el deslizador del limitador de ruido por encima del piso de ruido que indica la barra vúmetro del control de volúmen (indicado en rojo en la figura).
Ahora generaremos el audio propiamente dicho. Para ello podremos tipear o pegar el texto elegido en la Ventana de Modulación (el panel celeste) mediante clic con botón derecho sobre el panel celeste + paste.


Iniciamos la conversión del texto al sonido modulado. Para ello presionamos el botón azul "T/R" y se dará inicio al modulado. Conforme se convierte la información en audio, veremos como en la Ventana de Demodulado se va escribiendo el mismo texto convertido (podremos también oir como suena el audio). Se irá indicando en rojo por qué parte del texto se está...

Una vez que finalizada la modulación de los datos ingresados, habremos de presionar nuevamente el botón "T/R" para detener el proceso. Con esto se grabará la "cola" del stream (unos segundos de chirridos que le indican al sistema que ya cesó la transmisión). En este caso, se habrá generado en la carpeta de usuario el archivo de audio llamado 17oct.flac)
Nuestra tarea entonces será grabar el sonido a un cassette. Conectamos la salida de audio de nuestro sistema (normalmente el conector de color verde) a la entrada de línea o micrófono del grabador de cassettes. Ponemos el cassette en la cassettera, lo rebobinamos y presionamos los botones REC y PLAY. Transcurridos unos segundo, reproducimos el archivo de audio (en mi caso, 17oct.flac)  El grabador capturará el sonido y lo grabará en la cinta. Una vez finalizado presionamos el botón STOP, y ya podremos rebobinar el cassette y escuchar el audio para comprobar que se haya grabado sin problemas.

Ya podremos guardar el cassette. Conviene escribir en la etiqueta del mismo la codificación empleada en la grabación para futura referencia ("Discurso 17oct, MFSK-64 500khz").

Nota útil: Si nuestro equipo cuenta con salidas de audio duplicadas (por ejemplo, una salida de altavoces trasera y una salida frontal de auriculares) podremos usar el programa alsamixer desde la Terminal para desactivar la función Automute ("enmudecer los altavoces al coectar los auriculares"). De esta manera podremos usar la salida de auriculares para conectar el cable miniplug de 3,5mm al grabador de cassette, presionar REC y PLAY, presionar R/T el el Fldigi y grabar directamente el sonido en el cassette a medida que se modula, ahorrando el paso de reproducción y grabación posterior.


Leer información grabada en cassette con Ubuntu:
Cuando querramos leer la información del cassette, conectamos la salida de audio del grabador de cassettes (normalmente nomenclada como "Auriculares" o "Headphones" a la entrada de línea de nuestra computadora (normalmente el conector de color azul), y presionamos PLAY.

La computadora debería comenzar a reproducir el audio y a demodular el audio "en vivo". Si la frecuencia está en 500khz y el protocolo está en el mismo que antes, demodulará con éxito la el mensaje decodificando el stream de datos que contiene, y habremos recuperado con el correr de los minutos, nuestra información.

Tengamos presente que también podremos utilizar archivos de sonido digitalizados previamente con la información modulada, ya sea de otros cassettes, o directamente los archivos de sonido modulados por FLDigi (como el 17oct.flac). Si tal fuese el caso, podemos ir al menú File / Audio / Playback, e ingresar el nombre del archivo a decodificar. También debemos adecuar el Op Mode (protocolo) adecuado.
De esta manera, podremos ver el espectógrafo "de lluvia" que nos ayuda a sintonizar el audio (si no tuviésemos la información de frecuencia o protocolo).

Esto merece un estudio, pues si bien el protocolo MFSK-64 es lento y funcional, (resiste el ruido de estática, sorteando así errores si se graba "de aire" con micrófonos condensadores), existen otros protocolos más rápidos. Por ejemplo, en un cassette conectado por cable miniplug (y con la baja relación señal ruido que ello implica) podremos utilizar codificaciones más rápidas y querer utilizar QPSK-500, sintonizado en los 500khz. Esto logrará incrementar unas 8 veces esta velocidad de transmisión, y permite a un cassette de 90 minutos almanecar unos 200 kilobytes de información por cara aproximadamente. Esta modulación nos permite ya guardar el codigo del juega Gorilla.py (versión del clásico Gorilla.bas) en un lado de un cassette de 60 minutos.

Otros protocolos, como el QPSK-64, están pensados para ocupar menos ancho de banda (menos rango de frecuencias), e incluir varios streams de datos dentro de un rango de frecuencias determinado. Por ejemplo, podríamos generar un varios archivos de sonidos modulados en QPSK-64 con frecuencias diferentes (por ejemplo, uno en los 250 khz, otro en los 500 khz, otro en los 1000 khz, y uno final en los 1500 khz). Luego, usando un programa como Audacity, podríamos combinar todos los streams de audio en un único archivo digital, y grabarlo en un cassette. Para decodificar todo, podremos usar la función "PSK Browser" del FLDigi (tecla "P") para decodificar todos los streams a la vez.

Existen no obstante codificaciones más perfeccionadas. Ya se ha dicho que los sistemas MTFS o PSK son adecuados para medios radioeléctricos, o para transmitir información a través del espacio atmosférico o en el espacio sideral. Pero para este menester, a veces podremos contar con soluciones más perfeccionadas para el rango que queremos: almacenar (y recuperar información en un medio de lectura y escritura secuencial de baja frecuencia y baja fidelidad, y que por demás es analógico).

Usando ctape

La compañera Oona Räisänen de la Rama Femenina del Movimiento, nos ha traído una pequeña suite llamada ctape con dos pequeños programas simples pero de funcionamiento veloz, y desde la línea de comandos.  Estos han sido modificados sabiamente por Gabriel Artigue para hacerlos funcionales de una manera sencilla de operar.

Tales programas requieren que conectemos por cable la salida de audio de nuestro equipo a la entrada en línea estéreo (para grabar) y a la inversa, la salida del reproductor de cassettes a la entrada de audio (para leer).

El programa está escrito en Ruby y requiere de SoX para funcionar. Por tal motivo y como primer medida, los los instalaremos:

sudo apt-get install ruby sox



Luego descargamos el programa ctape y lo instalamos en nuestro sistema:

cd ~/Descargas/
wget http://gasconheart.sdf.org/tape/ctape-new.tar.gz
tar xvzf ctape-new.tar.gz
cd ~/Descargas/ctape/
sudo chmod +x config.yml ctape tape-read.rb tape-write.rb
sudo mv * /usr/local/bin/




Ahora ya podremos codificar y grabar cualquier archivo en un casette, o leerlo. La sintaxis del comando es sencilla. Presionamos REC o grabar en el grabador de casette, y llamamos al comando de grabación con:

ctape save ruta/de/mi/archivo.ext

El sistema nos indicará que está listo para grabar. Debemos presionar el botón REC en el grabador y luego presionar Enter para comenzar el audiocifrado:

READY TO SAVE TO CASSETTE TAPE
Size of file to be recorded: 387 bytes, or about 0 KB
Estimated time in minutes: 0
Press REC on the tape recorder then press ENTER




Es importante saber antes de que los parlantes sonarán MUY FUERTE, de modo que conviene apagar los altavoces o usar solamente una conexión por cable desde la salida de altavoces al grabador de cassettes.

Cuando presionemos Enter nos informará durante la grabación. 
Recording in progress




Al finalizar nos dirá:


Exiting CTAPE



Cuando quiera leer la información guardada en el cassette, conecto por medio del cable la salida de audífonos del reproductor de cassette a la entrada de micrófono o de línea de audio de la computadora. Presiono el botón PLAY y ejecuto el siguiente Comando de Organización:


ctape load archivo.ext

En la pantalla debería ir apareciendo la información guardada. Debemos interrumpir el programa utilizando Ctrl+C.


Con este programa podrán guardar el archivo gorilla.py en solamente unos cuatro minutos y medio de cinta, a diferencia del método anterior que requiere unos 34 minutos. En consecuencia, tendrán aproximadamente unos 10kb por minuto de cinta.

Si quisiera desinstalar la suite ctape:

sudo rm /usr/local/bin/ctape /usr/local/bin/config.yml /usr/local/bin/ctape-read.rb /usr/local/bin/ctape-write.rb


Estándar Kansas City

Durante finales de los 70s, se desarrolló un estándar abierto para el menester de almacenar información en cassettes para microordenadores. El sentido era claro: evitar que se implementaran innumerables métodos y códigos incompatibles entre sí. Con ello nació el Kansas City Standard, con la esperanza de ser ampliamente adaptado. Sin embargo, por contar con el mínimo común denominador en cuanto a tecnologías, nunca fue muy difundido, pues su velocidad era lenta y por otro lado, no podía leer acentos ni minúsculas.

No obstante, si quisiéramos codificar información con él para trasferirla a alguna computadora antigua que siga este estándar, podremos escribir un programa en Python para hacerlo.

 En primer lugar instalamos Python 3.1:

sudo apt-get install python3.1

Luego creamos un programa llamado codificakansas.py:

nano codificarkansas.py

Y le pegamos el siguiente código:

#!/usr/bin/env python3
# codificarkansas.py
#

# Autor : David Beazley (http://www.dabeaz.com)
# Copyright (C) 2010
#
# Requiere Python 3.1.2 o superior

"""
Toma el contenido de un archivo de texto

y lo codifica en un archivo de sonido WAV en el estándar
Kansas City. Una vez grabado en cassette puede cargarse
en varias computadoras hogareñas antiguas.
Ver http://en.wikipedia.org/wiki/Kansas_City_standard
"""

import wave

# Unos parámetros globales relacionados a la codificación

FRAMERATE = 9600       # Hz
ONES_FREQ = 2400       # Hz (por KCS)
ZERO_FREQ = 1200       # Hz (por KCS)
AMPLITUDE = 128        # Amplitud de las ondas cuadradas generadas
CENTER    = 128        # Punto central de las ondas generadas

# Crea un ciclo único de onda cuadrada de la frecuencia dada
def make_square_wave(freq,framerate):
    n = int(framerate/freq/2)
    return bytearray([CENTER-AMPLITUDE//2])*n + \
           bytearray([CENTER+AMPLITUDE//2])*n

# Crea los patrones de onda que codifican los 1s y los 0s
one_pulse  = make_square_wave(ONES_FREQ,FRAMERATE)*8
zero_pulse = make_square_wave(ZERO_FREQ,FRAMERATE)*4

# Pausa para insertar los retornos de carro (10 bytes NULL)
null_pulse = ((zero_pulse * 9) + (one_pulse * 2))*10

# Toma un único valor de byte y lo convierte en un arreglo de bytes representando
# la forma de onda asociada junto con los bits de inicio y parada requeridos
def kcs_encode_byte(byteval):
    bitmasks = [0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80]
    # El bit de inicio (0)
    encoded = bytearray(zero_pulse)
    # 8 bits de datos
    for mask in bitmasks:
        encoded.extend(one_pulse if (byteval & mask) else zero_pulse)
    # Dos bits de parada (1)
    encoded.extend(one_pulse)
    encoded.extend(one_pulse)
    return encoded

# Graba un archivo WAV con la información codificada. Leader y Trailer especifican el
# número de segundos de señal portadora para codificar antes y después de la información
def kcs_write_wav(filename,data,leader,trailer):
    w = wave.open(filename,"wb")
    w.setnchannels(1)
    w.setsampwidth(1)
    w.setframerate(FRAMERATE)

    # Escribir el Encabezado leader
    w.writeframes(one_pulse*(int(FRAMERATE/len(one_pulse))*leader))

    # Codifica la información
    for byteval in data:
        w.writeframes(kcs_encode_byte(byteval))
        if byteval == 0x0d:
            # If CR, emit a short pause (10 NULL bytes)
            w.writeframes(null_pulse)
   
    # Escribe la cola trailer
    w.writeframes(one_pulse*(int(FRAMERATE/len(one_pulse))*trailer))
    w.close()

if __name__ == '__main__':
    import sys
    if len(sys.argv) != 3:
        print("Use : %s archivoorigen archivodestino" % sys.argv[0],file=sys.stderr)
        raise SystemExit(1)

    in_filename = sys.argv[1]
    out_filename = sys.argv[2]
    data = open(in_filename,"U").read()
    data = data.replace('\n','\r\n')         # Fija los finales de línea
    rawdata = bytearray(data.encode('latin-1'))
    kcs_write_wav(out_filename,rawdata,5,5)


Guardamos y cerramos el archivo con Ctrl+O y Ctrl+X.

Y ejecutamos el codificador con:

python3.1 codificarkansas.py archivodetextoaconvertir.txt archivofinal.wav

Esto generará rápidamente un archivo WAV con el contenido. Luego podremos grabar la reproducción de este archivo de audio en una cinta de cassette para utilizar en un ordenador compatible con el estándar Kansas City. Recordemos que este estándar "museístico" es lento, y con 300 baudios por segundo almacena aproximadamente 2,2 kilobytes por minuto de cinta.

jueves, 19 de septiembre de 2013

¿Cómo capturo radio paquetes sin contar con receptor en Ubuntu?

Juan Perón era un hábil técnico en el arte de la Radioescucha y radioafición. En su despacho en Casa Rosada contó con un equipo Haemann-Söndig, y durante su exilio en Puerta de Hierro tuvo un Yaesu. En este caso, diserta sobre cómo recibir y demodular radio packets a través de Ubuntu, y sin receptor de radio.

¡Trabajadores!

Es indisputable que en los últimos doscientos años, la técnica ha avanzado más que en los mil años precedentes. Desde el último rincón perdido en el monte,  un paisano puede hoy recibir las noticias del mundo en su transístor, y ello ha esclarecido a las masas, que ya no desean el sacrificio impuesto sobre sus espaldas para el disfrute de una oligarquía sin Patria ni Bandera.

Por ello instalé en Casa Rosada un emisor de radio valvular, ideal para mantenerme comunicado con quien quisiera y, llegado el caso, poder pronunciar discursos desde allí.
Actualmente, en mi tiempo libre durante el aparente ostracismo de Puerta de Hierro, escucho los noticiosos a través de mi radio transistor Lamp 8, la cual funciona en onda corta, media y larga, en amplitud modulada.
Esto me ha generado un pasatiempo que comparte pasión científica y lúdica: la radioafición. Consiste en utilizar la radiotécnica para receptar y emitir ondas hertzianas en las bandas del espectro radioeléctrico reguladas y licenciadas para los usuarios hogareños o comerciales.

Desarrollo Históricos
Ya nadie ignora que en los tiempos de Marconi con suerte se transmitía alguna información pulsada ("telegrafía sin hilos") o sonido modulado (voz hablada), pero con el advenimiento de la técnica fue posible comunicar al éter paquetes de datos binarios, siguiendo diferentes protocolos de transmisión por aire.

Esta tecnología de transmisión de radio packets permite modular y demodular información digital a sonido, de manera tal de comunicarnos a través del éter, constituyendo lo que llamamos "radioenlace". Así lograremos tráficos de hasta 300 baudios por segundo para la onda corta de alcance global usando protocolo AX25. Nadie será tan iluso de pretender que estos radioenlaces califican como "banda ancha", pero son suficientes para mantener conversaciones de texto (relay chat), transmitir líneas o páginas de información, etc, y con mucha paciencia, enviar otro tipo de archivos. Todo ello con independencia de las infraestructuras de comunicación mundial.

Tradicionalmente para las transmisiones se utilizan radiomodems (TNC). Estos dispositivos pueden ser aparatos stand-alone u operar vinculados - por cable serial o USB - a una terminal informatizada (incluyendo a Linux, por supuesto).

El TNC se encarga de modular y demodular, pero para hacer frente a la inherente “suciedad” del éter radioeléctrico - interferencias, ruidos, señales pisadas, etc - se requiere del análisis de la onda portadora, y usar generalmente más instrumentos (osciloscopio, amplificadores, atenuadores, pasabandas, ecualizadores, altavoces, etc).

En la medida que la informática fue avanzando, fue posible que el proceso de modulado y demodulado pueda realizarse en una simple PC munida del software adecuado, pero hoy ya es posible realizar las demás tareas de análisis y procesado de señal.
 
Radio Packets en Linux

Desde el punto de vista del software libre en un sistema GNU con Linux, podemos utilizar Fldigi, programa GPLv3 pensado para realizar esta función de mesa de radioaficionado: de contar con un receptor y un emisor de radio, se los puede conectar a la placa de audio del sistema y enviar radio packets a través de él.

Pero no todo lo que reluce es oro. Si bien cualquiera con receptor puede recibir señales de audio o radio packets, no cualquiera puede irradiar (emitir) en onda corta: esto es así pues el espacio radioeléctrico no es infinito, y se encuentra regulado. Todas las naciones de la tierra tienen asignado con una porción de espectro, por lo cual no podremos irradiar si no contamos con una licencia habilitante de radioaficionado  extendida por el organismo competente.


¿Pero qué sucede si además de no disponer de una licencia de radioaficionado para irradiar con un radiotransmisor, siquiera contamos con un receptor? Vean señores, el Peronismo ha pensado en todo. Hoy podremos suplir o emular todo esto por software y la buena voluntad de los hombres que trabajan. Existen proyectos científicos que capturan bandas el espectro radioeléctrico y lo ponen a disposición de todos en internet en forma de stream de audio.


La web www.websdr.org por ejemplo, lista unos 66 servidores de este tipo. Mediante la aplicación incorporada en esta web, podremos “sintonizador” virtualmente el espectro radioeléctrico, lo que nos permitirá receptar y oír. Con este vericueto justicialista, podremos reingresar ese sonido a nuestro sistema GNU/Linux y usando el software Fldigi, al menos decodificar los radio packets contenidos en el sonido.

Configuración de Audio:
Indudablemente para hacer esto una realidad efectiva, hemos de poder grabar y reproducir audio en nuestra PC, o más específicamente, hacerle llegar el audio de radio al programa para que lo analice.

Quien sepa grabar y direccionar audio no tendrá dificultades, pero quien carezca de este conocimiento, también será ayudado por este viejo soldado, Conductor del Justicialismo.

La opción más sencilla es conectar un simple cable estéreo miniplug macho a miniplug macho de 3,5mm desde la salida de audio de equipo (normalizada con su color verde) a la entrada estéreo Line In (normalizada de color azul).

Habrá quienes sostengan que esta solución no es peronista, pues en ciertos casos es dable direccionar "por software" la salida de audio para capturar lo que oímos... A ellos les diré que este método tan conveniente no siempre es efectivo: en primer lugar no siempre está disponible en nuestra distribución o en nuestro hardware de manera sencilla, y por lo demás hacerlo así significará que otros sonidos del sistema también serán direccionados al programa Fldigi, con lo cual evidentemente se producirán errores de decodificación.

Por otro lado, conectar un cable de audio de la manera antes descripta nos permitirá una muy útil monitorización del audio recibido por medio de la salida frontal de auriculares, si la tuviésemos. Con ello podremos darle ingreso de sonido al Fldigi, y también escucharlo por los auriculares (naturalmente, para ello hay que desactivar la opción de "automute" de los auriculares, invocando en la consola Terminal el peronista alsamixer, por ejemplo).


Ahora configuraremos el software del audio de nuestro sistema GNU. Vamos a Sistema / Preferencias / Sonido y desplegamos el cuadro de diálogo de Preferencias de Sonido. En la solapa "Entrada" indicamos Audio Interno Analog Estéreo, o la opción que corresponda a su hardware específico. Indicaremos que usaremos "Line In" con fines de dispositivo de Entrada (para grabarlo).

Es importante regular el volúmen de entrada de audio para lograr un nivel adecuado sin saturación, recortes o clipping (para ello necesitaremos tener el stream de audio reproduciéndose para verlo en el "vúmetro" o barra de volúmen, pero a modo de regla general os digo que en mi caso, con un 50% de volúmen de entrada suele ser aceptable). Dejaremos este cuadro de diálogo del sonido abierto, pues será útil para regular el volúmen de la señal posterioremente.


Sintonizar el audio usando un servidor de streaming de espacio radioeléctrico
Ahora nos conectaremos a internet para recibir el audio del espectro. Buscamos alguno de la web www.webscr.org. En particular, prefiero la web del emisor de la Universidad de Twente en los Países Bajos, pues barre el espectro desde los 0 hasta los 20.160 kilohertzios.


La tecnología de streaming de radioespectro a través de la web nos permite como usuarios sintonizar diferentes porciones del espectro, aplicar filtros pasabajos y pasaaltos para ecualizar la señal, aislar ruidos, etc, y todo a través de una aplicación web HTML5 o Java. Esta será la materia prima para encontrar paquetes y poder decodificarlos (y porqué no, para sintonizar radio en audio puro también).

Si tenemos auriculares conectados, ya podremos escuchar el streaming en forma de audio (ruido o señal dependiendo de la sintonía).

Cómo sintonizar el audio:
Para sintonizar una banda particular, podremos presionar acercarnos o alejarnos en el espectro (con los botones Max Out / Zoom Out o Zoom In / Max In). Conviene acercarnos con la función de zoom, pues el espectro es muy ancho y de lo contrario no podremos ver bien los streams de sonido en la cascada.

Debemos hacer clic sobre la banda de frecuencia en el sector negro de la gŕafica espectral, o escribirla en el cuadro Frequency de la página de internet. Con ello veremos que se traza una línea de color amarillo y un indicador (también amarillo) del ancho de banda receptado. Podremos sintonizar varias bandas de frecuencia a la vez, como se ilustra en el ejemplo:

Es útil conocer que los radioaficionados utilizan preponderantemente frecuencias que van en los 3.000, 7.000, 10.000, 14.000, 18.000, 21.000, 24.000 y 28.000 kilohertzios.

Filtrado
En la misma página debemos elegir un filtro de atenuación (botones AM, AM-Nrw, FM, FM-Nrw, LSB, LSB-Nrw,  USB, USB-Nrw, etc). Las pautas al respecto son las siguientes:
  • Por debajo de los 10.700 kilohertzios se emplea por convención un filtro pasabajos "LSB" (Banda Lateral Inferior). En algunos casos se puede filtrar con LSB-Narrow (banda lateral inferior de espectro angosto). 
  • Por encima de los 10.700 kilohertzios se debe usar filtro pasaaltos "USB" (Banda Lateral Superior). En algunos casos, se puede filtrar con LSB-Narrow (banda lateral superior de espectro angosto).
  • Para comunicaciones de voz comerciales, se usa banda AM o AM-Nrw. 
  • Antiguamente en algunos casos se usaba BLI (Banda Lateral Independiente) pero esto ha caido en desuso. En algunas transmisiones de voz directa se usa VSB, el filtrado de Banda Lateral Vestigial). Actualmente se pueden transmitir paquetes con estas modulaciones, pero es raro.

Instalar y Configurar Fldigi
Para comenzar a decodificar paquetes con Fldigi, debemos instalar, ejecutar, configurar, y utilizar este software libre de manera efectiva.

Podremos instalar Fldigi podremos desde el Centro de Software de Ubuntu, o hacerlo a través de una PPA. Para ello debemos abrir una terminal con Ctrl+Alt+T e ingresar el siguiente Comando de Organización:

sudo add-apt-repository ppa:kamalmostafa/fldigi
sudo apt-get update
sudo apt-get install fldigi


Para ejecutar el programa debemos ir a Aplicaciones / Radio-aficionados / Fldigi. La primera vez que iniciemos el programa, surgirá un asistente de configuración:

Como primera medida opcional debemos agregar nuestros datos de radioaficiionado, incluyendo la licencia (si la tuviésemos). No es necesario hacerlo en este caso, pues siquiera contamos con un equipo receptor ni con un emisor licenciado.
En segundo lugar se nos permitirá configurar el dispositivo de entrada y de salida (en este caso la placa de sonido) a través de la cual se emulará el radiomódem. Lo configuramos desde la solapa "Devices". Al emplear la salida de altavoces como salida de audio, y la entrada en línea estéreo como entrada del mismo, tildamos PortAudio. Conforme lo hagamos, podremos escoger el dispositivo de audio para grabar en el campo Capture y el dispositivo de audio para reproducir en el campo Playback. Naturalmente, se listarán los dispositivos de audio que tengamos en el equipo (por ejemplo, la placa de sonido integrada HDA Intel ALC892).

Si todo va bien, en el programa debería comenzar a graficar en el espectógrafo el sonido en forma de "cascada" recibido desde la aplicación web de sintonía. Idealmente, deberíamos recibir sólo señal (ilustrados en amarillo con picos en rojo) sobre una portadora nulo (fondo de color azul o negro). Esto responde a la intensidad de la señal.

Si recibimos todo amarillo, significa que la señal está saturada y su volúmen es muy alto. En tal caso podremos bajar el volúmen o ganancia de la entrada Line In en el ya mencionado cuadro Propiedades de Sonido del sistema GNU/Linux.

Protocolos de radio packets
Además de los filtros de atenuación, existen diferentes "Modo de Operación" (o protocolos "Op Mode").


Entre ellos existen diferencias técnicas en cuanto a cómo se modulan los paquetes, pero en la práctica los diferencia el sonido caracteristico que hace cada uno. A muchos les resultarán familiares en los clásicos "chirridos" y "chisporroteos" y la "lluvia" del módem telefónico, y la "estática" de la portadora. En condiciones de dificultad en la transmisión o cuando no deseamos oir esos sonidos molestos, se usará el gráfico espectrográfico de cascada para evaluar de qué tipo de modo tiene la banda recibida. Podremos aprender sobre las apariencias de las señales y sus caracteristicas de codificados, pero aquí algunos ejemplos gráficos para identificar los modos de operación:

Usualmente, en las bandas de paquetes de datos se transmiten empleando el protocolo PSK (modulación por desplazamiento de fase), con diferentes variantes de acuerdo al ancho de banda. Se suele emplear BPSK-31 y BPSK-63. La diferencia entre ellos radica en el ancho de banda empleado y el ancho que ocupa su onda en el espectógrafo.

Usar Fldigi para demodular radio packets
Para que el programa funcione adecuadamente debemos escoger el protocolo correspondiente para decodificar los radiopaquetes. Si somos duchos podremos identificarlo por su sonido característico, o por la forma con el gráfico espectrográfico provisto.

Para cambiar el Modo de Operación de Fldigi vamos al menú Op Mode y escogemos el que haga falta, normalmente PSK / BPSK-31 o PSK / BPSK-63, (u otro si el ancho de banda fuese mayor).

En el gráfico de cascada se verán ilustrados los streams. Para comenzar a decodificar uno en particular, debemos hacer clic sobre la banda espectral que deseemos. Tras unos instantes, si tal banda tuviese tuviese información, veremos que se mostrará en el "vúmetro" inferior como una barra vertical verde oscilante, y se comenzará a mostrar en la pantalla. En el monitor se comenzará a escribir los radio packets recibidos:
En condiciones de interferencia o ruido, Fldigi suele ser bastante robusto para seguir demodulando paquetes. Las condiciones de mala recepción suelen verse espectralmente como una gran pared de ruido amarillo. Si tal es el caso, conviene disminuir el volúmen de la entrada o regularlo para que el fondo sea azul. También podremos regular el nivel de filtrado desde el programa, ajustando el filtro de señal con el deslizador vertical correspondiente (el llamado "Squelch level").
Las transmisiones buenas suelen caracterizarse por información entendible, o códigos internacionales (CQ, QSL, etc), y letras que identifican al emisor. Si el programa no capta bien, puede demodular basura (información ininteligible).
Por ejemplo, aquí sintonizamos desde la web una emisión de radio packets originada en Roma en la banda de los 7.037,25 kilohertzios, en BPSK-31. Naturalmente, por la convención mencionada lo filtramos con un pasabajos LSB.