-
Bilan de Liaison
Une antenne satellite possède plusieurs facteurs importantes. Ces derniers sont primordiales à connaître pour faire le budget link (bilan de liaison) d’une antenne.
On va dans ce cours, passer en revue quelques un de ces paramètres puis nous verrons comment claculer le budget link.
Pour la suite, je pars du principe que les notions vu dans ce cours sont acquises :)
⚪️ EIRP (Equivalent Isotropic Radiated Power)
En français, la PIRE pour Puissance Isotrope Rayonnée Équivalente représente la mesure de la puissance rayonnée d’une antenne dans une direction spécifique par rapport à l’antenne isotrope.
Pour comprendre, il faut voir l’antenne isotrope comme une bougie qui éclairerait dans toutes les directions de manière égale mais avec une lumière faible. À l’inverse d’une lampe torche qui éclaire plus fort mais dans une direction spécifique. Et bien la PIRE nous indique combien de bougies il faudrait pour obtenir la même intensité de lumière dans la direction où la lampe torche éclaire.
Ça se calcule en utilisant cette équation : EIRP = P - L + G, où
EIRP est la PIRE, en dB.
P la puissance de sortie de l’émetteur en dBm ou dBW.
L les pertes de câble en dB.
G le gain de l’antenne en dBi.
⚪️ Pertes de Transmission
Les pertes de transmission représentent les pertes de puissance du signal entre le satellite et une station de sol.
Sans trop rentrer dans le détail, ces pertes sont classées en 2 catégories principales.
Les pertes de propagation
Ce sont celles que rencontre le signal en traversant l’espace.
On y retrouve les pertes à cause du vide spatial parce que oui, le vide spatial engendre une atténuation du signal.
On a aussi les pertes dues à l’atmosphère :
Dans la ionosphère (couche haute), le signal est sujet à la rotation de Fraday causée par le champ magnétique de La Terre.
Dans la troposhère (couche basse), on a des facteurs comme par exemple la pluie qui peuvent atténuer le signal.
Les pertes locales
Il s’agit des pertes que l’on retrouve proche des stations de sol.
Par exemple, celles dues à l’environnement comme la température ou l’humidité.
Ou encore celles dues aux composants des équipements satellites eux mêmes.
⚪️ System Noise
Le bruit système est un élement qui dégrade la qualité du signal reçu.
Donc, dans la conception d’un satellite ou même d’autres trucs, on cherchera toujours à le minimiser le plus possible.
2 termes sont à connaître :
La Densité spectrale de bruit qui indique “combien de bruit” se trouve dans chaque petite portion de fréquence d’un signal. On l’exprime en dB/Hz ou W/Hz.
la Température du bruit généré par un composant spécifique. Plus la température est élevée, plus il y a de bruit.
Différents facteurs peuvent amener du bruit.
Composants des récepteurs
Il s’agit des composants électriques que l’on retrouve dans les systèmes de communication et qui peuvent causer du bruit en raison de leur température de fonctionnement. Du coup, ces composants génèrent intrèsequement une certaine forme de chaleur qui atténue le signal.
Fond diffus cosmologique
Plutôt classe celui-ci, il s’agit d’un rayonnement de fond qui provient du big bang et qui possède toujours un impact sur les composants des satellites.
Bruit Atmosphérique
Induit par La Terre, les décharges électriques dans l’atmosphère ou encore les variations de températures dans la journée peuvent génerer du bruit.
⚪️ Carrier-to-Noise Ratio & Signal-to-Noise Ratio
Pour quantifier la qualité d’une antenne, on va utiliser 2 ratios.
Le rapport porteuse sur bruit noté C/N ou CNR représente le rapport entre la puissance de la porteuse d’un signal modulé et la puissance du system noise.
Le rapport signal sur bruit noté S/N ou SNR représente le rapport entre la puissance du signal “en entier” et la puissance du system noise.
⚪️ Gain-To-Noise Temperature
Noté G/T, il s’agit d’une mesure pour évaluer l’efficacité de la réception du signal par une antenne. C’est en fait un rapport entre le gain de l’antenne et la température du system noise. Là, où le CNR et SNR sont des rapports entre un signal et le bruit.
Le G s’exprime en dB et le T en Kelvin (K).
⚪️ Budget Link
Après avoir vu quelques paramètres importants, passons au vif du sujet, le bilan de liaison (budget link).
Il s’agit d’un bilan de puissance qui prend en compte toutes les pertes et gains tout au long du trajet du signal, depuis l’émetteur jusqu’au récepteur.
On a des calculateurs en ligne qui permettent de le calculer comme celui-ci.
Un exemple de bilan de liaison :
Évidemment, dans ce cours, je n’ai présenté que quelques uns des paramètres qui composent un budget link.
Mais pour aller plus loin, je vous invite à essayer le challenge Linky de Hack-A-Sat qui consiste à retrouver certaines valeurs d’un bilan de liaison. Vous en apprendrez encore plus :)
Merci à Angelina Tsuboi qui m’a énormément inspiré pour ce cours.
-
Hack-A-Sat : Linky
Description du challenge : Years have passed since our satellite was designed, and the Systems Engineers didn’t do a great job with the documentation. Partial information was left behind in the user documentation and we don’t know what power level we should configure the Telemetry transmitter to ensure we have 10 dB of Eb/No margin over the minimum required for BER (4.4 dB)
Le challenge est disponible à cette adresse
Le but de ce challenge est de trouver certains points d’un bilan de liaison (budget link) pour compléter une documentation afin d’aider les ingénieurs satellites.
Pour réaliser ce challenge, je vous recommande grandement de suivre le cours sur le bilan de liaison
Alors oui, ça fait pas trop challenge de CTF mais faire des calculs sur des notions qu’on a l’habitude d’entendre comme le gain permet de mieux comprendre et approfondir certains aspects donc c’est pas plus mal :)
Donc, lorsque l’on accède à l’instance on nous donne ça :
> docker run --rm -i linky:challenge
...
Here's the information we have captured
************** Global Parameters *****************
Frequency (Hz): 12100000000.0
Wavelength (m): 0.025
Data Rate (bps): 10000000.0
************* Transmit Parameters ****************
Transmit Line Losses (dB): -1
Transmit Half-power Beamwidth (deg): 26.30
Transmit Antenna Gain (dBi): 16.23
Transmit Pointing Error (deg): 10.00
Transmit Pointing Loss (dB): -1.74
*************** Path Parameters ******************
Path Length (km): 2831
Polarization Loss (dB): -0.5
Atmospheric Loss (dB): -2.1
Ionospheric Loss (dB): -0.1
************** Receive Parameters ****************
Receive Antenna Diameter (m): 5.3
Receive Antenna Efficiency: 0.55
Receive Pointing Error (deg): 0.2
Receive System Noise Temperature (K): 522
Receive Line Loss (antenna to LNA) (dB): -2
Receive Demodulator Implementation Loss (dB): -2
Required Eb/No for BER (dB): 4.4
Calculate and provide the receive antenna gain in dBi:
Ok, ça fait pas mal d’informations.
⚪️ Calcul du gain
On va utiliser ce site. Ce dernier nous demande 3 paramètres :
L’efficacité de réception de l’antenne. Elle nous est donné, elle vaut 0.55.
La longueur d’onde. On l’a aussi, elle vaut 0.025m.
La surface d’aperture physique de l’antenne. Alors, ça on l’a pas mais on peut le calculer facilement. C’est juste la surface géométrique réelle qui capte ou émet les ondes. On nous donne le diamètre de notre antenne donc au final, sa surface physique, c’est juste son aire qui se calcule avec la formule π*r^2 avec r le rayon. Dans notre cas, il vaut r=5.3/2=2.65m
Donc, calculons cette surface : π*r^2=π*2.65^2=22. On peut à présent rentrer toutes nos valeurs dans le calculateur de gain :
Super, on a notre gain qui vaut à peu près 54dB. On peut répondre à la question et ça nous renvoit ceci :
Good job. You get to continue
Receive Antenna Gain (dBi): 54.00
Receive Half-power Beamwidth (deg): 0.33
Receive Pointing Error (deg): 0.2
Receive Pointing Loss (dB): -4.48
Okay, now we know the receive antenna gain.
Calculate and provide the ground terminal G/T (dB/K):
⚪️ Calcul du G/T (Gain-To-Noise Temperature)
On a un calculateur pour ça qui utilise la formule suivante :
Pour l’antenna gain, on l’a calculé avant, il vaut 54 mais attention, on veut le G/T de la station de sol (ground terminal), pas juste de l’antenne donc il faut aussi prendre en compte les pertes de transmission qui nous sont donnés Receive Line Loss (antenna to LNA) (dB): -2. On parle de gain effectif dans le cas où on prend en compte les pertes. Le calcul reste le même pour autant. Donc, notre gain effectif vaut 54-2=52.
Le system noise temperature nous est donné à 522K.
Calculons tout ça :
Ok, très bien, on trouve 24.8dB/K
Calculate and provide the ground terminal G/T (dB/K): 24.8
Nicely done. Let's keep going.
Determine the transmit power (in W) to achieve 10dB of Eb/No margin (above minimum for BER):
SUPER ! On peut passer à la suite.
⚪️ Calcul du Transit Power
À présent, on doit calculer la puissance de transmission pour atteindre une marge de 10dB de Eb/No au-dessus du minimum requis pour le taux d’erreur binaire (BER).
Le BER (Bit Error Rate) c’est la proportion de bits reçus avec des erreurs par rapport au nombre total de bits transmis.
Pour toute la suite, ce document va nous être bien utile si ce n’est indispensable :)
Ça nous dit que pour calculer le transmit power, il y a 3 étapes :
1 : Déterminer le Eb/No pour le BER voulu.
2 : Convertir le Eb/No en C/N (Carrier-to-Noise ratio).
3 : Ajouter les pertes de chemin et les marges d’affaiblissement.
1 : Déterminer le Eb/No
Le Eb/No pour le BER, on nous le donne, c’est 4.4dB.
2 : Convertir le Eb/No en C/N
On va utiliser ce calculateur qui se sert de cette formule.
On a besoin du bit rate, tant mieux, on nous le donne aussi, c’est 10000000.0bps donc 10Mbps.
On aussi besoin de la bande passante du récepteur. D’après l’exemple sur le pdf, ça vaut la moitié du bit rate donc 10/2=5MHz.
On remplit tout ça et on obtient C/N ≈ 7.4dB
3 : Ajouter les pertes et les marges
Carrier Power
Le carrier power (puissance de la porteuse) se calcule avec la formule suivante :
C = C/N * N ou en dB C = C/N + N avec C/N en db, N le noise power en W.
Noise Power
Donc, on doit d’abord calculer le Noise Power (Puissance du bruit) avec cette formule :
N = k * T * B avec k la constante de Boltzmann qui vaut 1.380650x10-23 J/K, T la température effective en Kelvin et B la bande passante du récepteur en Hz.
Quand on parle de puissance de bruit, on parle en réalité du bruit thermique généré par l’agitation thermique des électrons dans un conducteur, c’est pour ça qu’on utilise le Kelvin. Plus la température est élevée, plus les électrons s’agitent et plus le bruit est fort. Bref, calculons tout ça :
>>> boltzman = 1.38065e-23 # J/K
>>> data_rate = 10000000.0 # nous est donné
>>> bandwidth = data_rate / 2 # Hz
>>> effective_temperature = 290 # on prend la même que le PDF
>>> noise_power = boltzman * effective_temperature * bandwidth
>>> print(noise_power)
2.0019425e-14 # watts
Super, on a N = 2.0019425e-14W
Sauf qu’il ne faut pas oublier d’ajouter le bruit naturel auquel fait fasse notre récepteur. Ainsi, il faut aussi lui ajouter le noise figure qui mesure la dégradation du SNR en prenant comme référence une température de 290K (C’est une température de réference à laquelle les mesures de bruit sont normalisées). Le noise figure est un ratio alors que le noise power est une mesure absolue.
Noise Figure
On peut utiliser ce site pour récupérer ce dernier.
Le noise temp, il nous est donné à 522K et pour la reference temp, j’utilise la même que le guide donc 290K.
Et pour le noise power, on l’avait déjà calculé (2.0019425e-14) mais le résultat était en watt. Mettons le donc en dBm :
>>> import math
>>> noise_power_w = 2.0019425e-14 # W
>>> noise_power_mw = noise_power_w * 1000 # mW
>>> noise_power_dBm = 10*math.log10(noise_power_w) # dbm
>>> print(noise_power_dBm)
-106.98548400528693
On ajoute notre noise figure et noise temp : 4.4716 - 106.98548400528693 ≈ -102.5dBm
Et enfin, on a notre carrier power : C = 7.4 - 102.5 = -95.1dB.
Il s’agit de la puissance que reçoit le récepteur en entrée.
Path Loss
La path loss (pertes de propagation) en dB pour un site en plein air suivent cette formule : PL = 22dB + 20log(d/λ) avec d la distance entre l’émetteur et le récepteur. Et λ la longueur d’onde de la porteuse. Ces 2 valeurs nous sont déjà données.
>>> distance = 2831000 # m
>>> wavelength = 0.025 # m
>>> path_loss_dB = 22 + 20*math.log10(distance/wavelength) # dB
>>> print(path_loss_dB)
183.0799972138613
Okkk, on a notre PL=183.0799972138613
Transmit Power
On arrive au bout là, plus qu’à additionner tout ça ainsi que les autres pertes qui nous sont données et on aura enfin ce que l’on recherhe, le transmit power :
>>> transmit_line_losses = 1
>>> transmit_pointing_loss = 1.74
>>> polarization_loss = 0.5
>>> atmospheric_loss = 2.1
>>> ionospheric_loss = 0.1
>>> receive_pointing_loss = 4.48
>>> carrier_power_dBm = -95.1
>>> path_loss_dB = 183.0799972138613
>>> margin_dB = 10
>>> tx_antenna_gain_dBi = 16.23
>>> rx_antenna_gain_dBi = 54.00
>>> tx_power_dBm = transmit_line_losses + transmit_pointing_loss + polarization_loss + atmospheric_loss + ionospheric_loss + receive_pointing_loss + carrier_power_dBm + path_loss_dB + margin_dB - tx_antenna_gain_dBi - rx_antenna_gain_dBi # dBm
>>> tx_power_w = 10 ** (tx_power_dbm / 10) * 10**-3 # watt
>>> print(tx_power_W)
5.847897089829658
SUPER, donc notre puissance de transmission serait 5.8W.
Determine the transmit power (in W) to achieve 10dB of Eb/No margin (above minimum for BER): 5.8
Sorry, you lost
Wrong! Maybe next time.
AIE 🥲. Pourtant, le résultat est vraiment super cohérant.
Du coup, on va brute force, tant pis. Voici le script :
from pwn import *
context.log_level = "critical"
output = b"Wrong answer! You lose."
tx_power = 5.0
while b"Wrong" in output:
command = "docker run --rm -i linky:challenge"
p = process(command, shell=True)
p.recvuntil(b"Calculate and provide the receive antenna gain in dBi: ")
p.send(b"54\n")
p.recvuntil(b"Calculate and provide the ground terminal G/T (dB/K): ")
p.send(b"24.8\n")
p.recvuntil(b"Determine the transmit power (in W) to achieve 10dB of Eb/No margin (above minimum for BER): ")
print(f"Trying with Power Transmission = {tx_power:.1f}")
tx_power_formatted = f"{tx_power:.1f}\n"
p.send(tx_power_formatted.encode())
output = p.recv()
p.close()
tx_power += 0.1
print(output.decode())
On lance notre super script est … :
> p pouet.py
Trying with Power Transmission = 5.0
Trying with Power Transmission = 5.1
...
Trying with Power Transmission = 9.4
Trying with Power Transmission = 9.5
Winner Winner Chicken Dinner
OK, ça a l’air d’être 9.5W, un peu loin de ce que l’on a trouvé mais tant pis, on essaie cette valeur et let’s gooo, on a le flag !
Et voilà pour ce challenge avec pleins de calculs. En faisant ce chall sérieusement, on en apprend vraiment pas mal sur toutes ces notions en radio donc je valide :)
-
OSINT Satellites
L’OSINT (Open Source INTelligence) est une “technique” pour récupérer des informations qui proviennent de sources public. Cette méthode passive va nous permettre de récupérer de précieuses informations sur les satellites comme le lancement de ce dernier, ses composants, à quoi il sert, etc…
Toujours faire attention de bien vérifier ses sources, de pas croire n’importe quelle informations et d’utiliser des sites fiables comme ceux des bases de données gouvernementales.
⚪️ N2YO : Trace au sol
N2YO est un site web qui va nous permettre de récupérer des informations génériques sur les satellites.
On peut directement rechercher un satellite par son nom ou naviguer dans les différentes catégories pour en retrouver un selon certains critères. Par exemple, pour le satellite NOAA 19 :
Ça nous donne accès à pleins d’infos, déjà on peut suivre sa position. Mais aussi avoir des infos comme le NORAD ID ou encore les fréquences (uplink et downlink) dans certains cas. Bref, vraiment tout pleins d’infos comme le montre l’image ci-dessus.
Une information importante qu’il ne faut pas oublier de mentionner c’est les TLE qui sont affichés en bas de la page.
⚪️ CelesTrack : Catalogue des Satellites
Le catalogue CelesTrack est bien utile pour rechercher des satellites si on connait leur nom ou leur NORAD ID. Essayons une recherche avec le NORAD ID du NOAA 19 :
Même principe, on a pas mal d’informations sur le satellite. En cliquant sur les petits i, on peut avoir plus de détails sur chaque catégorie.
⚪️ CelesTrack : Sites de lancement
On retrouve ce catalogue des sites de lancement à cette adresse. Prenons par exemple le AFWTR :
C’est très pratique, en zoomant sur les zones, on peut retrouver l’emplacement exacte d’où est parti un satellite.
⚪️ KVH : Traqueur de fréquences
KVH est une entreprise qui a une base de données avec de nombreuses infos de communication sur les satellites. On y retrouve nottament leur fréquence.
⚪️ Orbiting Now : Données télémétriques
Ce site est vraiment super bien fait. En arrivant sur la page d’accueil, on peut scroll vers le bas et sélectionner une orbite, par exemple, la GEO (l’orbite géostationnaire).
Ça nous sort une liste de tous les satellites présents sur cet orbite. On peut sélectionner un satellite et avoir encore plus d’infos. Par exemple, essayez avec un et vous verrez tout un tas d’informations concernant sa position, sa vitesse, et même un historique ! Y a vraiment pleins de trucs.
⚪️ eoPortal : Missions Satellites
En ce qui concerne les informations détaillées de missions, eoPortal est vraiment pas mal. Mais genre vraiment pas mal. Y a tellement d’informations à ne plus savoir quoi en faire. Genre par exemple, vous voulez un schéma du sondeur d’humidité micro-ondes embarqué sur NOAA 19 ?? Et bien pas de soucis :
Bref, c’est vraiment une mine d’or d’informations pour en savoir plus sur un satellite.
⚪️ SATNow : Composants des satellites
Ce site va nous permettre de retrouver des informations intéressantes sur de nombreux composants d’un satellite.
Par exemple, on peut aller dans Product Categories -> Satellite Products -> Communication Systems -> Software Defined Radio et nous voilà avec des infos très précieuses sur le type d’appareils SDR embarqués sur un satellite.
⚪️ Google Earth
Inutile de le présenter, mais Google Earth est très pratique pour obtenir des coordonées géographiques, calculer des distances, …
⚪️ USGS Earth Explorer : Images détaillées
Ce site propose une vue satellite avec une super qualité, du moins pour les States. On peut cliquer sur Data Sets, sélectionner par exemple ASAS puis Results et obtenir des détails sur une partie scannée :
⚪️ Zoom.Earth : Images météos
Ce site fournit des cartes et des images météos.
Sur la barre d’outils à gauche, on peut sélectionner différentes cartes et faut dire que c’est super propre !
C’est surtout pratique pour récupérer des données météorologiques mais il vallait le coup d’être présenter.
⚪️ Mentions honorables
Satmap -> Une carte de tous les satellites en direct.
World Imagery Wayback -> Un historique de prises de vues satellites dans le monde.
Space Bandits -> Rescense des informations sur les petites entreprises du secteur spatial à travers le monde.
NASA Space Science Data Archive -> Contient des informations concernant les lancements, des descriptions détaillées de satellites ainsi que ses objectifs de mission.
NASA EarthData -> Pour tout ce qui est télédétection.
OrbitalMapper -> On en a déjà parlé dans ce cours mais je le mentionne quand même. C’est trop bien pour comprendre la mécanique des orbites.
On a fait un tour d’horizon de la plupart des sites très utiles pour faire de l’OSINT autour des satellites.
Si vous en connaissez d’autres, n’hésitez pas à les partager et merci pour votre lecture :)
Merci à Angelina Tsuboi qui m’a énormément inspiré pour ce cours.
-
Rapports de puissances
Quand il s’agit de comparer les puissances entre des antennes, on entend souvent parler de décibel, de gain et de pleins d’autres acronymes. Avec ce cours, on va passer en revue ces différentes notions sans trop les approndir noin plus :)
⚪️ Qu’est ce que les décibels ?
Les décibels (dB) sont une unité logarithmique utilisée pour exprimer le rapport entre deux valeurs.
Logarithmique, ça veut en gros dire que la valeur est exprimée en fonction de l’ordre de grandeur. Du coup, au lieu d’utiliser des multiplications, on va utiliser des additions ce qui simplifie grandement la vie. Par exemple, si une puissance double, genre de 10W à 20W, ça correspond à une augmentation de 3dB. Si derrière ça redouble, de 20W à 40W, on ajoute à nouveau 3dB soit un total de 6dB. Donc, au lieu de multiplier par 2 à chaque fois, on additione juste par 3dB. Et pourquoi 3dB, parce que c’est comme ça qu’est définit la formule pour calculer les dB.
P’tit extrait de la page Wikipedia qui l’explique :
En radiofréquence, on utilise les décibels pour exprimer le gain des antennes, la puissance des signaux, et les pertes dans les lignes de transmission.
Ce qu’il faut retenir, c’est que les décibels, ça permet surtout de représenter de gros écarts de puissance de manière plus compacte et compréhensible.
⚪️ Et le gain dans tout ça ?
Le gain, pour une antenne, ça permet de mesurer sa capacité à concentrer l’énergie dans une direction particulière par rapport à l’antenne isotrope. Iso quoi ?
Il s’agit d’une antenne théorique qui n’existe pas réellement, qui rayonne de manière uniforme dans toutes les directions autour d’elle.
Pour mieux comprendre, on va voir des diagrammes de rayonnement et ça sera d’un coup plus clair. C’est juste un moyen de montrer comment une antenne rayonne autour d’elle.
Donc, sur l’image du dessous, en rose, on a notre antenne isotrope théorique qui a son diagramme de rayonnement constitué d’un seul cercle. Son gain est de 0 et nous sert de référence.
Car en effet, on a une deuxième antenne, un dipole qui lui favorise son rayonnement dans 2 directions. Ainsi, on voit que ce dernier rayonne plus loin que l’antenne isotrope. Ce surplus est ce qu’on apelle le gain.
Le gain d’une antenne dipole est donc de 2,15dB. D’ailleurs, lui aussi sert aussi de référence. Ainsi, on parlera de dBi qu’on on prend comme référence l’antenne isotrope. Et on parlera de dBd qu’on on aura pour référence l’antenne dipole.
On peut au passage retenir ces 2 fomules : dBi = dBd + 2.14 et dBd = dBi - 2.14
Le gain est donc très important car il permet d’améliorer la qualité d’un signal, il permet aussi d’augmenter la distance à laquelle un signal peut être transmit. À noter qu’un gain peut aussi être négatif, on parlera d’atténuation du siganl.
De plus, on peut utiliser des amplificateurs afin de l’augmenter ou alors, avoir une antenne qui favorise une direction pour maximiser le gain comme par exemple les antennes Yagi, les fameuses antennes râteaux qu’on a sur nos toits.
-
Paramètres d'une orbite et TLE
Pour prédire le passage d’un satellite, il faut comprendre comment on décrit une orbite. Et pour la décrire parfaitement, on a besoin de 6 paramètres.
Dans ce cours, on va explorer chacun de ces paramètres qui ont des noms barbares mais je vais tenter de les expliquer à ma manière avec une approche simpliste en utilisant le super site Orbital Mechanics alors tenez bon et ne fuyez pas :)
Je vous invite grandement pour chaque paramètre d’aller les tester sur le site, c’est très simple à utiliser.
⚪️ Le demi-grand axe
Noté a, il réprésente la moitié du grand axe d’une ellipse.
Voilà ce que ça donne quand on modifie cette valeur :
⚪️ L’excentricité
Noté e, ça représente l’aplatissement d’une ellipse. Elle se calcule à partir des longueurs du demi-grand axe a et du demi-petit axe b avec cette formule :
Pour e=0, on a un cercle parfait (orbite & chemin fermé).
Pour 0<e<1, on a une ellipse (orbite & chemin fermé). C’est ce type d’excentricité qu’on aura affaire pour les satellites.
Pour e=1, on a une parabole (trajectoire ouverte).
Pour e>1, on a une hyperbole (trajectoire ouverte).
Changement de e :
⚪️ L’inclinaison
Noté i, c’est l’angle d’inclinaison du plan de l’obite par rapport au plan equatorial.
On comprend mieux comme ça :
En bleu, c’est le plan de l’orbite terreste.
En orange, c’est le plan de l’orbite du satellite.
On distingue 3 types d’inclinaison :
0°≤i≤90° : Prograde, le sens de l’orbite est le même que le sens de rotation de La Terre (ouest vers l’est).
90°<i≤180° : Prograde, le sens de l’orbite est à l’inverse du sens de rotation de La Terre (ouest vers l’est).
i=90° : Orbite polaire, cas particulier qui couvre toutes les latitudes.
⚪️ Longitude du nœud ascendant
Oui, toujours plus compliqué. Noté Ω, c’est l’angle entre le nœud ascendant et le point vernal. Oula, un mot compliqué en fait pousser d’autres.
En vrai, c’est pas difficle à comprendre.
D’abord, la notion de nœud ascendant et tant qu’on y est de nœud descendant avec ce schéma qui explique bien :
Donc, le noeud ascendant, c’est le croisement entre l’orbite de La Terre et celle du satellite (sur le schéma, La Lune) lorsque ce dernier “remonte”.
Le nœud descendant, c’est pareil mais inversement.
Ok, et maintenant le point vernal. En gros, c’est le nœud ascendant de l’orbite du Soleil avec l’équateur céleste.
L’écliptique, c’est l’orbite que décrit le Soleil autour de La Terre.
L’équateur céleste, c’est le plan défini par l’équateur terrestre.
Et donc, pour en revenir à nos aliens moutons, je répète que la longitude du nœud ascendant, c’est l’angle entre le nœud ascendant et le point vernal.
Bon, j’avoue, c’est le plus dur de tous à comprendre mais voyons ce que si passe quand on change cet angle :
⚪️ L’argument du Périastre
Noté ω, c’est l’angle entre le nœud ascendant et le périastre.
Donc le périastre, c’est le point sur l’orbite où le satellite est au plus proche de l’astre autour duquel il tourne.
Si l’astre c’est La Terre, on parle de périgée et d’apogée (périhélie et aphélie pour le Soleil).
Voyons ce qui se passe quand on change cet valeur :
⚪️ L’anomalie vraie
Noté 𝜈, c’est l’angle entre le périastre d’une orbite et la position actuelle du satellite. En fait, c’est ce paramètre qui nous permet de situer le satellite sur notre orbite. Sur le schéma ci-dessous, en fonction de l’angle, le satellite sera à différents endroits sur l’orbite.
Donc voilà, on a :
La taille et la forme de notre orbite grâce au demi-grand axe et l’excentricité.
L’orientation de l’orbite grâce à l’inclinaison, la longitude du nœud ascendant et l’argument du périastre.
La position du satellite grâce à l’anomalie vraie.
⚪️ TLE (Paramètres orbitaux à deux lignes)
Il existe un standard pour représenter les paramètres d’une orbite, c’est les TLE (Two Lines Elements).
On y retrouve sur la deuxième ligne les paramètres qu’on a appris.
Sur la première ligne, on a des informations concernant le satellite comme son NORAD ID.
Et c’est bon, on a réussi à arriver jusqu’au bout, BRAVO 😎.
J’espère que vous n’avez pas trop mal à la tête. Le but n’est pas de tout connaître par cœur mais d’avoir une idée de ce qu’on abordera par la suite.
Retenez surtout qu’on va souvent utiliser les TLE car c’est grâce à eux qu’on pourra prédire le passage d’un satellite à un endroit bien précis.
Pour ceux qui auraient besoin d’une autre représentation visuelle, y a cette super vidéo
Merci à Angelina Tsuboi qui m’a énormément inspiré pour ce cours.
-
SSTV avec le HackRF Portapack
La SSTV (Slow Scan Television) est une méthode de transmission d’images avec des ondes radios. Ça existe depuis 1950 et c’est plus du tout utilisé aujourd’hui parce qu’envoyer une image, c’est quand même plus facile avec Internet. Néanmoins, pour les amateurs radios, c’est sympa à expérimenter.
Pour rentrer en détail dans son mode de fonctionnement, il y a ce pdf qui est pas mal.
⚪️ Comment la transmettre ?
Depuis notre HackRF, on se rend dans l’onglet Transmit, puis SSTV. Cette dernière va nous permettre d’envoyer des images stockées sur notre carte SD. (2 images sont déjà présentes avec le firmware).
Sur le HackRF, il y a 6 différents mode de transmission à notre disposition. Sans trop rentrer dans les détails, on va dire que la principale différence se joue sur le temps de transmission :
Scottie 1 (110s), le plus utilisé avec une bonne qualité.
Scottie 2 (71s), avec une transmission plus rapide au détriment d’une qualité légèrement inférieure.
Scottie DX (270s), utilisé pour les longues distances, haute qualité mais transmission très lente.
Martin 1 (114s), bon rapport qualité/temps
Martin 2 (58s), avec une transmission rapide mais pareil, une moins bonne qualité. Il a surtout l’avantage de “mieux” se propager.
SC2-180 (180s), la meilleure qualité 😎.
Si non, qu’importe le mode, ce sera toujours une résolution en 320x526 pixels. Le HackRF ne prendra en charge que des images au format .bmp avec une taille de 320x256 donc.
Ensuite, on peut choisir la fréquence sur laquelle on veut émettre. On va choisir la 144.500MHz qui est utilisée par les radio amateurs pour la SSTV.
Et on peut appuyer sur le bouton Start pour commencer à émettre.
⚪️ Et pour recevoir ?
Afin de recevoir ses signaux, on va utiliser le logiciel MMSTV. C’est lui qui va récupérer en entrée un signal pour pouvoir le décoder en une image.
Par contre, il ne peut pas écouter le signal comme le ferait un logiciel SDR donc on va devoir écouter le signal avec par exemple SDR++, et renvoyer ce signal vers MMSTV. Pour ce faire, on va utiliser un câble audio virtuel en installant VB-Audio. Suffit juste d’installer les drivers et de redémarrer le PC pour s’en servir.
Lançons SDR++ pour déjà voir si on a bien un signal
Ok, on voit bien notre pic sur la fréquence qu’on avait choisit. Ça, c’est niquel, on en profite aussi pour changer l’output de l’audio à gauche en sélectionnant notre câble audio virtuel.
À présent, lançons MMSTV, et changeons d’input. Pour cela, on va dans Option -> setup MMSTV -> Misc et on remplace le In avec notre cable audio virtuel
Ok, à présent tout est prêt. Y a pleins d’autres paramètres à potentiellement explorer sur ce tool mais ça va au delà de mes conaissances et ça ne sera pas nécessaire pour ce qu’on veut faire de toute façon.
Rien n’est à démarrer côté MMSTV, si les entrées et sorties sont configurées sur les deux logiciels et que le HackRF est bien en train d’émettre, l’image apparaîtra petit à petit.
Voilà mon résultat :
Comme vous pouvez le constater, mon image est penchée, j’ignore encore pourquoi mais dans l’idée, voilà comment fonctionne la SSTV :)
-
Présentation du HackRF Portapack
Aujourd’hui, je vais vous présenter un kit HackRF que j’ai acheté sur Aliexpress.
Voulant en apprendre plus sur les attaques radio, je voulais acquérir ce fameux HackRF mais c’est pas donné. On peut trouver sa version orignale ici.
En revanche, il existe des versions custom qui se vendent bien moins chere sur Aliexpress et qui pour un débutant feront parfaitement l’affaire.
⚪️ C’est quoi le HackRF ?
Le HackRF ou HackRF One, c’est pareil, a été inventé et fabriqué par la société Great Scott Gadgets.
C’est à la fois un émetteur et un récepteur SDR qui possède une bande de fréquence super large de 1MHz à 6GHz (6000MHz).
Donc on peut écouter et émettre sur tout pleins de fréquences, intercepter et rejouer de signaux, c’est plutôt pas mal. Il est half-duplex, ça veut dire qu’il ne peut pas recevoir et transmettre en même temps.
Mais ⚠️ATTENTION⚠️, pour ce qui est d’émettre, c’est illégal sur la plupart des fréquences (En France comme ailleurs).
Maintenant, à des fins éducatives et de manière responsable, il n’y a (pour moi) pas de soucis à émettre sur des fréquences non autorisées. Par responsable, j’entends par exemple de ne pas utiliser la fonction Jamming du HackRF qui permet donc de brouiller les signaux sur une fréquence choisie. Même si ça marche que sur de la courte distance, on sait jamais ce qui a autour. Bref, on verra tout ça plus tard :)
⚪️ Et le Portapack alors ?
Ce qu’on appelle le HackRF Portapack, c’est un boitier avec un écran LCD, des touches pour se dépalcer dans un menu, et surtout une batterie. Ainsi, on peut se servir de son HackRF sans avoir besoin de le relier à un ordinateur ce qui le rend complètement autonome. Pour ce qui est du kit que je vous présente, le firmware utilisé pour faire tourner tous les tools sur le HackRF Portapack se nomme Mayhem (qui est un fork d’un ancien plus maintennu nommé Havoc).
⚪️ Présentation du kit
J’ai pris le Bundle 2 du lien que j’ai donné en intro. Ce dernier est composé d’un câble d’alimentation Micro Usb qui fait 120cm.
On retrouve aussi 3 antennes :
Une télescopique calibrée pour des fréquences de 40MHz à 6GHZ.
Une Wi-Fi pour le 2.4GHz et 5GHz.
Une antenne à fouet (whip antenna) pour des fréquences de 700MHz à 2700MHZ. Ce type d’antenne a une base magnétique qui permet de la fixer sur des surfaces métalliques (comme des voitures). La partie en spirale s’appelle une bobine de chargement (coil).
Et enfin, notre HackRF Portapack | Un clic sur le gros bouton pour l’allumer, 2 clics pour éteindre :)
On ne va pas s’attarder sur le menu puisque que je ferais un article dédié pour tout ça.
L’avant du boitier se présente comme ça :
On y retrouve :
Un endroit où y mettre une carte MicroSD (Il n’y en n’a pas de fourni dans le kit mais c’est important d’en mettre une pour accéder à + de fonctionnalités).
Un bouton reset qui permet comme son nom l’indique de reset.
Un bouton DFU (Device Firmware Upgrade) qui permet de modifier des trucs en cas de soucis.
Des LEDs 3v3, 1V8, RF qui allumés signifient juste que le HackRF est alimenté.
Une LED USB qui allumé, signifie que le HackRF est bien branché en USB à un PC.
Une LED RX qui allumé veut dire que le HackRF est en train de recevoir des signaux.
Une LED TX qui allumé veut dire que le HackRF est en train de transmettre des signaux.
Enfin, ANT (Antenna), un connecteur de type SMA femelle pour y connecter notre antenne.
Pour ce qui est de l’arrière du boitier :
On a :
Le port USB pour connecter le HackRF à un PC et le recharger aussi.
Un port HEADSET pour y brancher un casque audio. (Pas essayé si ça marche avec un micro)
Deux ports SMA femelle qui en tant que débutant ne risque pas de nous servir. Ils servent à la synchronisation d’horloge :
Un CLKIN (Clock Input) pour recevoir et se synchroniser avec une horloge externe
Un CLKOUT (Clock Output) pour fournir son propre signal d’horloge à d’autres appareils
Et voilà, ça sera tout pour cette présentation, la suite sur les différentes fonctionnalités à venir :)
-
Réception d'images satellites NOAA
⚪️ Compréhension du projet
Qui sont-ils
Les satellites NOAA (National Oceanic and Atmospheric Administration) sont des satellites météorologiques américains à orbite polaire qui sont à une altitude de 850km.
Pour comparer, l’ISS est à 400km.
A ce jour, il y en a 3 qui continuent d’émettre :
NOAA 15 à 137.6200MHz
NOAA 18 à 137.9125MHz
NOAA 19 à 137.1000MHz
Leur fréquence étant publique, n’importe qui avec le matériel adéquat peut recevoir leurs
images. Ils ne sont plus en période d’exploitation mais tant que la NASA considère qu’ils ne sont pas un danger, ils continuent de les laisser tourner.
Orbite héliosynchrone
Ces satellites ont une orbite circulaire qui les font passer d’un pôle à l’autre de La Terre.
Ils se présentent toute l’année sous le même angle par rapport au Soleil comme le montre l’image ci-dessous :
Ainsi, comme La Terre tourne sur elle même, le satellite peut balayer toute sa surface. Grâce à des logiciels ou sites web, on peut calculer ses orbites et prévoir le passage de chacun par rapport à des coordonnées géographiques.
Par exemple, voici une liste de prédictions des 3 satellites au dessus de la ville où est installée mon antenne le 22 avril 2024 :
Transmission APT
Les NOAA ne prennent pas directement des photos de la Terre. Ils en font plutôt un scan comme le ferait un scanner papier à une vitesse de 2 lignes par seconde, donc c’est lent.
Pour cela ils vont utiliser le mode APT (Automatic Picture Transmission). Il date de 1960 et seules 3 satellites l’utilisent encore.
La qualité est de 4km pour 1 pixel donc il ne faut pas zoomer si non, c’est très moche.
Voici un exemple d’image transmise que j’ai reçu avec ce système :
La transmission est composée de deux canaux d’images, des informations télémétriques et des données de synchronisation.
Le premier canal d’image est pris avec un capteur dans les longueurs d’onde visibles. (Un autre capteur peut être utilisé en fonction de la quantité de nuages).
Le second canal utilise un capteur infrarouge.
La bande à gauche de chaque image sont les données de synchronisation. En effet, en radio, les ondes peuvent faire des rebonds dans l’atmosphère ou sur d’autres obstacles. A terme, elles peuvent ne pas arriver dans le bon ordre jusqu’à l’antenne, donc ces bits sont là pour les remettre dans le bon ordre et être sûr qu’on reçoive le scan correctement.
Les 2 bandes à droite de chaque image sont les données télémétriques. Il s’agit d’informations envoyés concerant le satellite ainsi que des données pour la météo (C’est à ça qui sert après tout).
Toutes ces données vont être envoyées ligne par ligne à l’horizontal.
Avant d’être diffusées, les images recoivent des corrections géométriques permettant ainsi d’être exempt de la distorsion causée par la courbure de la Terre (Car la Terre n’est pas plate).
Ainsi, avec ces deux images capturées, on peut obtenir d’autres types d’image. Par exemple, voici une image thermique générée par les deux images précédentes :
C’est grâce à ce genre d’image que les personnes dans la météorologie (pas moi) seront à même de prédire le temps qu’il va faire ⛈️.
⚪️ Mise en place du projet
Partie matérielle
Fabrication de l’anntenne
Pour ce projet, j’ai décidé de partir sur une antenne V-dipôle.
Comme on l’a vu sur la partie des antennes, pour que notre antenne soit résonnante à la fréquence de 137MHz, on peut faire le calcul suivant :
\(λ=300/137≈2.18m\)
On va faire une antenne demi-onde donc elle devra faire une longueur de 2.18/2 soit 1.09m.
De plus, comme on fait un dipôle, on va devoir diviser à nouveau par 2 pour avoir la longueur de chaque pôle. Donc 1.09/2≈0.54. On sait à présent que chaque pôle devra faire 54cm pour être efficace au 137MHz.
Afin d’avoir une impédance de 50Ω, l’angle formé par les 2 pôles doit être de 120°. Voici un schéma qui reprend la même logique.
Le raccordement entre les pôles et le câble se fait avec un domino. On relie la tige centrale du câble à l’un, et la tresse autour du câble à l’autre.
Premier test avec une antenne rateau trouvé en déchetterie que j’ai remodelé :
Lors de la réalisation de ce premier modèle, je n’avais pas encore connaissance de ce qu’était le rapport d’onde stationnaire (SWR) et je n’ai donc pas pu tester si c’était une bonne antenne à part en observant les résultats des images. Malheureusement, le résultat n’était pas très convaincant.
Je décide alors d’investir dans un testeur d’antenne qui me permettra de calibrer mes antennes.
Et c’est grâce à lui que je me rends compte que le SWR vaut 11 avec une impédance de 20Ω ce qui ne va PAS DU TOUT.
Le soucis ? Un pôle en touchait un autre ce qui faitait comme un court-circuit au final. On voit pas très bien sur la photo mais les pôles de l’antenne sont soutenues par un plus petit morceau d’aluminium (accroché avec les serflexs). Or cette pièce est en un seul morceau et est en contact avec les deux pôles…
Je décide alors de changer la conception de l’antenne en prenant cette fois-ci 2 tiges en cuivre (meilleure conductivité).
On sort le testeur d’antenne et voici le résultat :
Le deux valeurs à prendre en compte sont
L’impédance -> R (Ω) qui est dans de 58Ω donc pas les 50Ω idéales mais relativement proche donc c’est cool.
Le rapport d’onde stationnaire -> VSWR qui doit être au plus proche de 1. Et là, 2.8, c’est pas terrible.
Je repars à la charge avec une troisième conception. Je récupère à nouveau à la déchetterie, une vieille antenne TV pour caravane. J’avais pas pensé de prendre de photos quand je l’ai récup donc voici une image de ce à quoi ça ressemblait :
Elle est pratique car on peut y visser les pôles et régler leur orientation ce qui nous facilite le travail pour le réglage de l’impédance. On fait donc un trou dans nos tubes de cuivre pour remplacer les deux morceaux qu’il y avait de base. On peut se servir de l’attache en métal à l’arrière pour la fixer à notre mas et voici à quoi ça ressemble à la fin :
En ce qui concerne la soudure, j’ai oublié de prendre en photo l’intérieur mais chaque tube de cuivre est soudé à un câble respectif qui lui même est déjà relié d’usine à la prise coaxiale dans le boitier. J’ai un peu redécoupé la partie blanche pour pas que ça fasse trop gros. Dans le boitier blanc, il y a déjà une prise coaxiale pour l’arrivée d’un câble. Donc on a plus qu’à venir visser notre cable coaxial dessus et on est tout bon.
On ressort le testeur d’antenne et voici le résultat final :
Le VSWR est très proche de 1 ce qui est vraiment pas mal pour le coup.
L’impédance de 42Ω n’est pas parfaite mais reste tout à fait correct.
Placement et Orientation
Les NOAA avec leur orbite polaire arrive soit par le nord soit par le sud. Par conséquant, on doit orienter l’antenne dans l’une de ses directions n’importe laquelle. Si on la place vers le nord alors que le satellite arrivait par le sud, on aura juste à retourner l’image. :)
Voilà le rendu final de l’antenne sur le toit orienté plein sud dans mon cas :
Raspberry
Pour ce projet, j’utilise un Raspberry 4 model B qui tourne sur Raspbian lite OS en 64-bits. Il n’aura pas d’interface graphique afin d’éviter toutes fréquences parasites provoquées par la consommation du CPU et de la RAM à cause des composants graphiques.
Ce dernier sera placé dans les combles dans un tupperware avec comme récepteur SDR la clé RTL-SDR V4. Il est relié par 11m de câble coaxial :
Partie logicielle
Github
Au départ, j’avais réalisé mes propres scripts pour démarrer les enregistrements automatiquement en récupérant les positions de satellites pour calculer leur passage.
En revanche, afin de me consacrer plus à la partie radio et avoir un code propre et très modulable, j’ai décidé d’utiliser ce dépôt Git qui va grandement nous être utile.
Pour l’installation, on le clone sur le Raspberry, on édite un fichier settings.yml pour y mettre nos coordonnées géographiques ainsi que d’autres paramètres que l’on verra plus loin.
On a plus qu’à lancer l’installation et nous voilà avec un site web affichant tous les passages prévus des satellites, un enrengistrement qui se lance automatiquement et une page Capture avec l’ensemble des images récupérées. Super pratique !
Accès à distance
A l’aide du dépôt Github précédemment cité, un serveur web nginx est créé en localhost sur le Raspberry.
Ce dernier est configuré avec une adresse IP fixe et est donc accessible que depuis le réseau local.
Afin d’y avoir accès depuis n’importe où, j’ai mis en place un serveur VPN avec Wireguard sur ma box Internet. Ainsi, tant que je dispose du fichier wireguard .conf, je peux accéder au réseau local et donc au Raspberry depuis n’importe où, y compris le téléphone !
Prédiction
On a un cronjob qui va se lancer chaque jour à 00h00. Il va s’occuper d’aller chercher les TLE (Two Lines Elements) des satellites en ligne. Il s’agit d’une représentation standardisée des paramètres oribtaux des objets en orbitre terrestre. C’est grâce à ces paramètres que l’on va pouvoir prédire à quelle heure un satellite va passer au dessus d’un point donné.
Une fois récupérée, on a une base de donnée à jour contenant la position des satellites qui nous intéressent.
Ainsi, on peut faire appel à l’outil predict qui comme son nom l’indique, va prédire le passage des satellites en sa basant sur les TLE, et sur une position géographique. Ce dernier va nous donner une intervalle durant laquelle le satellite va passer en nous indiquant l’élévation maximale du passage.
Un exemple de la commande lancée manuellement :
> nugget@noaa:~ $ predict -p "NOAA 15" -t /home/nugget/.config/satdump/satdump_tles.txt
1714330922 Sun 28Apr24 19:02:02 0 173 192 17 358 3297 35014 * 0.000000
1714331020 Sun 28Apr24 19:03:40 7 175 196 23 359 2648 35014 * 0.000000
1714331117 Sun 28Apr24 19:05:17 15 178 200 29 0 2017 35014 * 0.000000
1714331212 Sun 28Apr24 19:06:52 29 185 204 35 2 1446 35014 * 0.000000
1714331299 Sun 28Apr24 19:08:19 49 202 208 40 4 1030 35014 * 0.000000
1714331365 Sun 28Apr24 19:09:25 64 248 211 43 5 886 35014 * 0.000000
1714331410 Sun 28Apr24 19:10:10 59 293 213 46 6 919 35014 * 0.000000
1714331461 Sun 28Apr24 19:11:01 45 318 215 49 7 1079 35014 * 0.000000
1714331532 Sun 28Apr24 19:12:12 29 331 218 53 9 1423 35014 * 0.000000
1714331618 Sun 28Apr24 19:13:38 17 337 222 58 12 1937 35014 * 0.000000
1714331713 Sun 28Apr24 19:15:13 8 341 226 63 16 2543 35014 * 0.000000
1714331810 Sun 28Apr24 19:16:50 1 343 230 69 21 3185 35014 * 0.000000
1714331830 Sun 28Apr24 19:17:10 0 344 230 70 23 3314 35014 * 0.000000
Ici, on demande les prédictions du satellite NOAA 15 en précisant un fichier TLE à jour. L’élvation est indiqué par la 5ème colonne.
On voit que le prochain passage aura lieu entre 19:02 (première ligne) et 19:17 (dernière ligne) et que l’élévation maximale aura lieu à 19:09 (6ème ligne) et sera de 64°.
À noter que j’ai configuré l’outil pour qu’il fasse les enregistrements uniquement pour les passages avec une élévation supérieure à 40°, autrement, la réception n’est pas top.
Mais au final, qu’est ce qu’on enrengistre, des images ? Et bien non. En réalité, l’enregistrement consiste en la récupération d’un fichier audio !
La commande principale est celle-ci :
timeout "${RECORD_TIME}" rtl_fm -f "${FREQUENCY}M" -s 60k -g 40 -p 55 - | sox -t raw -r 60k -es -b 16 -c 1 - "${wav_file}" rate 11025
Décortiquons là en prenant comme exemple la prédiction de NOAA 15 vu précédemment :
timeout "${RECORD_TIME}" -> On laisse tourner la commande pendant ${RECORD_TIME} secondes. Dans notre cas, ça serait la soustraction entre le timestamp de la dernière ligne et la première soit 1714331830-1714330922=908 qui vaut environ 15 minutes.
rtl_fm est la commande permettant de démarrer l’enregistrement avec notre clé SDR. On lui passe comme argument :
-f -> La fréquence en MHz qui est de 137.62 pour NOAA 15.
-s -> La fréquence d’échantillonage en kHz. Dans notre cas, on capture 60 000 échantillons du signal chaque seconde. 60k est une bonne valeur pour conserver une bonne qualité sans avoir un fichier trop lourd.
-g -> Le gain est une mesure de l’amplification du signal par rapport au bruit de fond. Plus cette valeur est élevée, plus on pourra percevoir des signaux faibles mais en contrepartie il y aura plus de bruit. Il faut alors trouver un juste milieu en faitant plusieurs essais afin de conserver le signal sans avoir trop de bruit. À ce jour, je n’ai pas encore trouvé la valeur idéale mais 40 me convient.
-p -> Il s’agit de la préaccentuation. Il s’agit d’une technique pour compenser les pertes et améliorer le bruit en fonction du récepteur SDR. 55 semble faire unanimité pour ma clé RTL-SDR V4
- -> C’est juste pour dire de ne pas rediriger le résultat de la commande dans un fichier ou sur le terminal mais va être redrigié vers la commande sox avec le |.
sox est une commande nous permettant de faire des opérations sur des fichiers audio. Ici, on va s’en servir pour obtenir un fichier .wav :
-t -> On indique qu’en entrée, on a un fichier brut .raw. (C’est ce que nous sort rtl_fm).
-r -> On précise à quel fréquence d’échantillonage est le fichier brut. Donc, il faut que ça soit aussi 60k.
-es -> On spécifie l’encodage des échantillons. es désigne un encodage avec virgule flotante avec signe. C’est juste pour avoir une représentation plus précise qu’avec un encodage avec entier.
-b -> C’est la résolution des échantillons en bits. Donc là, nos échantillons sont représenté par des nombres en 16 bits. C’est une norme courante dans le traitement numérique cette valeur. Ça permet des échantillons pas trop lourd mais avec une précision suffissante quand même.
-c -> Le nombre de canal, faut le spécifier et comme on est pas en stéréo, on met 1 ce qui signifie mono donc.
rate -> On réduit la fréquence d’échantillonage à 11025Hz car le tool qu’on utilisera par la suite pour la conversion demande cette valeur.
Magie Conversion
Ok, à présent, on a un super fichier audio. Il nous reste plus qu’à le transformer en une image à l’aide du logiciel WXtoIMG. Ce dernier prend uniquement en entrée notre fichier .wav et s’occupe de faire la magie tout seul. On peut lui spécifier un mode de transformation pour l’image. Ce dernier va combiner les 2 images reçues du satellite pour en créer une selon notre besoin. Par exemple, on peut en générer une thermique comme celle qu’on a vu au début mais on peut aussi lui demander de coloriser l’image du mieux qu’il peut et même afficher les frontières le long des mers et océans. Voici un des résultats que j’ai reçue le 18 avril par NOAA 18 :
⚪️ Suite et Améliorations
HRPT
En réalité, ces satellites peuvent envoyer de plus belles images que ça. On l’a dit, mais le protocole APT date de 1960 alors que ces satellites ont été envoyés dans les années 2000. En fait, c’est juste pour une question de rétro-compatibilité avec de vieux équipements. Mais si non, les météorologues vont utiliser un protocole plus récent, le HRPT ( High-Resolution Picture Transmissions). Les NOAA envoient avec ce mode sur des fréquences plus hautes, 1700MHz. Leur récéption demande plus de conaissance et surtout une antenne tout autre. Il s’agit de la suite logique de ce projet afin d’avoir des images toujours plus belles car là où l’APT nous donnait du 4km/pixel, l’HRPT nous donne du 1km/pixel. C’est comme passé d’un écran FULL HD à de la 4K :)
Setup Raspberry
Actuellement, le Raspberry est à plus de 10m de l’antenne et est alimenté avec son transformateur d’origine et connecté en Wi-Fi.
Ok, mais on peut faire mieux même si c’est pour un gain minime sur le projet (le but c’est d’apprendre de toute façon).
Donc actuellement, je réfléchis à une solution pour venir mettre le Raspberry dans une boîte étanche directement en dessous de la tuile où se situe l’antenne. Cela me permettrait de passer de 11m à 5m. Ça permettra de minimiser les pertes dans la câble.
De plus, toute interferance est bonne à enlever, même minime. On l’a vu avec les composants graphiques.
On peut faire une pierre 2 coups afin d’enlever les mini interferences du transformateur ET avoir une connexion Ethernet qui sera bien meilleure que par Wi-Fi. Pour cela, on va utiliser un PoE Splitter qui va nous permettre à la fois d’alimenter le Raspberry ET de lui fournir une connexion à travers un seul câble Ethernet qui part du splitter jusqu’à un port PoE de ma box Internet.
Filtre et amplificateur
Bien que la clé SDR a pour rôle d’enregistrer dans la fréquence qu’on lui demande, elle n’est pas parfaite et il y aura toujours des signaux parasites autour. Pour régler ce problème, on peut utiliser un LNA (Low Noise Amplicator). Il va nous permettre de filtrer les signaux dans une gamme de fréquence bien spécifique.
J’ai donc invesit dans un LNA 137MHz. Ce dernier va laisser passer que les fréquences dans les 137MHz et en plus amplifier le signal avec un ajout minimal de bruit.
Voici à quoi ressemble ce dernier sans son chassis :
Il est important de le placer au plus prêt de l’antenne, afin d’amplifier le signal dès que possible. Ainsi, on est sur que le signal ne se perde pas durant le trajet.
SatDump
SatDump est un nouveau venu dans le milieu de la réception d’images satellites. Il s’agit d’une solution tout-en-un permettant à la fois l’enrengistrement ET la conversion de l’audio en image.
Il existe en ligne de commande et avec une interface graphique. Il est récent, “joli” et plus performant d’après ce qu’on entend. En effet, WXtoIMG est un vieux logiciel qui n’est même plus maintenu malheuresement.
Ainsi, pour la suite de ce projet, j’ai déjà commencé à mettre en place ce dernier. N’étant pas encore fonctionnel, je le présente ici comme axe d’amélioration.
⚪️ Ressources et inspirations
Cette section indique les ressources que j’ai principalement utilisé pour la compréhension en général de ce projet :
Mon père :
Astuces bricolages pour l’antenne (merci à lui ❤️)
Site Web :
Wikipédia
https://github.com/jekhokie/raspberry-noaa-v2
F4IAI
https://www.instructables.com/Raspberry-Pi-NOAA-Weather-Satellite-Receiver/
https://on5vl.org/noaa-satellite-meteo/
https://www.qsl.net/kd2bd/predict.html
https://wxtoimgrestored.xyz/
https://www.satdump.org/
…Bien d’autres que j’ai du oublier…
Youtube :
thonain
Ham Radio Crash Course
European GNU Radio Days
RADIOAMATEUR - PAR F4HTZ
sn0ren
saveitforparts
Et d’autres cours radio diverses
-
Comment ça marche les antennes ?
L’antenne est l’un des élements les plus importants en radiofréquence. On en retrouve sous pleins de formes, chacune optimisée pour une certaine fréquence. La science des antennes peut très vite devenir complexe, c’est pourquoi nous verrons dans ce cours que les bases.
⚪️ Fréquence
Quand on branche une prise de courant dans une maison, le courant qui y circule est dit alternatif, cela signifie qu’il change de sens à intervalle régulier (Le courant va du + vers le - et vice-versa). Le changement ne se fait pas en mode brutal, mais progressivement, formant une jolie sinusoide.
En France par exemple, cet intervalle oscille à 50Hz, ça signifie qu’il change de sens 100 fois par seconde. C’est ce qu’on appelle la fréquence avec comme unité le Hertz.
Une radio, c’est aussi un oscillateur, on parle de VFO (Variable Frequency Oscillator), terme barbare pour dire qu’on peut changer la fréquence.
Par exemple, en voiture, on peut tourner la roulette pour mettre une fréquence de 102.4MHz (NRJ). Cela signifie qu’on a 102,4 millions d’oscillations par seconde !
⚪️ Longueur
L’antenne la plus basique qu’on puisse faire est une antenne dipôle. C’est juste deux pièces de métal de même longeur reliées par un câble coaxial.
La longueur ne se choisit évidemment pas au hasard. Les transmissions radio se propagent avec une longueur physique qu’on appelle longueur d’onde. Elle se calcule avec cette formule : λ = c / f
avec λ la longueur d’onde en m, c la célérité de la lumière en m/s et f la période en Hz.
Pour faire des calculs plus simples, dans notre cas, la vitesse à laquelle se déplace l’onde est la vitesse de la lumière dans l’air donc 300 000 000m/s et nos fréquences sont en MHz donc on pourrait transformer notre formule en : λ=300/f
avec f en MHz et λ toujours en m.
Donc, pour en revenir à notre longueur d’antenne, cette dernière est directement liée à la longueur d’onde. En fait, dans le cas d’un dipôle simple, la longueur de l’antenne est égale à la moitié de la longueur d’onde. Et donc, chaque pôle fait un quart de la longueur d’onde. On parle d’antenne demi-onde.
Bref, tout ça pour dire qu’on dira qu’une antenne est résonnante à une certaine fréquence si elle est adaptée à cette dernière. Et d’ailleurs, ça peut se mesurer avec un appareil spécifique. Il nous donne le SWR (Standing Wave Ratio), le rapport d’onde stationnaire. Plus cette valeur sera proche de 1 et plus l’antenne sera résonnante à une certaine fréquence.
⚪️ Impédance
Dernière notion importante à prendre en compte dans une antenne, il s’agit de l’impédance.
En éléctricité, on utilise souvent des résistances, elles ont des valeurs fixes en Ohm noté Ω. Cela permet de s’opposer à un courant éléctrique.
Ok, mais en radio, on va souvent utiliser des condensateurs et des bobines et ces derniers ont une résistance qui sera variable en fonction de le fréquence du courant.
On parle de conductance pour un condensateur (unité en Farad)
On parle d’inductance pour une bobine (unité en Henry).
Plus la fréquence dans un circuit sera élévée, plus un condensateur aura une conductance faible et donc s’opposera moins au courant. C’est d’ailleurs comme ça qu’on peut faire un filtre passe-haut qui laissera passer que les hautes fréquences.
À l’inverse, pour une bobine, plus la fréquence est basse, plus son inductance est faible. Et cette fois, on peut faire des filtres passe-bas.
À noter qu’en mettant ces deux composants en parallèle avec leurs caractéristiques modifiables, on va pouvoir choisir des fréquences bien précises, c’est comme ça que fonctionne les VFO.
Bref, voilà pourquoi on parle d’impédance, c’est ni plus ni moins que la résistance dans un courant alternatif.
En radio, une valeur est devenue une norme internationale car elle est un bon compromis entre facteurs techniques et pratiques, c’est 50Ω. Ça permet de minimiser au mieux les pertes et par conséquent, les constructeurs se sont mis d’accord pour faire du matériel avec cette impédance comme les câbles coaxiaux par exemple.
Donc pour la réalisation d’une antenne, il faudra veiller à avoir une valeur au plus proche de ce 50Ω.
-
Amplitude et Modulation
Les signaux bruts qu’on veut émettre sont souvent faibles et peuvent grandement s’atténuer sur de longues distances. En modulant notre signal, on va pouvoir porter l’information sur une onde beaucoup plus puissante.
Et, bien que les sources d’émission se mettent plus ou moins d’accord pour utiliser des fréquences différentes, la modulation permet d’éviter les interférences en évitant que les signaux se mélangent.
De plus, avec toutes les perturbations et tout qu’on retrouve dans l’air (et dans l’eau), la modulation aide à rendre les signaux plus résistants à ces derniers.
⚪️ Et comment on module alors ?
Imaginons qu’on ait un signal à transporter, du son par exemple. On l’apellera signal modulant. Ce type de signal a une fréquence basse et est très faible.
Pour le transporter et qu’il serve à quelque chose dans sa vie, il nous faut un autre signal qu’on apellera onde porteuse qui sera une onde avec une fréquence élevée et donc puissante. C’est elle qui transportera notre signal faible.
Avec nos deux signaux réunis, on va venir les superposer (c’est des maths derrière), et on obtient notre signal modulé.
⚪️ C’est quoi l’amplitude
L’amplitude d’un signal est en gros sa hauteur maximal par rapport à sa position au repos. C’est en quelque sorte la puissance du signal radio.
Cette valeur est importante pour déterminer la qualité du signal reçue. plus l’amplitude sera élevée, meilleure sera la qualité. Mais trop élevée par contre, ça pourrait abimer le récepteur.
En modulation d’amplitude (AM), on va venir faire varier l’amplitude de l’onde porteuse en fonction de l’amplitude du signal modulant.
Pour mieux comprendre, on va utiliser GNURadio.
On place 2 blocs Signal Source, un pour notre Signal Modulant qui a une fréquence de 20Hz puis un second bloc qui sera notre onde porteuse avec une fréquence de 1000Hz donc bien plus élevée que le signal modulant.
Le bloc Throttle, on s’en fiche pour ce cours mais sachez qu’il est là pour éviter de faire crash le PC en réduisant la cadence à laquelle le CPU voudrait éxecuter le programme. Un seul placé quelque part suffit, c’est pour ça que y en a un juste un. Bref, revenons à ce qui nous intéresse.
Le bloc QT GUI TIME SINK va nous permettre de visualiser nos deux signaux dans le temps.
Voilà ce qui nous affiche lorsque l’on lance notre programme :
On voit nos 2 jolies sinusoides.
⚪️ Modulation d’Amplitude
À present, superposant nos deux signaux en les multipliant. On va pas rentrer dans les maths qui se cachent derrière (peut-être un jour).
Donc ici, on a juste rajouté le bloc Multiply et on renvoit le signal modulé dans notre Time Sink. J’ai aussi laissé les 2 autres signaux reliés au Time Sink pour qu’on puisse mieux comprendre.
Lançons le programme et laissons aparraître uniquement le signal modulé pour voir à quoi il ressemble.
On peut voir cette forme caractéristique de l’AM.
Et maintenant, affichons nos 3 signaux (modulant, porteuse et modulé)
On comprends déjà mieux, lorsque que l’amplitude de notre signal modulant diminue, ça diminue en conséquence l’amplitude de la porteuse.
Il existe bien d’autres types de modulation (FM, PM, …) qu’on choisit en fonction de ce que l’on veut transmettre, de notre bande passante, du bruit environnant, etc, … mais on garde ça pour une prochaine fois :)
-
C'est quoi la SDR ?
A la base, la réception des ondes radio utilise des composants comme des résistances, des condensateurs, des bobines… On retrouve un ensemble de pièces pour le traitement du signal comme les filtres, bref c’est un système qui existe depuis très longtemps 📻.
L’inconvénient, c’est que chaque composant est une entité physique, ça coûte cher, ça peut prendre de la place, et modifier les caractéristiques d’un d’entre eux demandent des compétences poussées en éléctronique.
⚪️ Récepteur numérique
L’idée va être de numériser le signal le plus tôt possible pour l’envoyer à un CPU où l’on pourra commencer notre traitement du signal. L’avantage est que l’on pourra utiliser des algorithmes beaucoup plus complexes, notamment à l’aide des nombres complexes qui sont très difficiles à mettre en place avec des résistances ou autres.
Et oui, ces fameux nombres qu’on pensait inutiles au lycée ont une réelle utilité pour les signaux.
La partie réelle du nombre sert à représenter l’amplitude (sa hauteur en quelque sorte) du signal.
La partie imaginaire, pour réprésenter sa phase (sa position dans le temps).
Ainsi, on va pouvoir simplifier des opérations mathématiques.
Pas convaincu ? Prenons par exemple la multiplication de deux signaux (inutile de comprendre ce que ça signifie).
Sans nombres complexes, il faudrait utiliser des calculs trigonométriques assez tordu.
Alors qu’avec les nombres complexes, il suffirait de multiplier les amplitudes et ajouter leur phase, ce qui se fait simplement avec des opérations algébriques sur les nombres complexes (si si :D).
De plus, le numérique se met simplement à jour, ce qui est pratique, notamment pour les logiciels ou autres algorithmes.
Un autre gros avantage du numérique est de pouvoir utiliser un analyseur de spectre ce qui est très pratique pour faire du debug. C’est comme utiliser WireShark 🦈.
⚪️ Fréquence d’échantillonage
Les signaux radios sont analogiques et comportent une infinité de valeurs, et ça nos CPU n’aiment pas les valeurs infinies, donc on vient capturer plusieurs points sur le signal à intervalle régulier afin de le transformer en un nombre fini. En fait, c’est plus précis de dire qu’on vient mesurer l’amplitude du signal à intervalle régulier puis qu’on vient stocker tout ça sous forme de nombres. C’est ça qu’on appelle la fréquence d’échantillonage !
Elle est rendue possible grâce à un convertisseur analogique-numérique (ADC).
Plus on prendra d’échantillons, plus on aura un signal numérique fidèle à la réalité mais plus il sera lourd et long à traiter.
Il existe d’ailleurs un théorème, celui de Nyquist–Shannon qui dit que pour reconstruire à l’identique un signal analogique, il doit être échantillonné à une fréquence au moins deux fois supérieure à sa fréquence maximale. En prenant une valeur 2 fois supérieure, on s’assure de reconstruire un signal analogique très précis.
⚪️ Récepteurs SDR
Numériser le signal et le traiter par logiciel a un nom, c’est la SDR (Software Defined Radio). Elle est rendue possible par des récépteurs comme par exemple celui-ci :
Ces récepteurs bon marché (lien vers un super kit pour débuter), se branchent en USB à un ordinateur équipé d’un logiciel SDR (il en existe plusieurs). On retrouve un port MCX (Micro Coaxial eXtended), c’est un connecteur coaxial plus petit que l’on relie à notre antenne. Ce dernier ne permet que la réception des signaux mais pas la transmission. Pour bénéficier des deux, il faudrait par exemple utiliser un HackRF.
-
HackTheBox : Walkie Hackie
Description du challenge :
Our agents got caught during a mission and found that the guards are using old walkie-talkies for their communication. The field team captured their transmissions. Can you interrupt their communication to help our agents escape from the guards?
Pour ce chall, on nous fournit 4 transmissions audio au format complex.
On a aussi accès à une instance web :
On peut tester avec des valeurs randoms pour voir comment ça réagit mais rien de spécial se produit.
Il faut surement y mettre un préambule spécifique ou je sais pas. Bref, allons voir de plus près les signaux avec Universal Radio Hacker.
Donc, on ouvre nos 4 fichiers avec URH. Exemple avec le premier :
En affichant les données en hexa, on constate que les 4 signaux fournies suivent une même logique :
Signal 1 : aaaaaaaa73214693a1ff14
Signal 2 : aaaaaaaa73214693a2ff84
Signal 3 : aaaaaaaa73214693b2ff24
Signal 4 : aaaaaaaa73214693b1ff57
Ça a l’air de matcher avec nos 3 paramètres, pour le signal 1, aaaaaaaa serait le préambule, 73214693 le sync word et a1ff14 le payload.
Je ressaie mais toujours rien.
Par contre, on remarque que les payloads, suivent eux aussi une logique, avec 2 caractères hexa, ff, et 2 autres caractères hexa.
On pourrait se créer une wordlist pour brute force tous les payloads possibles et voir si une page réagit différemment.
Créons d’abord une wordlist avec crunch :
crunch 6 6 0123456789ABCDEF -t @@FF@@ -o pouet
Passons au bruteforce avec ffuf. Mais d’abord, il nous faut récupérer le nom des paramètres pour la requête POST. Plusieurs possibilités, perso, j’utilise l’onglet Network présent sur n’importe quel navigateur en lançant une requête avec des paramètres au pif. On peut voir le nom de nos 3 paramètres, pa, sw et pl.
Bref, voici la commande pour le bruteforce, sans oublier le Content-Type si non, il ne se passera rien :
ffuf -c -w pouet -u http://94.237.56.188:40252/transmit -X POST -d "pa=aaaaaaaa&sw=73214693&pl=FUZZ" -H "Content-Type: application/x-www-form-urlencoded"
On note la size d’une requête type qui fait 2831, CtrlC puis on refait la même commande en y rajoutant le -fs 2831 pour voir si une requête a une taille différente.
On laisse mijoter et là, on voit que TOUS les payloads qui ont leur deuxième partie à F9 ont une size différente.
<SNIP>
[Status: 200, Size: 2896, Words: 420, Lines: 134, Duration: 25ms]
* W1: 9B
* W2: F9
[Status: 200, Size: 2896, Words: 420, Lines: 134, Duration: 23ms]
* W1: A7
* W2: F9
[Status: 200, Size: 2896, Words: 420, Lines: 134, Duration: 25ms]
* W1: BE
* W2: F9
Reste plus qu’à rentrer les bonnes valeurs avec un payload qui finit par F9 et obtient notre flag :)
On peut aussi faire un curl pour que ça fasse + hacker :
curl -X POST http://94.237.56.188:40252/transmit -d 'pa=aaaaaaaa&sw=73214693&pl=a2fff9'
Touch background to close