sábado, 28 de julio de 2018

Emitiendo frecuencias de radio FM (y "pisando" otras) con una Raspberry Pi

Después de muchos meses de inactividad motivado por estudios y obligaciones, hoy estoy de vuelta con la una entrada que levaba mucho tiempo queriendo hacer. Y es que, aunque he descubierto hace muy poco el mundo de las señales y del SDR (Software Defined Radio), he de reconocer que es un mundo que me gusta bastante y me llama mucho la atención (gran culpa de ello la tiene el Sr. David Marugán, al que aprovecho para enviar un saludo y agradecer su ayuda y orientación en la confección de este entrada!!!).


Back To Basics! Una introducción a la intrusión de señales de radiodifusión.

La intrusión de señales de radiodifusión es, hablando en plata, el "secuestro" de señales de radio, estaciones y/o transmisiones de televisión por cable o señales de satélite.
Aunque las intrusiones de señales de transmisión de televisión, cable y satélite suelen tener más repercusión, las intrusiones de las estaciones de radio son más frecuentes, ya que muchas simplemente retransmiten una señal recibida de otra estación de radio. Todo lo que se requiere es un transmisor FM que pueda "pisar" la misma frecuencia que la estación que se retransmite superponiéndose a ésta.

Aunque han existidos miles de estos "secuestros" desde que existen las señales apenas unos pocos han sido documentados a través de los años, uno de los primeros de los que se tiene constancia data del 26 de Noviembre de 1977 en el Reíno Unido y en esa ocasión secuestraron una señal VHF para capturar los feeds de audio de varias estaciones de televisión. El mensaje emitido haría referencia a un ser llamado Vrillon del “Comando Galáctico Ashtar”. Acto seguido Vrillon informaría que su especie visita la tierra desde hace siglos y daría varios consejos a la humanidad. A día de hoy no se sabe quién realizó el acto de piratería.



Aunque sin duda el caso más conocido y el que siempre surge en las conversaciones sobre el secuestro de señales es, sin lugar a dudas, el de Max Headroom en 1987.
Lograron capturar y reemplazar la señal del WTTW en Chicago mientras emitían un episodio de la popular serie Dr. Who sustituyendo la señal original por su propia señal. La escena duraría poco más de un minuto y en ella se vería a un personaje enmascarado recitando frases incoherentes y haciendo toda clase de ruidos y monerías a la cámara... nunca lograron descubrir quién era él ni cómo se capturó la señal.




¿Es un secuestro de señal de radio lo que vamos a hacer?

NO! En primer lugar: eso sería absolutamente ilegal (emitir en FM sin licencia (y sin equipo calibrado y certificado) está prohibido y se sanciona con multas en la mayoría de países, de hecho) y en segundo lugar para que se ajuste por definición a un secuestro "auténtico" como los vistos en el párrafo anterior deberíamos de suplantar el broadcasting de la señal en su origen y desde su fuente de emisión o relay desde satélite. Aquí nos hemos propuesto llevarlo a cabo con una Raspberry... esto ya es un declaración de intenciones de que la potencia que vamos a desarrollar es ínfima, casi ridícula.

Lo que vamos a realizar nosotros con una Raspberry Pi es simplemente una emisión FM a muy baja potencia dentro del espectro de radio en una frecuencia determinada que nosotros deseemos. Dependiendo de lo cerca que estemos del receptor de radio, podríamos llegar a interferir (o "pisar") la señal que haya previamente estuviera recibiendo en esa frecuencia y podremos llegar a suplantar esa señal original con la que nosotros emitamos, pero en todo caso estaríamos actuando sobre el receptor de radio.



¿Emitiendo desde una Raspberry Pi como único hardware?

Pues si! La verdad es que entre las muchas bondades de estas conocidas placas esta la de poder usar el pin número 7 (GPIO 4), cuya función es la de un reloj de propósito general (GPCLK0)  capaz de crear una señal de pulsos cuadrados hasta una frecuencia máxima de 75 MHz, lo cual suena muuuuy interesante para cualquier persona interesada en proyectos de  SDR (radio definida por software) y señales del espectro de radio.


Por supuesto no es el hardware más óptimo para radio, pues el oscilador de onda cuadrada que se usa para generar la señal tiene un gran problema, y es que genera armónicos que pueden interferir con frecuencias más allá de las que se pretende transmitir. De hecho estos armónicos pueden ir bastante lejos de la banda en frecuencias restringidas, lo que significa que si aumentáramos la potencia de transmisión sin añadir filtros podríamos llegar a interferir con todo tipo de señales de radio alrededor, lo cual es tan poco recomendable como ilegal.



PiFmRds: el software que hará la magia

PiFmRds es un software creado por Christophe Jacquet solo para experimentación y utilización en entornos de desarrollo/laboratorio que genera una modulación FM incluyendo datos RDS (Radio Data System) generados en tiempo real y que, a su vez, puede incluir audio monofónico o estereofónico. Esta basado y desarrollado a partir de PiFM (actualmente en mantenimiento descontinuado).

Pero antes de instalarlo PiFmRds debemos en primer lugar satisfacer las dependencias necesarias, y debemos empezar por instalar en nuestro raspbian la biblioteca libsndfile1-dev (libsndfile es una biblioteca de rutinas C para leer y escribir archivos que contienen datos de audio muestreados). Podemos instalarlo directamente desde los repositorios oficiales con apt-get:
$ apt-get install make libsndfile1-dev




Una vez instalada la libreria podemos realizar la instalación de PiFmRds clonandolo desde su github:
$ git clone https://github.com/ChristopheJacquet/PiFmRds.git



Entramos dentro del directorio recién creado con cd PiFmRds/src y procedemos a compilar con make. La recomendación es ejecutar en primer lugar 'make clean' para asegurarnos que la compilación se realiza de forma correcta para la versión concreta de nuestro modelo exacto de  Raspberry. Por último compilamos de manera definitiva con 'make'.




Con esto ya tenemos satisfechos los requerimientos de hardware y software necesarios para llevar a cabo nuestra PoC sobre le secuestro de frecuencia y ya solo queda empezar a hacer pruebas de emisión para ver si todo funciona.



Probando, Probando, 1, 2...

Vamos a llevar a cabo nuestra primera emisión desde nuestra Raspberry!! Para ello en primer lugar debemos de disponer de un receptor de radio, en mi caso usaré un receptor SDR en formato dongle USB de RTL-SDR junto a una antena pequeña.



Una vez dispuesto el receptor que nos permitirá comprobar si funciona nuestra emisión, debemos entrar en el directorio "src" y tratar de localizar el archivo de audio que vamos a querer reproducir en nuestra prueba. Listamos el contenido del directorio y observamos 5 archivos de audio con extensión .wav



Para nuestra primera prueba vamos a utilizar pulses.wav, que emitirá una consecución de pulsos de manera continuada. Además del audio que vamos a reproducir también deberemos de tener claro en que frecuencia vamos a emitir esta primera prueba, en mi caso he elegido la frecuencia de los 76.5 MHz pues mi SDR no me indica que haya nada en ella y considero esta como la mejor opción.
Para comenzar a "emitir" desde nuestra raspberry lanzamos el comando:
$ sudo ./pi_fm_rds -freq 76.5 -audio pulses.wav



¿Y que es lo que ocurre en ese momento en nuestro receptor? ¡¡Os lo enseño en vídeo!!



Aunque apenas pueda escuchar y se vea de forma muy tenue en la cascada de audio...  esta funcionando!!! Lamentablemente no tan bien como quisiéramos, y es que el pin 7 de nuestra Raspberry y su ínfima potencia parece llegar a duras penas a nuestro receptor, por lo que quizás utilizando algún material conductor a modo de antena nos ayude. En mi caso he decidido utilizar cable conectados a ese pin, en un principio probé cable de electrónica flexible y compuesto por hilos, pero lo que realmente me pareció funcionar fue utilizar una cable de cobre rígido.
La teoría dice que con 20cms sería ideal, pero en mi caso para esta PoC me bastó con utilizar un cable de unos 9 cms aprox.



Lanzamos nuevamente el comando anterior y observamos que la diferencia es notable en cuanto a nitidez e intensidad en nuestro receptor!! Esto ya tiene mejor pinta, ¿no?






La emisión definitiva!!!

Ahora que hemos llevado a buen puerto todas nuestras pruebas ha llegado el momento de personalizar un poco nuestra emisión y representar un entorno un poco más real!!
Ha llegado el momento de interferir la recepción de una señal genuina con una personalizada a nuestro gusto... ha llegado el momento... por tanto... de ejecutar... la... orden 66!! (lo siento mucho si hay algún Jedi leyendo esto!)







Espero que os haya gustado la entrada, si habéis llegado hasta aquí: MUCHAS GRACIAS por leer todo este ladrillazo!! Si os animáis a hacer el proyecto y experimentar con ello y tenéis cualquier duda en la que pueda ayudaros no dudéis en contactarme!! 


Saludos!!!!!

10 comentarios:

  1. Muy buen trabajo, es genial Felicidades!!! Me encanta lo de la orden 66!! Jajaja

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu tiempo y por el comentario!! Me alegro que te haya gustado!!

      Eliminar
  2. Olé! Segui tus pasos y lo hice y funcionar a la perfección!! Eres un crack!!

    ResponderEliminar
    Respuestas
    1. Olé ahí! Me alegro muchísimo de escuchar eso! Espero que hayas disfrutado el proceso y hayamos aprendido en ello!

      Gracias por tu tiempo en leer la entrada y por dejarme el comentario! Un saludo!

      Eliminar
  3. Donde podria conseguir receptor SDR en formato dongle USB de RTL-SDR junto a una antena pequeña, por cierto muy interesante el post!

    ResponderEliminar
    Respuestas
    1. Hola Rebc3sp!!!

      Hay varios modelos, los más básicos los encuentras por ebay y Amazon sin mucho problema y son sintonizadores de televisión digital terrestre con chipset Realtek RTL2832U.

      Mi recomendación, después de probar varios receptores, es sin duda invertir en el RTL-SDR.com de mi fotografía, si estás en España lo distribuyen en la web de Astro Radio (https://astroradio.com/) lo envían muy rápido tienen un pack con una antena dipolo que para empezar en esto creo que es mas que suficiente y a un precio no demasiado elevado.

      Si necesitas mas info dímelo!!

      Un saludo y gracias por tu tiempo y por pasarte por el blog!

      Eliminar
  4. Respuestas
    1. Gracias a ti por tu tiempo en pasarte por el blog y leer la entrada y dejar el comentario! me alegra que te haya resultado interesante!

      Un saludo!!

      Eliminar
  5. Excelente y muy interesante entrada. Podrías aumentar fácilmente el alcance calculando la antena exacta que necesitas para emitir.
    Vel de la luz 300.000 / Frec en Hz 80.000 = Longitud de onda 3.75m
    Aplicamos factor de corrección del vacío a un cable de cobre 3.75 x 0,95 = 3,56 es la onda completa.
    Se suele usar la antena 1/4 de onda para que su impedancia sea 50 ohm aprox. Con lo cual 3.56 / 4 = 0.89 m
    Para la frecuencia de 80 mhz, un trozo de cable recto de 89 cm, te darán la máxima radiación y alcance, sin usar sofisticadas antenas.
    Prueba si quieres a ver si notas la subida de señal.
    Y si le pones 4 radiales de la misma longitud a la masa, o gnd del circuito, ya estarías usando una ground plane.
    Las antenas, otro mundo apasionante.
    Saludos, y ánimo con el blog!

    ResponderEliminar
    Respuestas
    1. Ostras!! vaya pedazo de clase de teoría de antenas acabas de darme en un momento!! Muchísimas GRACIAS por ello, muy agradecido, voy a estudiarmelo tranquilamente!!


      Un saludo y muchísimas gracias!!!

      Eliminar