Nous allons aborder un point critique des radiotélescopes, à savoir le traitement des données. Ce sujet est compliqué à traiter car cela implique des compétences dans le domaine de l’informatique. La création de logiciels et d’application et complexe mais heureusement pour nous il y a beaucoup de ressources sur internet à ce sujet.
Quelles technologies choisir ?
Il existe beaucoup de langage de programmation et de library au sein de ces langages. Pour un non initié cela peut vite devenir compliqué de juger quelles méthodes sera la plus adapté. Il faut savoir que chaque langage de programmation à ces applications. On n’utilisera pas de PHP pour un radiotélescope, malgré que cela soit possible le PHP est fait pour des sites WEB. On n’utilisera pas VB sur une raspberry avec système linux car ce n’est pas compatible. Chaque cas et différent et chaque personnes à ces propres compétences. Pour ma part mes logiciels sont en C pour des raisons d’optimisation. Bien maintenant voyons mes conseils sur la techno appropriée celons différents cas.
Descriptif des langages :
Le C et le C++
Si vous êtes calé en programmation, ne pas chercher midi à 14 faites du C ou du C++ si la POO programmation orienté objet vous est familière et utile dans votre cas. Bien que pour un radiotélescope qui ne fait que traiter des données la POO ne me paraît vraiment pas obligatoire. Le C/C++ c’est le langage qui offrent les meilleures performances, plus rapide et plus économique en ressources. Mais c’est aussi un des plus compliqués à maîtriser, sa puissance vient du fait que c’est le programmeur qui gère la mémoire du programme et de ce fait une erreur ou un oubli peut créer de nombreux bugs. De plus c’est un langage compilé. Il faut utiliser un programme pour transformer le code en exécutable et là encore ça ne s’improvise pas sur le tas en 5 min. Bref je conseille fortement mais si vous n’en avez jamais fait, il existe des langages plus simples.
Le python
Si vous débutez en programmation orientée vous vers le python. C’est un des langages les plus simples que ce soit le code ou son utilisation. L’installation des library se fait automatiquement grâce à une petite ligne dans la console. Exemple : pip install numpy. Et numpy c’est la bibliothèque simplifiant les mathématiques en python elle permet de faire des choses très compliquées normalement en très peu de code. Ajouter scipy à votre script python et vous a toutes les fonctions nécessaires au traitement du signal à savoir les FFT. Noter que j’ai parlé de script et non de programme car python n’est pas compilé contrairement au c. Il suffit de taper dans une console :python mon_script.py pour l’exécuter donc bien plus simple à installé. Parfait pour les débutants. Niveaux performances ça donne quoi? Bien ce n’est pas dingue mais son fait l’affaire sur un ordi correct, par contre sur une raspberry il va falloir faire attention à ne pas lui en demander de trop. Elle n’a que 500mo de RAM. Avec des mauvaises pratiques de programmation on peut vite la surcharger.
Les autres
Quelles autres possibilités ?
Le JAVA, non c’est pour les entreprises qui veulent maintenir leur code longtemps. Ce n’est pas optimiser du tout.
Le Perl, autant faire du python. C’est plus simple et sûrement plus opti.
VB, nan nan nan on doit être sur un système linux. Beaucoup plus simple à gérer linux est très souple.
C# je n’est pas d’avis sur ce langage. Je sais juste que si il aurait été mieux que le python, je l’aurais su, donc pas de C# non plus.
Je pense que vous commencé a comprendre pourquoi faire avec un langage compliqué alors que python et simple et efficace… Python gagne haut la main.
OK on a choisit notre langage maintenant voyons notre système d’exploitation.
Windows, (le rédacteur de cette article viens de faire un arrêt cardiaque à l’évocation d’un système d’exploitation qu’il faut taire le nom…) Berk, nulle.
Linux, Oui linux c’est parfait pour nous. Facile, efficace, souple. Quoi de plus. Il peut paraître compliqué pour les novices mais une fois qu’on connaît un peu c’est bien plus simple qu’un Wind… Bip,bip,bip.
Et quelle linux choisir? Debian ou ubuntu. Une préférence pour debian de mon côté.
Comment traiter les données bruts ?
Nous recevons des données de notre ADC qui convertit notre signal radio en données numérique. Il y a 2 cas possibles, à savoir:
- Données complexes avec 2 ADC dont un recevant le signal déphasé a 90° voire l’article sur le traitement du signal
- Données normales avec 1 ADC
Cela va influer sur le traitement à faire avant le calcul du spectre. Si vous avez 2 ADC comme c’est le cas sur les clefs RTLSDR, il va falloir prendre chaque bloques de 2 nombres et les transformées en un nombre complexe. Un signal sous forme de nombre complexe est appelé IQ data ou quadratic signal.
Quel calcul réaliser dans un logiciel pour un radiotélescope?
Nous cherchons à obtenir le spectre de notre signal. Pour cela il existe les FFT Fast Fourier Transform. Il existe des librarys celons le langage choisi.
- En python numpy et scipy.
- En C FFTW
C’est très simple pour le python il suffit d’appeler la fonction, elle se charge du reste. Et pour le C il y a plusieurs fonctions celons le type de vos données brut. (Complexe ou réel). On met tous ça dons une boucle et il n’y a plus qu’à attendre. Moi j’aime les systèmes autonomes mais chaque système à ça propre façon de réagir en fonction de ce que l’on souhaite je ne peux pas vraiment détailler cette partit mais je ferais un article pour détailler mon cas et vous donner une idée.
Que faire des résultats?
Une fois que le programme a isolé les données intéressantes, il faut trouver comment les enregistrer et comment les analyser. C’est un peu le but de notre radiotélescope. Une fois encore il y a plusieurs possibilités, nous allons voir la meilleure solution et la plus simple.
La meilleura des solutions est celle qui prendra le moins de place et qui ne sera pas trop lourde en ressources pour la machine. Le mieux est de créer un format de fichier facile à traiter et léger.
Exemple entre un format txt et un format maison:
Le nombre 144 doit être stocké. Dans fichier txt il sera stocker sur 3 octets comme suit : ‘00110001 00110100 00110100′ ou en hexadécimal ’31 34 34’ ce qui correspond à 3 caractères pour écrire ‘144’. Un format maison pourra correspondre à enregistrer un nombre plutôt que des cratères. Donc en binaire ‘10010000’ et en hexa ’90’. Pour la même chose on peut voir que le fichier texte sera 3 fois plus gros. Ce cas implique par contre que le nombre maximum ne dépasse pas 255 car au-delà il faudrait 2 octets pour enregistrer le nombre, bien que cela serait toujours mieux qu’un txt. Le défaut de cette méthode c’est que vous ne pourrez pas ouvrir vos fichiers avec un logiciel comme pour un txt. Il faudra surement faire un autre programme pour lire vos fichiers.
La méthode la plus simple c’est de stocker vos données dans un CSV. Ce format de fichier utilise la même méthode que les fichiers txt mais ils ont des fonctions supplémentaires. On peut facilement les importer dans un tableur et crée des graphiques. De plus tous les langages de programmation ont des fonctions intégrées pour les lires ou les créer.
Il y a aussi une autre méthode qui fera l’objet d’un article dédié. La création d’images. J’aime beaucoup pouvoir visualiser mes données, j’ai donc basé mon radiotélescope sur les météores sur l’enregistrement sous forme d’image.
Petit bonus :
Tout un tas de bout de code pour vous aider : Section programmation
Une réflexion sur « Logiciel radioastronomie traitement des données »