
Dump1090 es un simple decodificador Mode S para dispositivos RTLSDR
Dump 1090 es un decodificador de Modo S diseñado específicamente para dispositivos RTLSDR.
Las principales características son:
Aunque de vez en cuando sigo añadiendo / corrigiendo cosas en mi fork, busco el minimalismo en la implementación. Sin embargo, hay un fork mucho más completo en funciones disponible, desarrollado por MalcolmRobb.
Escriba "make".
Para capturar tráfico directamente desde su dispositivo RTL y mostrar el tráfico capturado en la salida estándar, simplemente ejecute el programa sin opciones:
./dump1090
Para simplemente mostrar 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 conectar 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 con menos densidad de información pero más "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 Modo S recibidos.
Para decodificar datos de un archivo, use:
./dump1090 --ifile /path/to/binfile
El archivo binario debe crearse usando rtl_sdr de esta manera (o con cualquier otro
programa que pueda generar muestras IQ sin signo de 8 bits a una frecuencia de muestreo de 2Mhz).
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 llamar a Dump1090
ya que puede seleccionar automáticamente la ganancia más alta soportada.
Es posible alimentar el programa con datos a través de la entrada estándar usando la opción --ifile con "-" como argumento.
Dump1090 puede ejecutarse con otras opciones de línea de comandos para establecer una ganancia, frecuencia, etc. diferentes. Para ver una lista de opciones use:
./dump1090 --help
Todo lo que no está documentado aquí debería ser obvio, y para la mayoría de los usuarios, ejecutarlo sin argumentos es lo mejor que se puede hacer.
Por defecto, Dump1090 intenta corregir errores de bits usando la suma de comprobación CRC. El programa usa una tabla de síndromes precalculada para identificar y corregir rápidamente hasta dos errores de bits en los mensajes recibidos.
Esto ciertamente puede corregir errores y funciona de manera fiable en mi experiencia; sin embargo, si le interesan datos muy fiables, sugiero usar la opción 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 encontré problemas usando otros programas; sin embargo, no se realizó ninguna prueba formal, por lo 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 logra decodificar correctamente, envíeme un correo electrónico con un enlace de descarga. Puedo intentar mejorar la detección durante mi tiempo libre (esto es solo un proyecto de hobby).
Dump1090 puede decodificar mensajes de posición en superficie (Código de Tipo 5-8), que son transmitidos por las aeronaves mientras están en tierra (rodando, esperando en puertas, etc.). Estos mensajes incluyen la posición de la aeronave, la velocidad respecto al suelo y la trayectoria respecto al suelo.
Las posiciones en superficie usan una codificación diferente a la de las posiciones en vuelo: el CPR (Compact Position Reporting) cubre solo 90 grados en lugar de 360, y requiere una posición de referencia dentro de 45 millas náuticas para una decodificación sin ambigüedad.
En lugar de exigirle que configure la ubicación de su receptor, Dump1090 calcula automáticamente una posición de referencia promediando todas las posiciones en vuelo decodificadas correctamente. Esto funciona porque si puede recibir tráfico en superficie de un aeropuerto, casi con seguridad también recibe tráfico en vuelo. La posición promediada de las aeronaves que sobrevuelan proporciona una referencia que es lo suficientemente cercana (muy dentro del requisito de 45 NM) para decodificar posiciones en superficie.
Nota: Las posiciones en superficie solo se mostrarán una vez que al menos una posición en vuelo se haya decodificado correctamente para establecer la referencia. Las aeronaves en tierra se mostrarán con altitud 0 en la pantalla interactiva.
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 sin procesar 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 sin procesar, 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 ;.
Así, por ejemplo, si hay otra instancia remota de Dump1090 recolectando datos, es posible sumar la 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 transmite a los clientes que escuchan en el puerto 30002.
En general, todo lo recibido desde el puerto 30001 se maneja exactamente igual que el tráfico normal de los dispositivos RTL o de archivo cuando se usa --ifile.
Es posible usar Dump1090 solo como un hub usando --ifile con /dev/zero como argumento, como en el siguiente ejemplo:
./dump1090 --net-only
O alternativamente para ver lo que está sucediendo 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 enviar datos a varios sitios de intercambio sin necesidad de usar otro decodificador.
Los mensajes Modo 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 trivial 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, que es una versión modificada de la detección y decodificación de paquetes Modo S. El modo agresivo normalmente usa 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 con 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 2Mhz.
Un índice muestra el número de muestra, donde 0 es la muestra donde se encontró el primer pico Modo 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 ver qué combinaciones de paquetes puede
registrar, use dump1090 --help para obtener una lista de las opciones de depuración disponibles.
El modo de depuración incluye una salida opcional en javascript que se usa para visualizar paquetes mediante un navegador web; puede usar el archivo debug.html en el 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 con una especificación Mode S en sus manos, debería ser trivial entender cómo funciona.
Los algoritmos que usé se obtuvieron básicamente observando muchos mensajes mostrados con un programa SDL desechable, e intentando modelar el algoritmo basándome en cómo se ven los mensajes gráficamente.
Si tiene un dispositivo RTLSDR y se encuentra en un área donde hay aeronaves volando sobre su cabeza, simplemente ejecute el programa y compruebe si hay 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 la distribución de Dump1090 en el directorio "testfiles".
Ejecútelo así:
./dump1090 --ifile testfiles/modes1.bin
Es simplemente un filtro que recibe muestras IQ sin procesar de 8 bits en la entrada y genera un archivo sin todas las partes del archivo 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 dentro de la distribución del código fuente de este programa.
Dump1090 fue escrito durante algo de tiempo libre en la Navidad de 2012; es un proyecto de hobby, por lo que solo podré atender problemas y mejorarlo durante mi tiempo libre. Sin embargo, le animamos 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 los demás contribuyentes que enviaron parches a lo largo del tiempo (consulte el historial de commits para obtener más información) y se publica bajo la licencia BSD de tres cláusulas.