Witaek / RusTracker

GNU General Public License v3.0
4 stars 2 forks source link

problème de réception #8

Closed GuilhemHnr closed 2 years ago

GuilhemHnr commented 2 years ago

Bonsoir Monsieur,
On a fait le choix de s'orienter vers rtlsdr_mt qui présentait moins de difficultés. On a testé soapysdr, mais sans exemple concret de code, et des drivers spécifiques on s'est réorienté. On a pu directement faire fonctionner l'exemple donné dans la doc de rtlsdr_mt sans trop de difficultés : https://kchmck.github.io/doc/rtlsdr_mt/rtlsdr_mt/ De ce que l'on a compris de cet exemple, le read_async fournit les I/Q à la fonction callback sous la forme d'un tableau d'octet (tab) avec pour tout k, i[k]=tab[k2] et q[k]=tab[k2+1]

A partir de là on a tenté d'obtenir nos signaux d'adsb [tout le code dont je vais parler se trouve dans le module reception] On initialise donc le device avec la fonction init_device() qui se trouve dans sampling.rs On construit une struct Track qui a en argument une hashmap des avions détectés, et pour méthode Track.tracking() qui appel le init_device() et utilise read_async, c'est donc à partir de cette méthode que démarre la réception

On a donc la succession suivante des fonctions : -> Track.tracking
-> rdr.read_async
-> amp calcul les modules à partir des I/Q
-> extraction               à partir des échantillons de signaux reçus, détecte le préambule (détection logique), et crée un vecteur contenant les 224 amplitudes suivants un préambule qui serviront à générer un Squitter 
-> Sample2binary fournit un vecteur de Squitter à partir d'un tableau de flottant grace à l'observation des variations de l'amplitude, et test l'intégrité de ces Squitter
-> Track.add_track          ajoute tous les avions possibles ou les mets à jours à partir d'un vecteur de Squitter*
-> Track.update_track

*Squitter est une struct qui a pour attribut un tableau de 112 boolen, et une méthode crc_check qui vérifie l'intégrité du message

Sauf que l'on arrive au problème, aucun des messages reçus ne semblent vérifier le crc. On a testé pas mal de choses. En modifiant 1 condition de la détection logique du préambule (dans Sample2binary), on divise par 2 le nombre de squitter générés, et par 10 lorsqu'on modifie 2 conditions. Ce qui nous pousse à penser que le signal récupéré contient bien des préambules qui ne sont pas du fait du hasard, et que toutes les fonctions en amont fonctionnent.

On a aussi implémenté un test de Sample2binary, et 3 tests du crc (qui s'appuient sur des messages d'example du book de : https://mode-s.org/decode/)

Donc on ne comprend plus très bien, chaque fonction semble marcher indépendament, mais aucune ensemble. Si jamais aviez une solution à nous suggérer, nous serions preneurs :).

GuilhemHnr commented 2 years ago

Réception validée avec SoapySDR finalement. Sujet clos