Introducción a GNU Radio

La radio definida por software (SDR), la capacidad de procesar señales de radio utilizando software en lugar de dispositivos electrónicos, es sin duda fascinante. Sin embargo, existe una gran brecha para poder usar un programa SDR incomprensible y escribir el tuyo propio. En última instancia, los SDR requieren mucho procesamiento de señales digitales (DSP) a alta velocidad.

No muchas personas podrían construir una computadora moderna desde cero, pero casi todos pueden obtener una placa base, algunas tarjetas de E / S, una fuente de alimentación y una carcasa y armar un sistema personalizado. Aquí está la idea detrás de GNU Radio y SDR. GNU Radio proporciona muchas funciones de Python que puede utilizar para crear una aplicación SDR avanzada (o, de hecho, cualquier aplicación DSP).

Si Python aún no funciona (o incluso si lo hace), hay una forma aún más fácil de usar GNU Radio: GNU Radio Companion (GRC). Este es principalmente un enfoque gráfico que le permite fusionar módulos gráficamente y construir GUI simples para controlar su nueva radio.

Aunque normalmente piensas que GRC se trata de radios, en realidad es un buen marco para construir algún tipo de aplicación DSP, y te lo mostraré en el video 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 DSP o simulaciones sin hardware adicional.

ACTUALIZAR: No se pierda la próxima publicación que usa SDRPlay para construir un receptor basado en GNU Radio.

Bloques de construcción

Hay varios bloques de construcción clave que se combinan para habilitar SDR. El primero es algún dispositivo de entrada (fuente) que se muestrea a cierta frecuencia de muestreo. Para un dispositivo de sonido, las muestras serán números reales. Sin embargo, es más probable que las radios proporcionen números complejos con un componente I y Q.

Si no sabe cómo expresar señales como los componentes I y Q (a veces llamados 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 cuadradas para comenzar con GRC. Solo sepa que las señales I y Q se pueden combinar para expresar alguna forma de onda y, a la inversa, cada forma de onda se puede separar en una serie de valores I y Q. Con GRC, sin embargo, no es tan importante (la mayoría de las veces) entender eso, así como puede usar una tarjeta de video sin saber exactamente qué señales hay en el bus anterior PCI.

Proyecto inicial de GRC

Puede encontrar un proyecto inicial simple en el video a continuación. GRC utiliza un diagrama de bloques (diagrama de flujo) para representar su proyecto. Cuando cree un nuevo diagrama de flujo, verá dos bloques ya presentes: uno para las opciones y una variable llamada samp_rate. La parte más importante del bloque de opciones es configurar la herramienta gráfica que desea utilizar (widgets gráficos WX o widgets QT). Para nuestro propósito, realmente no importa, pero en el video elegiré Qt. La muestra está tan integrada en su proyecto que hay una variable especial para ella. La mayoría de los otros bloques tomarán el valor de esta variable y lo usarán para su muestra. Sin embargo, esto no siempre es lo que desea, pero es un buen punto de partida. Para este ejemplo, finalmente obtendré entradas de tarjeta de sonido, así que quería probar una muestra que admitan la mayoría de las tarjetas de sonido (48 kHz). Sin embargo, al principio mantuve el ejemplo muy simple, como puede ver en el diagrama de arriba.

Primero, colocará una fuente de señal que genere datos de CI (como números complejos) en el diagrama de flujo. El bloque generador de señales puede generar demasiados datos y ralentizar la CPU. Debido a que la muestra es de 48 kHz, no tiene sentido generar más de 48.000 muestras por segundo. Para garantizar esto, agregará un acelerador y lo conectará al generador.

Conectar puertos con el mismo color (y, por lo tanto, el mismo tipo de datos) es simple. Simplemente haga clic en un puerto y luego haga clic en el otro. El orden no importa y puede conectar más de una entrada a una salida. Si el tipo de datos del puerto no coincide, deberá usar un convertidor típico (y el video de muestra lo mostrará más adelante).

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

Añadiendo más

De acuerdo, eso no es muy emocionante, pero tienes que caminar antes de correr. En el video verás que puedes agregar otros elementos gráficos como deslizadores para cambiar la frecuencia y selectores para elegir el tipo de señal. Finalmente, agregará una entrada de tarjeta de sonido (que no requiere un acelerador; de hecho, en este caso es seguro tener ambos, pero generalmente quitaría el acelerador cuando use un bloque de dispositivo real). Sin embargo, se necesita una conversión típica para cambiar los datos reales a complejos. El proyecto final aparece a la izquierda.

Te animo a que veas el video con GRC abierto. Puede recorrer la mayor parte del camino sin hardware especial y la fuente de la tarjeta de sonido tiene que funcionar con su tarjeta de sonido (seguro que tiene una tarjeta de sonido en su computadora, supongo).

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

Si usa PulseAudio

Además, si usa Linux (como yo) y tiene PulseAudio como su sistema de sonido, puede obtener una reproducción de sonido dura. La solución a esto es simple. Simplemente cree un archivo en su directorio de inicio: ~ / .gnuradio / config.conf (o edítelo si ya está allí). Necesita lo siguiente:

[audio_alsa]
nperiods = 16
period_time = 0.100

Puede aumentar n períodos aún más si eso no lo mejora.

La próxima vez

ACTUALIZAR: Siga construyendo un receptor de radio con el ejemplo.

La próxima vez romperé el dispositivo SDRPlay y construiré una radio real. Si quieres mucha teoría detallada, echa un vistazo [Michael Ossman’s] serie de tutoriales. Se dirige al HackRF, pero la teoría sigue siendo cierta. Por supuesto, GNU Radio (y GRC) no es la única forma de hacer un programa DSP, como señalamos anteriormente.

  • Abhi dice:

    Hombre feliz !! Gracias por el lenguaje simple y los conceptos básicos. Bueno para los plebeyos como yo que realmente necesitan aprender a caminar antes de correr. La bonificación es el vínculo con la teoría del coeficiente intelectual, siempre quise saber eso.

  • timgray1 dice:

    Si está utilizando cualquier sistema Linux, el primer paso es eliminar el terrible pulso de audio y volver a alsa.

    • Ehrichweiss dice:

      Tengo más problemas con alsa que con pulseaudio. De hecho, ahora también me causa problemas con mi cargador de sonido y nada lo soluciona, ni siquiera alsactl shop. Me tomó un año descubrir cuál era el problema gracias a personas como tú que sugieren que todos los problemas de sonido se deben al pulso de audio. Bueno, esta vez claramente no lo es.

      • mcnugget dice:

        La elección de la interfaz de sonido siempre dependerá de lo que funcione para usted y de lo que no. Afortunadamente, cambiar no es muy difícil.

  • yo soy la morsa dice:

    ¡La parte más difícil de GNU Radio es instalarlo! Si puedo evitarlo: solo ejecuto una copia de Pentoo linux cuando necesito usar GRC. Tengo un ARM SBC dedicado en el que ya pagué el impuesto de "sufrimiento" si necesito algo más portátil.

  • OsciX dice:

    Solo por curiosidad, Al, ¿qué tipo de distribución usas? Utilizo Arch con un entorno de escritorio KDE 5 y realmente me gusta toda la libertad que me brinda para la personalización. Como beneficio adicional, ¡también aprendí cómo funciona Linux!

    • Al Williams dice:

      He usado muchos diferentes, pero antes siempre había querido usar KDE. Ahora mismo estoy en Kubuntu. Siempre me impresiona el documento de Arch, así que pensé en intentarlo.

      • OsciX dice:

        Debería. Sin embargo, una recomendación: pruebe la imagen de Makeison en http://www.evolutionlinux.com/. Es similar al instalador predeterminado, pero viene con algunas herramientas en el disco para ayudarlo a comenzar, como Midori, Gparted y otros. Es mejor que solo instale Arch, no una variante personalizada como Manjaro.

        • C Buckley dice:

          ¿Instalador de arco con gparted incorporado, dices? Sé lo que estoy haciendo hoy ...

  • kleetus92 dice:

    ¿Me perdí la parte en la que decían qué diablos significa GNU?

    • Benji Wiebe dice:

      http://www.gnu.org/

    • bthy dice:

      "¡No GNU Unix!"
      https://en.wikipedia.org/wiki/Recursive_acronym

  • Abhi dice:

    Alsa / Pulseaudio? ¿ÑU? Entretenimiento Linux? Como con cualquier SDR: D
    Pero sí, la mejor manera de probar GNU Radio por primera vez sería probar un sistema Linux en vivo con GNU Radio ya instalado. Como el mencionado anteriormente por iamthewalrus (Pentoo Linux) o Kali Linux, etc. Solo disfrútalo mientras dure .. 🙂 (y no necesito mencionar para empezar, $ 10 SDR pueden ser suficientes) Una vez que comiences a tener una conexión seria (con SDR), obtén una versión de Linux instalada en lugar de la live (la mayoría de la distribución en vivo te da esta opción) y obtén un HW serio. (Esto solo sucedería si eres capaz de romper el hielo y sobre todo ayudaría mucho;))

  • echador de llama dice:

    Está bien, pero yo, ¿si quiero hacer una radio de verdad? Con una frecuencia portadora de 10 GHz y un ancho de banda de 100 MHz. Primero necesito un DAC que tenga un ancho de banda analógico de 100 MHz, al menos 4.5 Enobs y al menos 200 Msample de velocidad de muestreo. Entonces necesito una señal de 10 GHz y un mezclador para convertirlo. En el receptor necesito un ADC correspondiente y, por supuesto, un mezclador. Hice mucha radio de fibra con procesamiento fuera de línea y básicamente SciPy / Scilab / Matlab es bueno. C ++ es mejor para la velocidad después de que se prueban los algoritmos.

    • Licencia FCC dice:

      Es posible que desee considerar primero que el ancho de banda de 100 mhz a 10 ghz no es legal en la mayoría de las jurisdicciones cubiertas por la UIT. La potencia de emisión también es limitada en esta área. Dependiendo de lo que quieras hacer, hay otras bandas que podrían ser más apropiadas.

      • 0G dice:

        por supuesto, todo es ilegal.

        • Doug dice:

          Por supuesto que no todo es ilegal. Aunque muchos cerdos autoabsorbentes aspirantes a recursos no lo entenderían.

    • Robar dice:

      Eso sería una estupidez a lo deseable en un artículo "inicial". El compañero de Gnuradio es una muy buena herramienta de aprendizaje y creación de prototipos mejor que hacerlo en las cosas que usted recomienda.

      La radio real también es un poco estirada. VLF es tan real como SHF.

  • topadora dice:

    Creo que pasaré al tema integrado / FPGA. El paquete de radio GNU siempre ha estado tan increíblemente mal documentado que me resulta difícil hacer algo que no sea exactamente como aparece en los tutoriales.

  • camaleón dice:

    También hay una excelente serie de videos de Michael Ossmann en Great Scott Gadgets en SDR. Esto es lo que solía comenzar con SDR.
    http://greatscottgadgets.com/sdr/

  • kisarsosae dice:

    Hola Williams y el resto de La-Tecnologia,

    Soy un estudiante de posgrado y un radioaficionado con licencia. Estoy estudiando aspectos del Sistema de notificación automática de paquetes (APRS), que es un sistema de mensajería por radio que se utiliza en todo el mundo. http://www.aprs.org/

    Un aspecto que estoy considerando es cómo el cambio Doppler afecta la recepción de mensajes (errores inducidos). Para hacer esto utilizo HackRF One y GNURadio Companion. Utilizo el HackRF como transmisor en 144,39 MHz para APRS norteamericano. Necesito GNURadio para hacer buenos ajustes para copiar el interruptor Doppler.

    Tengo un problema para proporcionar a GNURadio los tipos adecuados de cadenas de datos para la transmisión.

    Comencé a usar PyBombs para agregar los bloques requeridos:
    http://gnuradio.org/redmine/projects/pybombs/wiki

    He progresado mucho con el código de GitHub de Tim K hasta ahora:
    https://github.com/tkuester/gr-bruninga

    Pero no creo que esté ingresando correctamente la entrada en la PDU de socket.

    Su diseño de bloque es "Socket PDU" en "Cadena a APRS"
    https://drive.google.com/open?id=0BwvDU4wQSFTxcWl0WHJBczVRNWs

    No estoy completamente seguro de si el bloque "Cadena a APRS" realmente analiza las cadenas correctamente para APRS:
    http://www.aprs.org/doc/APRS101.PDF

    Básicamente, hay banderas al principio y al final de cada paquete para indicarle a la radio receptora que el paquete está terminado. Esto crea pausas en el horrible sonido de gritos que normalmente oiría si escuchara el canal de RF sin procesar. Si inserto una cadena grande (un montón de texto) en el Socket PDU a través de Telnet, el ruido no se detiene y mi radio receptora (sistema separado) no interpreta este grito en datos como normalmente esperaríamos.

    De cualquier manera, estoy buscando ayuda de la comunidad de personas talentosas que es La-Tecnologia.

    ¿Pensamientos?

    • topadora dice:

      ¿Por qué no revisa la documentación del bloque?
      Déjame adivinar ... probablemente no existe. O es completamente inútil. Nuestro pasado de moda.

      • kisarsosae dice:

        Realmente todo lo anterior. En este punto, necesitaría localizar a este tipo Tim y llamarlo.

        Creo que es mi malentendido sobre cómo funciona una PDU de socket y lo poco que está documentado sobre el bloque "Chain to APRS".

        No codifico mucho. Tampoco soy un gran fan de Linux. Entonces ... eso no me ayuda ...

        Mi experiencia con GNURadio fue ... interesante ... pero más frustrante. Tengo un amigo de código que me está ayudando, que poco a poco me estoy volviendo loco con una tarea "simple" de agregar un bloque, con las matemáticas que proporcioné, en GNU. No va bien.

  • Julian Horn dice:

    Este es el mejor tutorial individual con el que me he encontrado y que me ha permitido progresar con GNURadio: un gran trabajo, Al. Esperando los próximos

Manuel Gómez
Manuel Gómez

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *