Conozca Yagi: un lenguaje de programación para radio
Describa una señal una sola vez y Yagi construye el receptor, las señales de prueba y el detector. Aquí le explicamos por qué lo estamos desarrollando.
Yagi es un lenguaje de programación para sistemas de radiofrecuencia, creado por 291 Group. Su nombre proviene de la antena Yagi-Uda, inventada por Hidetsugu Yagi y Shintaro Uda en 1926, y su idea cabe en una línea: describir la señal una sola vez.
El software de radio se escribe tres veces
Hoy en día, una nueva capacidad de radio suele escribirse tres veces: una en Python para probar la idea, otra en C++ para hacerla rápida y una más en un lenguaje de hardware para llevarla a hardware especializado. Las tasas de muestreo y las unidades viven en los comentarios y en la cabeza del ingeniero, así que una discrepancia produce basura silenciosa en lugar de un error. Cada nueva señal implica un demodulador hecho a mano, un generador de pruebas aparte y una lógica de detección aparte.
Describa la señal una sola vez
En Yagi, usted describe una señal una sola vez: cómo se modula, a qué velocidad llegan sus símbolos, cómo se construyen y verifican sus tramas. A partir de esa única descripción, Yagi genera el receptor, las señales de prueba y el detector, y ejecuta el mismo programa en una computadora portátil o en un sensor de campo, en vivo desde una radio o desde una grabación.
Este es un programa breve que sintoniza una radio en 433.92 MHz y decodifica un sensor meteorológico:
radio sdr = hackrf("one") {
rx.freq = 433.92 MHz
rx.rate = 2 Msps
}
signal WeatherSensor {
modulation: ook
symbol_rate: 2.4 kbaud
coding: nrz
frame: preamble(0xAAAA) ++ sync(0x2DD4)
++ payload(bytes[8]) ++ crc16(poly: 0x1021)
}
sdr.rx
|> lowpass(cutoff: 100 kHz)
|> decimate(10)
|> WeatherSensor.demod()
|> each(frame => log(frame.payload))Un lenguaje que sabe qué es una frecuencia
La radio está integrada en el lenguaje. Las frecuencias, las tasas de muestreo y las unidades físicas son tipos, al igual que los límites de las radios reales. Pídale a un receptor una frecuencia que no puede sintonizar, o conecte dos bloques que funcionan a tasas de muestreo diferentes, y Yagi lo detiene al compilar el programa, no en el campo.
Descripciones breves, resultados reales
- Una descripción de LoRa de 28 líneas decodifica 196 de 205 grabaciones públicas, más que las 187 que decodifica un decodificador de referencia de 2 100 líneas escrito en C++.
- Su biblioteca de dispositivos describe 95 dispositivos, cada uno verificado con una colección pública de pruebas compuesta por grabaciones reales.
- Ya decodifica sensores de 433 MHz, transpondedores de aeronaves (ADS-B), anuncios de Bluetooth Low Energy y radio de voz push-to-talk.
Funciona con radios definidas por software comunes, como HackRF y RTL-SDR.
Siga a Yagi
Yagi tiene su casa en GitHub, en github.com/yagi-lang. Sígalo allí para verlo antes que nadie.