Djinious
Imagerie radarAérospatial et marine

Radar à synthèse d’ouverture

Former une image radar focalisée à partir des échos bruts — le chirp et la compression d’impulsion, le flou brut de l’historique de phase, la focalisation par rétroprojection qui surpasse la largeur de faisceau de l’antenne réelle, l’autofocus, puis le noyau de focalisation émis en Rust sûr en mémoire et compilé de manière croisée pour de l’ARM grand public.

DjiniousLab
Des flous en azimut compressés en distance à gauche s’effondrant en trois cibles ponctuelles nettement focalisées à droite après rétroprojection
gain de focalisation en azimut
>500×gain de focalisation en azimut
résolution en distance (vs c/2B = 1,0 m)
0,875 mrésolution en distance (vs c/2B = 1,0 m)
Erreur SIL Rust vs modèle (f32)
5e-11Erreur SIL Rust vs modèle (f32)
noyau compilé de manière croisée et attesté
aarch64noyau compilé de manière croisée et attesté
notebooks de conception
10notebooks de conception
exigences RÉUSSIES
5 / 5exigences RÉUSSIES

Construire l’image — puis livrer l’imageur sur une carte à 50 $.

Le radar à synthèse d’ouverture transforme une petite antenne montée sur une plateforme mobile en une antenne virtuelle longue de plusieurs kilomètres : parcourir une trace, tirer des impulsions chirpées, et le mouvement synthétise une ouverture qui résout le sol bien plus finement que l’antenne réelle ne le pourrait jamais. Les échos bruts sont un flou non focalisé ; la focalisation est ce qui les transforme en image. Ce programme construit toute cette chaîne — puis fait la partie pour laquelle MATLAB a besoin d’une seconde boîte à outils : il émet le noyau de focalisation en Rust sûr en mémoire et le compile de manière croisée pour un processeur ARM grand public, équivalent bit à bit au modèle.

La résolution vient du chirp, pas de la durée d’impulsion.

La résolution en distance d’un radar exigerait normalement une impulsion d’une brièveté impossible. Le SAR triche avec un long chirp à modulation de fréquence linéaire et la compression d’impulsion : un filtrage adapté de l’écho par rapport au chirp émis fait qu’une impulsion longue et de faible puissance s’effondre en un pic net dont la largeur est fixée par la bande passante, c/(2·B) — ici 0,875 m pour un chirp de 150 MHz. Les lobes secondaires de ce pic compressé se situent à −13 dB, et le fenêtrage les fait descendre à −42 dB au prix d’un lobe principal légèrement plus large.

DjiniousLab
Une impulsion radar compressée — un lobe principal net avec des lobes secondaires proches de -13 dB sur une échelle logarithmique
Compression d’impulsion : le filtrage adapté d’un long chirp LFM produit une réponse impulsionnelle nette avec ses premiers lobes secondaires à −13 dB. La résolution en distance est fixée par la bande passante du chirp (c/2B ≈ 0,9 m), et non par la durée physique de l’impulsion — le premier tour de passe-passe du SAR.

Un point au sol est un flou dans l’image brute.

Lorsque la plateforme survole une cible, la distance aller-retour trace une hyperbole — un point brillant unique s’étale donc sur de nombreuses impulsions et de nombreuses cases de distance. L’historique de phase brut est un flou texturé dans lequel rien n’est reconnaissable. Toute l’information est présente ; elle n’est simplement pas focalisée. Le traitement par ouverture synthétique est ce qui ramène la signature hyperbolique de chaque cible à un point.

DjiniousLab
Données brutes d’historique de phase SAR — une bande texturée où les cibles sont étalées en distance et en azimut
Historique de phase brut : chaque point au sol s’étale en une hyperbole tout au long de l’acquisition, se chevauchant avec ses voisins en une bande non focalisée. C’est ce que le radar enregistre réellement — l’image est latente, pas visible.
DjiniousLab
Des flous en azimut compressés en distance s’effondrant en trois cibles ponctuelles nettement focalisées après rétroprojection
La vedette — la focalisation par rétroprojection : la compression en distance affine les cibles en distance mais les laisse étalées en azimut (à gauche, une somme incohérente) ; rétroprojeter chaque impulsion de manière cohérente sur la grille au sol effondre chaque flou en un point net (à droite), un gain de focalisation de plus de 500×. L’ouverture synthétique surpasse la largeur de faisceau de l’antenne réelle.
DjiniousLab
Une image SAR focalisée de diffuseurs ponctuels disposés pour former les lettres SAR
Le résultat sur une scène : un champ de diffuseurs ponctuels disposés pour former « SAR » se focalise en une image lisible. Même processeur, une cible étendue au lieu de trois points — c’est la focalisation qui transforme un flou en quelque chose de reconnaissable.

Une erreur de phase inconnue la brouille — l’autofocus la trouve.

La focalisation suppose que vous connaissiez exactement la trace de la plateforme. Le mouvement réel comporte des erreurs, et une erreur de phase inconnue à travers l’ouverture défocalise l’image, tout comme un appareil photo mal mis au point. L’autofocus la retrouve à partir des données elles-mêmes : rechercher la correction de phase qui maximise la netteté de l’image, l’appliquer, et le pic flou revient d’un coup à sa largeur focalisée — sans qu’aucune mesure externe de l’erreur ne soit nécessaire.

DjiniousLab
Une réponse impulsionnelle floutée par une erreur de phase redevenant nette après autofocus
Autofocus : une erreur de phase de plateforme injectée étale le pic focalisé (rouge) ; une recherche par maximisation du contraste retrouve la correction et la réponse autofocalisée (pointillée) revient sur la réponse propre (verte). L’image corrige elle-même sa focalisation à partir des données.

Le noyau de focalisation devient du Rust sûr en mémoire sur de l’ARM grand public.

Former l’image n’est que la moitié de l’histoire ; déployer l’imageur en est l’autre moitié. Le noyau de rétroprojection déterministe par pixel est émis en Rust `#![no_std]` portable, vérifié bit à bit par rapport à la référence Julia en logiciel-dans-la-boucle (une erreur relative de 5×10⁻¹¹ en f32), compilé de manière croisée pour `aarch64-unknown-none` — l’ARM de classe Raspberry Pi, le processeur 64 bits le plus largement déployé au monde — et lié à une attestation in-toto pour la provenance de la chaîne d’approvisionnement. C’est l’histoire pilote automatique → firmware Rust (Rust sûr en mémoire, pas C, la réponse à Embedded Coder) un cran de calcul plus haut : d’une boucle de commande de microcontrôleur à un noyau d’imagerie en calcul de périphérie.

Chaque chiffre redérivé à la validation.

Le notebook de V&V reconstruit la chaîne depuis zéro et redérive chaque exigence, affichant un tableau RÉUSSI/ÉCHEC.

Résultat

  • Résolution en distance vs c/2B : 0,875 m (12,5 %)
  • Gain de focalisation en azimut : >500×
  • Lobes secondaires (rect / Hamming) : −13,5 / −42 dB
  • SIL Rust vs Julia (f32) : 5e-11
  • Compilation croisée + attestation : aarch64 + in-toto

Exigence

  • Résolution en distance vs c/2B : R-01 < 15 %
  • Gain de focalisation en azimut : R-02 ≥ 15×
  • Lobes secondaires (rect / Hamming) : R-03 ≤ −13 dB
  • SIL Rust vs Julia (f32) : R-04 ≤ 1e-6
  • Compilation croisée + attestation : R-05

Historique de phase simulé, un noyau réellement déployable.

Les données brutes sont un historique de phase simulé de cibles ponctuelles et de scène, et non de véritables échos aéroportés ou satellitaires ; la géométrie est en fauchée (stripmap) et le focaliseur est la rétroprojection (l’étalon-or et la cible naturelle pour la génération de code — pas les pipelines RDA/ω-k d’un processeur de production). Le dérisquage a mis au jour la leçon centrale du programme de façon honnête : en bande C, l’ouverture sous-échantillonnait la phase en azimut et projetait une ambiguïté hors cible, si bien que le programme fonctionne en bande L, où l’échantillonnage est non ambigu. La génération de code est le noyau no_std émis à la main, avec vérification logiciel-dans-la-boucle et compilation croisée aarch64 — pas l’émetteur de blocs de signaux GIR, qui cible les boucles de commande en flux continu, pas l’imagerie par lots ; l’exécution sur une carte spécifique nécessite un HAL (hors périmètre, même réserve que pour le pilote automatique). Ce qui est réel et réexécutable : la chaîne de focalisation complète, le gain de plus de 500×, le budget de lobes secondaires, le SIL exact au bit près, et la crate de noyau aarch64 attestée.