lunes, 8 de enero de 2024

Una guía para iniciarse en SDR y GNU Radio

 


¿Qué es SDR?

SDR viene de Software Defined Radio y significa Radio Definida por Software. En los sistemas tradicionales de comunicación por radio tenemos circuitos electrónicos dedicados a tareas específicas con el objetivo de incorporar o extraer la información de la onda electromagnética. En estos equipos la información es codificada/decodificada de una forma determinada según su propósito e igualmente ocurre con la modulación/demodulación de la onda. Estos circuitos se encargan de una sola tarea y por lo tanto el sistema de comunicación queda definido con unas características concretas, es decir sólo vale para una cosa.

La filosofía en los sistemas SDR consiste en poder reprogramar el sistema cuantas veces se quiera para poder realizar diversas funciones, realizando el procesamiento de la señal en un procesador de propósito general, sacando el máximo provecho a las características de los circuitos electrónicos. De esta forma se consigue un sistema multipropósito. Esta capacidad de adaptación los hace idóneos para una amplia gama de aplicaciones, incluyendo telecomunicaciones, radioafición, propósitos militares, radio cognitiva e investigación, entre otros.

¿Qué es GNU Radio?

GNU Radio es un programa de código abierto para el desarrollo de software de procesamiento de señales y radios definidas por software (SDR). Ofrece un entorno de programación para construir, simular y desplegar sistemas de comunicaciones y procesamiento de señales.

Este software permite a los usuarios crear aplicaciones de radio personalizadas, implementar algoritmos de procesamiento de señales, trabajar con dispositivos de hardware SDR y desarrollar sistemas de comunicación flexibles. Se utiliza ampliamente en campos como la radioafición, la investigación en comunicaciones, la industria de telecomunicaciones, la seguridad y la defensa, entre otros.

GNU Radio consiste en una interfaz gráfica constituida por bloques escrita en Python. Estos bloques se pinchan y arrastran por el entorno pudiendo conectarlos entre ellos como se quiera para el objetivo deseado. Existen bloques para operaciones de filtrado, modulación, demodulación, codificación, decodificación y otras tareas.

Una de las ventajas de GNU Radio es su gran comunidad ya que al tratarse de un proyecto de software libre se puede aportar nuevas características como nuevos bloques, mejoras del software y compartir conocimientos y desarrollos para avanzar en la investigación y aplicación de la radio definida por software y el procesamiento de señales.

Introducción a RTL-SDR

Los dispositivos SDR más económicos son sintonizadores de televisión digital terrestre (DVB-T) conectados por USB a los que se le ha modificado el controlador o driver. Estos dongles USB contienen el chip R820T que es un sintonizador de radiofrecuencia que recibe señales analógicas y las convierte en señales digitales, luego el chip controlador RTL2832U recibe los datos digitales del sintonizador de RF, los gestiona y los transfiere a la computadora a través del puerto USB. El R820T puede sintonizar frecuencias desde aproximadamente 24 MHz hasta 1.7 GHz. Los RTL-SDR se pueden conseguir por un precio alrededor de los 20€ y 40€. Estos dispositivos son solo para recepción de señales.

Otras SDR populares son la HackRF One, que es Half-Duples en el rango de 1MHz a 6GHz , lo que quiere decir que permite emitir y recibir señales pero no al mismo tiempo y se puede encontrar entre los 200€ o 300€ o la LimeSDR Mini, una de las mejores SDR por sus características, calidad y precio. Es Full-duplex para emitir y recibir al mismo tiempo y se puede encontrar alrededor de los 200€.

Configuración inicial

El entorno de trabajo que he preparado es una máquina virtual en VirtualBox con Ubuntu 20.04 LTS. Al tratarse de un RTL-SDR sólo para recepción de frecuencias entre 24 MHz y 1.7 GHz es suficiente, pero si trabajáramos con el HackRF One o el LimeSDR Mini y realizamos tareas más complejas que recepción de señales, necesitaríamos trabajar con un sistema operativo en bare-metal (esto es sobre el hardware real) para que no hubiese problemas de rendimiento. Además si se quiere emitir según en que frecuencias se tiene que comprobar la legislación vigente respecto a la necesidad de licencias.

Para trabajar con el RTL-SDR se necesita instalar el driver para identificar el dongle como un SDR. Ejecutamos las siguiente instrucciones en la consola de comandos:

sudo apt update && sudo apt upgrade

sudo apt install librtlsdr0 librtlsdr-dev

sudo apt install rtl-sdr

rtl_test

La última instrucción es un test de prueba para comprobar que detecta y funciona el RTL-SDR.

Instalamos GNU Radio ejecutando lo siguiente:

sudo apt install gnuradio gnuradio-dev gnuradio-doc

Comprobamos la versión de GNU Radio instalada, en nuestro caso se trata de la 3.8. Ahora necesitamos instalar el bloque que conectará al dongle RTL-SDR para esta versión. Podemos instalarlo desde “apt” directamente:

sudo apt install gr-osmosdr

O desde el código fuente, pero tenemos que tener todas las dependencias necesarias para el RTL-SDR, para ello ejecutamos en la consola de comandos lo siguiente:

sudo apt install git cmake g++ libboost-all-dev swig python3-numpy
git clone -b gr3.8 https://github.com/osmocom/gr-osmosdr.git
cd gr-osmosdr/
mkdir build
cd build/
cmake ../

Ya lo tendríamos instalado, sólo nos quedaría abrir GNU Radio companion desde la consola y trabajar con él. Tendríamos que ser cautos dependiendo que hardware vamos a usar, pues es posible que para alguno necesitemos permisos de root, por lo que tendremos que ejecutar con sudo o directamente con el root.

gnuradio-companion



 

 Ejemplos prácticos

Lo que podemos hacer con un SDR es lo que el hardware y la imaginación nos limite. Vamos a empezar creando un simple analizador de espectro en GNU Radio para la banda de frecuencias de la radio FM.

Si al ejecutarlo nos da el error “The xterm executable is missing.” , este se corrige instalando xterm con “sudo apt install xterm” o modificando el fichero /etc/gnuradio/config.d para introducir el parámetro “xterm_executable=/usr/bin/gnome-terminal” que es la carpeta donde se encuentra el ejecutable.

Puede descargarlo de mi repositorio en Github. Si has leído el artículo de BadBIOS pero aún crees que tu PC puede comunicarse mediante ultrasonidos, puedes descargar desde mi repositorio un analizador espectral de audio y usarlo para comprobar si las salidas de audio de tu PC están emitiendo en Ultrasonidos. Para usarlo tienes que usar Ubuntu, la tarjeta de sonido esta configurada como hw:0,0 y tienes que conectar la entrada del micrófono directamente a la salida del PC que quieras comprobar con un cable jack-jack. Cuando lo tengas conectado, ejecutas el proyecto. Las tarjetas de sonido están optimizadas para el rango 20 Hz a 25 KHz, por lo que para buscar ultrasonidos tendrás que fijarte en el intervalo de 20KHz a 25 Khz.

Ahora que conocemos lo básico de GNU Radio, podemos elaborar una radio FM.



El flujo de procesamiento consta de varios bloques que representan componentes esenciales para recibir y demodular señales de radio FM utilizando un dispositivo RTL-SDR.

La radio "FM" proviene de Frequency Modulation o modulación de frecuencia, que es el método utilizado para enviar las señales de audio a través del espectro de radio. La modulación de frecuencia es un método de modulación en el que la frecuencia de la onda portadora se modifica de acuerdo con la amplitud de la señal de entrada.

En la transmisión FM, la señal de audio modula la frecuencia de la portadora de radio en lugar de su amplitud, como ocurre en la modulación de amplitud (AM). Este método permite una mejor calidad de audio y una mayor resistencia al ruido en comparación con la modulación de amplitud, lo que hace que FM sea popular para la transmisión de música y otros contenidos de alta fidelidad en radio. Para el sonido estéreo se pueden añadir dos canales de audio independientes, el izquierdo y derecho, consiguiendo una sensación de separación y amplitud en la escucha.

Este flujo consta solamente de una fuente RTL-SDR, un demodulador cuadratura analógica que lleva a cabo la demodulación de la señal FM, al que hay que ajustarle la desviación de FSK para calcular el parámetro de ganancia. La desviación de frecuencia en un sistema de modulación FSK (Frequency Shift Keying) se puede modelar mediante la siguiente ecuación:

 

  • es la desviación de frecuencia.

  • es la frecuencia de la señal cuando se transmite el bit de valor alto.

  • es la frecuencia de la señal cuando se transmite el bit de valor bajo.

Un filtro FIR paso bajo con una frecuencia de corte de 15 kHz, ya que las transmisiones de FM tienen su información principal dentro del rango audible humano, que va aproximadamente hasta los 20 kHz.

La ecuación que modela el filtro paso bajo ideal en el dominio de la frecuencia es:

Donde:

  • es la respuesta de frecuencia del filtro.

  • es la frecuencia.

  • es la frecuencia de corte del filtro.

Esta ecuación representa la atenuación gradual de las frecuencias por encima de la frecuencia de corte  ​, permitiendo pasar las frecuencias más bajas y atenuando progresivamente las frecuencias más altas.

Un Re-muestreador racional para ajustar la tasa de muestreo de la señal y que coincida con la tasa de muestreo del dispositivo de salida de audio.

Por lo tanto, los valores que hay que introducirle al re-muestreador racional son:

  • Interpolación: 3

  • Decimación: 16

Puedes descargarla desde mi repositorio de Github.

Podemos mejorar el flujo .grc de la radio FM y desarrollar más etapas para mostrar más información de la señal FM. El siguiente diagrama recibe la señal FM, realiza decimación, filtrado, ajusta su ganancia, y luego procesa la señal de audio antes reproducirla a través de la tarjeta de audio.

 

Consta de una fuente OsmoSDR para recibir las señales de radio a la frecuencia sintonizada y se ajusta la ganancias. Se emplean filtros paso bajos y otros filtros para limitar la señal a la banda de frecuencia de interés. Se realiza la decimación de la señal de FM, y después se convierte a su forma de magnitud y fase. Se establece un control deslizante para el volumen y luego se aplica esta ganancia a la señal. La señal procesada se envía a la tarjeta de sonido del sistema para su reproducción. Se crean gráficos que muestran la señal en el dominio de la frecuencia y en el dominio del tiempo. Puedes descargarla de aquí y siéntete libre para hacer pruebas y modificarlo o mejorarlo.

Proyectos avanzados: Existen proyectos de investigación que hacen uso de dispositivos SDR más completos, como los de Ettus Research, que centran sus esfuerzos en llevar un paso más lejos las comunicaciones inalámbricas. Algunos de ellos consisten en la mejora del estándar 802.11 o WiFi como el proyecto gr-ieee802-11 o el proyecto OpenWiFi cuyo objetivo es proporcionar una plataforma de código libre para experimentar, investigar y desplegar mejoras en la tecnología WiFi.

Software para SDR: Para explorar la tecnología SDR, sin necesidad de configurar flujos en GNU Radio, existen otros softwares como CubicSDR, una aplicación multiplataforma que permite navegar por el espectro de radio y demodular cualquier señal que pueda descubrir.

 

Otro software es AirSpy SDR# o también conocido como SDRSharp, un software popular de radio definido por software con una interfaz sencilla que ofrece la visualización del espectro electromagnético, la decodificación de varios tipos de señales y se puede usar para multitud de aplicaciones que van desde la radioafición hasta la vigilancia de señales.