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 :).
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
*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 :).