c1b3rwall / module2

module 2 Exercises
23 stars 21 forks source link

Writeup_module2_pregunta1 #3

Open Carlos77c opened 3 years ago

Carlos77c commented 3 years ago

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.

jjgonzalezjustel commented 3 years ago

Muchas gracias, por mi parte ha sido de gran ayuda. En realidad sin querer segui los mismos pasos. :-)

mos1972 commented 3 years ago

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)

ramonmb77 commented 3 years ago

pasalo a pdf

asalazard commented 3 years ago

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 !

dgonzalez55 commented 3 years ago

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.