Open Carlos77c opened 4 years ago
Muchas gracias, por mi parte ha sido de gran ayuda. En realidad sin querer segui los mismos pasos. :-)
Salvo confusion en mi desarrollo el callsign se obtiene agrupando los 12 digitos despues del codigo 20 (marca de hexadecimal) ,estos se convierten a un grupo de 48 digitos binarios , se reparten en 8 grupos de 6 digitos que a su vez se convierten al valor decimal , que es traducido segun la tabla que esta en el articulo citado por carloscc (es la unica logica que he conseguido cuadrar a falta de tener python)
pasalo a pdf
Tengo una duda, para pasar de DEC a LTR pensaba que era usando la tabla de ASCII pero con el 32 no me cuadraba, que tabla usa? Tengo el resultado con la ayuda del ejemplo de la pagina web... Gracias !
Veo que existen ciertas dudas sobre cómo resolverlo manualmente, así que os adjunto algunos de los pasos:
Convertimos la cadena original 8D34508F201432CF060000303030 a binario: 1000110100110100010100001000111100100000000101000011001011001111000001100000000000000000001100000011000000110000
A continuación, organizamos los bits conforme al formato ADB-S (https://mode-s.org/decode/adsb/introduction.html#ads-b-message-types), con lo que obtenemos:
DF: 10001 CA: 101 ICA0: 001101000101000010001111 DATA: 00100000000101000011001011001111000001100000000000000000 PI: 001100000011000000110000
Con el ICA0, como ya se ha comentado, se puede obtener el Reg.ID consultando su valor hexadecimal (34508F) en la web: https://junzis.com/adb/?q=34508F
Para el CallSign basta con analizar el campo DATA conforme a la especificación de su codificación que se puede revisar en: https://mode-s.org/decode/ehs/bds20-identification.html
Volvemos a organizar nuestros bits conforme a la codificación descrita, es decir agrupamos el primer byte en paquetes de 4 bits y los restantes 48bits en 8 paquetes de 6 bits. El primer byte es solo un indicador de tipo, por lo que descartaremos estos 8 bits. Tras ello, convertimos cada paquete de 6 bits que hemos obtenido a su valor equivalente en decimal. Con ello obtendremos el valor de posición para el vector de mapa de caracteres con el que obtener el caracter correspondiente.
El mapa de caracteres es: ABCDEFGHIJKLMNOPQRSTUVWXYZ#####_###############0123456789##### Por lo tanto, un valor de 1, implica una "A", un valor 2 una "B", y así succesivamente.
Analizamos ahora los datos que teníamos en el campo DATA y obtenemos el valor de CallSign
1er Byte (A obviar) 0010 => 4 0000 => 0
48bits restantes organizados en paquetes de 6 000101 => 5 => E 000011 => 3 => C 001011 => 11 => K 001111 => 15 => O 000001 => 1 => A 100000 => 32 => _ 000000 => 0 000000 => 0
Espero que con esto se hayan disipado las dudas existentes.
Lo primero que hice fue buscar en Google "decoding 1090Mhz". Pinché en el primer resultado, decoding 1090 Mhz riddle y leyendo esa guía, en el enlace basics, encontré una cadena de texto muy similar a la del ejercicio, donde explican su estructura y cómo decodificarla. Siguiendo los pasos de esa página acabé en https://junzis.com/adb/ una base de datos de aeronaves, introduje ahi la dirección ICAO, y saque la primera parte de la respuesta, el Reg.ID de los datos devueltos por la consulta. Aunque intenté decodificar el callsign manualmente siguiendo las instrucciones de la siguiente página, "Aircraft identification" he de reconocer que no fuí capaz y opté por usar la librería pyModeS, pyModeS, comentada al final de esa página para obtener la segunda parte de la respuesta, el callsign.