JMPX
JMPX
JMPX
Si tiene una tarjeta de sonido que es lo suficientemente rápida (192000 Hz idealmente) puede
codificar una señal estéreo para modular un transmisor FM simple para transmitir en estéreo. Eso
es más o menos lo que hace este programa que escribí. El programa se ejecuta en Windows, Linux
y Mac. La Figura 1 muestra una captura de pantalla del programa.
JMPX ha demostrado ser un programa popular siendo el único programa de código abierto
multiplataforma de su tipo. Este año fui comisionado para agregar soporte RDS (Radio Data
System) a JMPX por la amable gente de Radio Galileo. Me gustaría agradecer a Radio Galileo
(Galileo Soc. Coop.) 100.5Mhz en Terni Italia y Federico Allegretti por su financiación para el
desarrollo del soporte RDS para JMPX.
La figura 3 muestra un diagrama de bloques del software que excluye la parte RDS y la figura 4 un
diagrama de bloques de cómo funciona la parte del codificador estéreo FM. El Listado 1 muestra el
pseudocódigo de la rutina principal del código que produce la señal estéreo.
Listado 1: Rutina principal del código estéreo. ¡Esto debe ejecutarse 192,000 veces por segundo!
Producir una señal estéreo es bastante simple, como se puede ver en la figura 4. Los filtros de paso
bajo y el preénfasis requieren más reflexión. Decidí investigar y anotar cómo escribir un filtro de
pre-énfasis (preemp) para radio FM. Es una lectura interesante, e incluso si solo puedes entender
una fracción de ella, vale la pena leerla. También es interesante notar qué tipo de esfuerzo se
necesita para comprender solo un poco de algo. Puede leer el documento aquí en preempiir.pdf.
Si después de leer esto quiere contratarme para ser su ingeniero DSP, tiene mi dirección de correo
electrónico.
Los filtros de paso bajo (los primeros elementos de la figura 3) se implementan mediante filtros
FIR rápidos. Si bien es muy bueno, no los investigo aquí. Los clippers son simplemente una función
no lineal que evita el recorte duro.
RDS es más complicado y dejaré explicar cómo funciona para otro día. Mientras tanto, el PDF "RDS
- Sistema de radio interactivo - EN 50067 (1998)" es lo que seguí para implementar RDS.
Por supuesto, para usar el programa JMPX, su tarjeta de sonido deberá poder, como mínimo,
hacer una frecuencia de muestreo de 96000Hz y aún poder seleccionar 192000Hz. Con una tarjeta
de sonido que pueda hacer 96000Hz, podrá producir una señal estéreo pero no una señal RDS.
Con la tarjeta de sonido que puede hacer 192000Hz, podrá producir tanto la señal estéreo como
una señal RDS. En Windows XP, no pude seleccionar 192000 Hz, solo 96000 Hz, pero en Windows
7 y todas las versiones de Linux que probé, no tuve ese problema. Las tarjetas de sonido que he
probado han sido una tarjeta de sonido integrada en una placa base Gigabyte GA-MA785GMT-
UD2H, una computadora Onda X240 y una Xonar U7 externa; todos han funcionado sin ningún
problema.
Otra novedad para 2015 es que he cambiado parte del código, como eliminar la necesidad de las
bibliotecas Boost y utilizar el filtrado FIR rápido para los filtros de paso bajo. Ahora el código (tanto
la biblioteca dinámica como la GUI) se puede construir usando Qt Creator (o desde una consola
escribiendo qmake y luego make). He puesto el código fuente en GitHub en jontio/JMPX, lo que
debería hacer que el mantenimiento sea más fácil para que las personas agreguen funciones.
La versión de Linux tiene soporte para Jack. Lo práctico de Jack con esta aplicación es la
flexibilidad. A continuación se muestra una captura de pantalla mía usando Jack para enviar la
salida de música de Audacious2 a JMPX v1 y luego al transmisor de FM (solo una tarjeta de
sonido).
Por supuesto, para usar el programa JMPX, su tarjeta de sonido deberá poder, como mínimo,
hacer una frecuencia de muestreo de 96000Hz y aún poder seleccionar 192000Hz. Con una tarjeta
de sonido que pueda hacer 96000Hz, podrá producir una señal estéreo pero no una señal RDS.
Con la tarjeta de sonido que puede hacer 192000Hz, podrá producir tanto la señal estéreo como
una señal RDS. En Windows XP, no pude Figura 5: Uso de JMPX, Audacious2 y Jack para transmitir
música estéreo FM usando una tarjeta de sonido.
En Windows, puede lograr algo similar usando VB Audio Cable. En el video a continuación, estoy
haciendo esto para reproducir música desde MediaMonkey a través del cable de audio VB en
JMPX v2 y luego en la tarjeta de sonido y el transmisor FM. También ves el cambio de título de la
canción en mi teléfono celular cuando MediaMonkey reproduce una nueva canción.
Proporciono binarios de Windows compilados, pero para Linux o Mac tendrá que compilar desde
la fuente usted mismo. Si desea compilar JMPX usted mismo, debe visitar el Repositorio de GitHub
para JMPX, descargar el código fuente más reciente (sugiero a través de `git clone
https://github.com/jontio/JMPX`) y seguir el procedimiento de compilación. Actualmente, la
información sobre la compilación es bastante escasa, pero debería ampliarse pronto;
generalmente es un procedimiento fácil una vez que sabes lo que estás haciendo, cualquier
problema envíame un correo electrónico. En la wiki de JMPX actualmente hay un procedimiento
detallado pero desactualizado sobre cómo compilar para Raspberry Pi, contribuya y actualice o
agregue a la wiki. Actualmente, el procedimiento de compilación es `qmake && make && make
install` si se usa la línea de comando.