banner
Hogar / Blog / Primeros pasos con GNU Radio
Blog

Primeros pasos con GNU Radio

Jun 18, 2023Jun 18, 2023

La radio definida por software (SDR), la capacidad de procesar señales de radio utilizando software en lugar de dispositivos electrónicos, es innegablemente fascinante. Sin embargo, existe una gran brecha entre poder utilizar software SDR disponible en el mercado y escribir el suyo propio. Después de todo, los SDR requieren mucho procesamiento de señales digitales (DSP) a altas velocidades.

No mucha gente podría construir una PC moderna desde cero, pero casi cualquiera puede conseguir una placa base, algunas tarjetas de E/S, una fuente de alimentación y una carcasa y montar un sistema personalizado. Esa es la idea detrás de GNU Radio y SDR. GNU Radio proporciona una gran cantidad de funciones de Python que puede utilizar para crear aplicaciones SDR sofisticadas (o, de hecho, cualquier aplicación DSP).

Si Python todavía no es de su agrado (o incluso si lo es), existe una manera aún más fácil de usar GNU Radio: The GNU Radio Companion (GRC). Este es un enfoque principalmente gráfico, que le permite unir módulos gráficamente y crear GUI simples para controlar su nueva radio.

Aunque normalmente piensas que GRC se trata de radios, en realidad es un buen marco para crear cualquier tipo de aplicación DSP, y eso es lo que te mostraré en el vídeo a continuación. GRC tiene un bloque generador de señal e interfaces para su tarjeta de sonido. Incluso tiene la capacidad de leer y escribir datos en el sistema de archivos, por lo que puede usarlo para realizar muchas aplicaciones o simulaciones DSP sin hardware adicional.

ACTUALIZAR:No se pierda la publicación de seguimiento que utiliza SDRPlay para construir un receptor basado en GNU Radio.

Hay varios componentes clave que se combinan para hacer posible el DEG. El primero es algún dispositivo de entrada (una fuente) que se muestrea a cierta frecuencia de muestreo. Para un dispositivo de audio, las muestras serán números reales. Sin embargo, es más probable que los dispositivos de radio proporcionen números complejos con un componente I y Q.

Si no está familiarizado con la expresión de señales como componentes I y Q (a veces conocidos como datos en cuadratura), ese es un gran tema (con una excelente explicación en 3D, una de Tektronix y otra de National Instruments). Sin embargo, no es necesario comprender directamente la teoría detrás de las señales de cuadratura para comenzar con GRC. Solo sepa que las señales I y Q pueden combinarse para expresar cualquier forma de onda y, a la inversa, cualquier forma de onda puede dividirse en una serie de valores I y Q. Sin embargo, con GRC no es tan importante (en la mayoría de los casos) entender eso, del mismo modo que se puede usar una tarjeta de video sin saber exactamente qué señales hay en el bus PCI express.

Puede encontrar un proyecto inicial simple en el video a continuación. GRC utiliza un diagrama de bloques (un gráfico de flujo) para representar su proyecto. Cuando crea un nuevo gráfico de flujo, verá dos bloques ya presentes: uno para opciones y una variable llamada samp_rate. La parte más importante del bloque de opciones establece el conjunto de herramientas gráficas que desea utilizar (widgets gráficos WX o widgets QT). Para nuestro propósito, realmente no importa, pero en el video seleccionaré Qt. La frecuencia de muestreo es tan integral para su diseño que existe una variable especial para ella. La mayoría de los demás bloques tomarán el valor de esta variable y lo utilizarán para su frecuencia de muestreo. Sin embargo, esto no siempre es lo que desea, pero es un buen punto de partida. Para este ejemplo, eventualmente recibiré entrada de una tarjeta de sonido, por lo que quería una frecuencia de muestreo que admitan la mayoría de las tarjetas de sonido (48 kHz). Sin embargo, para empezar, mantuve el ejemplo muy simple, como puedes ver en el diagrama de arriba.

Para empezar, colocará una fuente de señal que genere datos de coeficiente intelectual (como números complejos) en el gráfico de flujo. El bloque generador de señales puede generar demasiados datos y ralentizar la CPU. Dado que la frecuencia de muestreo es de 48 kHz, no tiene sentido generar más de 48.000 muestras por segundo. Para asegurarse de que eso suceda, agregará un bloque acelerador y lo conectará al generador.

Conectar puertos que tienen el mismo color (y, por tanto, el mismo tipo de datos) es sencillo. Simplemente haga clic en un puerto y luego haga clic en el otro. El orden no importa y puedes conectar más de una entrada a una única salida. Si el tipo de datos del puerto no coincide, necesitará usar un convertidor de tipo (y el video de ejemplo lo mostrará más adelante).

La parte final de mi ejemplo simple es solo un bloque de visualización FFT que usa QT (la misma biblioteca de gráficos que configuró en el bloque de opciones). Una vez que esté todo conectado, puede presionar el botón de reproducción y debería ver una FFT de la señal.

Por supuesto, eso no es muy emocionante, pero debes caminar antes de correr. En el vídeo verás que puedes agregar otros elementos gráficos como controles deslizantes para cambiar la frecuencia y selectores para elegir el tipo de señal. Finalmente, agregará una entrada de tarjeta de sonido (que no necesita un acelerador; de hecho, en este caso es inofensivo tener ambos, pero normalmente quitaría el bloque del acelerador cuando use un bloque de hardware real). Sin embargo, lo que sí necesita es una conversión de tipo para cambiar los datos reales a complejos. El proyecto final aparece a la izquierda.

Te animo a que veas el vídeo con GRC abierto. Puede realizar la mayor parte del proceso sin ningún hardware especial y la fuente de la tarjeta de sonido debería funcionar con su tarjeta de sonido (seguramente tiene una tarjeta de sonido en su PC, supongo).

Una vez que se sienta cómodo con el ejemplo, intente ampliarlo. Agregue un receptor de tarjeta de sonido para sacar el audio. Intente filtrar el audio de la fuente de prueba. Por ejemplo, ¿cómo suena una onda cuadrada filtrada de paso bajo en diferentes frecuencias? Si es aventurero, intente filtrar el audio de la tarjeta de sonido y escribirlo en un archivo wave para reproducirlo. Todas las herramientas que necesita están en la paleta de herramientas de GRC.

Por cierto, si usas Linux (como yo) y tienes PulseAudio como sistema de sonido, es posible que la reproducción de audio se entrecorte. La solución para esto es simple. Simplemente cree un archivo en su directorio de inicio: ~/.gnuradio/config.conf (o edítelo si ya está allí). Necesitas lo siguiente:

Puede aumentar nperiods aún más si eso no lo mejora.

ACTUALIZAR:Continúe construyendo un receptor de radio con el ejemplo.

La próxima vez sacaré el dispositivo SDRPlay y construiré una radio real. Si desea mucha teoría detallada, consulte la serie de tutoriales [de Michael Ossman]. Está dirigido a HackRF, pero la teoría aún se aplica. Por supuesto, GNU Radio (y GRC) no son la única forma de crear software DSP, como hemos señalado antes.

ACTUALIZAR:ACTUALIZAR: