
Dump1090 es un sencillo decodificador de Mode S para dispositivos RTLSDR
Dump 1090 es un decodificador Mode S diseñado específicamente para dispositivos RTLSDR.
Las principales características son:
Escriba "make".
Para capturar tráfico directamente desde su dispositivo RTL y mostrar el tráfico capturado en la salida estándar, ejecute el programa sin opciones:
./dump1090
Para mostrar únicamente mensajes hexadecimales:
./dump1090 --raw
Para ejecutar el programa en modo interactivo:
./dump1090 --interactive
Para ejecutar el programa en modo interactivo, con soporte de red, y conectarse con su navegador a http://localhost:8080 para ver tráfico en vivo:
./dump1090 --interactive --net
En el modo interactivo es posible tener una salida menos densa en información pero más de "estilo arcade", donde la pantalla se actualiza cada segundo mostrando todas las aeronaves vistas recientemente, con información adicional como altitud y número de vuelo, extraída de los paquetes Mode S recibidos.
Para decodificar datos desde un archivo, use:
./dump1090 --ifile /path/to/binfile
El archivo binario debe crearse usando rtl_sdr de esta manera (o con cualquier otro programa capaz de generar muestras IQ sin signo de 8 bits a una tasa de muestreo de 2 MHz).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
En el ejemplo se usa una ganancia de 50 con rtl_sdr; simplemente debe usar la ganancia más alta disponible para su sintonizador. Esto no es necesario al invocar a Dump1090, ya que puede seleccionar automáticamente la ganancia más alta admitida.
Es posible alimentar al programa con datos a través de la entrada estándar usando la opción --ifile con "-" como argumento.
Dump1090 puede invocarse con otras opciones de línea de comandos para establecer una ganancia, frecuencia, etcétera, diferentes. Para obtener una lista de opciones use:
./dump1090 --help
Todo lo que no está documentado aquí debería ser evidente, y para la mayoría de los usuarios lo mejor es invocarlo sin argumentos.
Por defecto, Dump1090 verifica los errores de decodificación usando el checksum CRC de 24 bits, cuando está disponible. Los mensajes con errores se descartan.
El modificador de línea de comandos --fix habilita la corrección de errores de un solo bit basada en el checksum CRC. Técnicamente, usa una tabla de diferencias de checksum precalculadas resultantes de errores de un solo bit para localizar la posición del bit erróneo.
De hecho, esto puede corregir errores y funciona de forma fiable en mi experiencia; sin embargo, si le interesan datos muy fiables, sugiero usar el modificador de línea de comandos --no-fix para deshabilitar la corrección de errores.
En mi limitada experiencia, Dump1090 pudo decodificar una gran cantidad de mensajes incluso en condiciones donde tuve problemas con otros programas; sin embargo, no se realizó ninguna prueba formal, así que no puedo afirmar realmente que este programa sea mejor o peor en comparación con otros programas similares.
Si puede capturar tráfico que Dump1090 no sea capaz de decodificar correctamente, envíeme un correo electrónico con un enlace de descarga. Puede que intente mejorar la detección en mi tiempo libre (esto es solo un proyecto de hobby).
Al habilitar el soporte de red con --net, Dump1090 comienza a escuchar conexiones de clientes en los puertos 30002 y 30001 (puede cambiar ambos puertos si lo desea; consulte la salida de --help).
Los clientes conectados reciben los datos tan pronto como llegan del dispositivo (o del archivo si se usa --ifile) en el formato crudo similar al siguiente:
*8D451E8B99019699C00B0A81F36E;
Cada entrada está separada por un simple salto de línea (carácter LF, hex 0x0A).
El puerto 30001 es el puerto de entrada cruda y se puede usar para alimentar a Dump1090 con datos en el mismo formato especificado anteriormente, con mensajes hexadecimales que comienzan con * y terminan con el carácter ;.
Por ejemplo, si hay otra instancia remota de Dump1090 recopilando datos, es posible sumar su salida a una instancia local de Dump1090 haciendo algo como esto:
nc remote-dump1090.example.net 30002 | nc localhost 30001
Es importante señalar que lo que se recibe a través del puerto 30001 también se retransmite a los clientes que escuchan en el puerto 30002.
En general, todo lo recibido desde el puerto 30001 se gestiona exactamente igual que el tráfico normal de los dispositivos RTL o de los archivos cuando se usa --ifile.
Es posible usar Dump1090 solo como un concentrador usando --ifile con /dev/zero como argumento, como en el siguiente ejemplo:
./dump1090 --net-only
O, alternativamente, para ver lo que sucede en la pantalla:
./dump1090 --net-only --interactive
Luego puede alimentarlo desde diferentes fuentes de datos de internet.
Los clientes conectados reciben mensajes en formato SBS1 (BaseStation), similar a:
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
Esto se puede usar para alimentar datos a varios sitios de intercambio sin necesidad de usar otro decodificador.
Los mensajes Mode S se transmiten en la frecuencia de 1090 MHz. Si tiene una antena decente, podrá captar señales de aeronaves bastante lejos de su posición, especialmente si está al aire libre y en un lugar con buena vista del cielo.
Puede construir fácilmente una antena muy económica siguiendo las instrucciones en:
http://antirez.com/news/46
Con esta antena tan sencilla pude captar señales de aeronaves a más de 200 km de distancia.
Si le interesa una antena más seria, consulte los siguientes recursos:
Con --aggressive es posible activar el modo agresivo, una versión modificada de la detección y decodificación de paquetes Mode S. El modo agresivo suele usar más CPU (especialmente si hay muchos aviones enviando paquetes DF17), pero puede detectar algunos mensajes más.
El algoritmo en modo agresivo se modifica de las siguientes maneras:
El uso del modo agresivo solo se recomienda en lugares donde hay poco tráfico, para tener la oportunidad de capturar algunos mensajes más.
El modo de depuración es una ayuda visual para mejorar el algoritmo de detección o para entender por qué el programa no funciona con una entrada determinada.
En este modo, los mensajes se muestran en una representación gráfica estilo arte ASCII, donde se muestran las barras de magnitud individuales muestreadas a 2 MHz.
Un índice muestra el número de muestra, donde 0 es la muestra donde se encontró el primer pico Mode S. También se añade algo de ruido de fondo adicional antes del primer pico para proporcionar contexto.
Para habilitar el modo de depuración y comprobar qué combinaciones de paquetes puede registrar, use mode1090 --help para obtener una lista de las banderas de depuración disponibles.
El modo de depuración incluye una salida opcional de JavaScript que se usa para visualizar paquetes mediante un navegador web; puede usar el archivo debug.html del directorio 'tools' para cargar el archivo frames.js generado.
El código está muy documentado y escrito para ser fácil de entender. Para el programador diligente que tenga a mano una especificación Mode S, debería ser trivial entender cómo funciona.
Los algoritmos que usé se obtuvieron básicamente observando muchos mensajes tal como se mostraban en un programa SDL de prueba, e intentando modelar el algoritmo basándome en el aspecto gráfico de los mensajes.
Si tiene un dispositivo RTLSDR y se encuentra en un área donde hay aeronaves volando sobre su cabeza, simplemente ejecute el programa y verifique las señales.
Sin embargo, si no tiene un dispositivo RTLSDR, o si en su área la presencia de aeronaves es muy limitada, puede probar el archivo de muestra distribuido con Dump1090 en el directorio "testfiles".
Simplemente ejecútelo así:
./dump1090 --ifile testfiles/modes1.bin
Es simplemente un filtro que toma como entrada muestras IQ crudas de 8 bits y genera un archivo al que le faltan todas las partes donde I y Q son menores que el especificado durante más de 32 muestras.
Úselo así:
cat big.bin | ./dump1090 --snip 25 > small.bin
Lo usé para crear un pequeño archivo de prueba para incluir en la distribución del código fuente de este programa.
Dump1090 fue escrito en tiempo libre durante la Navidad de 2012; es un proyecto de hobby, así que solo podré atender problemas y mejorarlo en mi tiempo libre. Sin embargo, le animo a enviar pull requests para mejorar el programa. Un buen punto de partida puede ser la lista TODO incluida en la distribución del código fuente.
Dump1090 fue escrito por Salvatore Sanfilippo [email protected] y se publica bajo la licencia BSD de tres cláusulas.