Présentation
sdr-- est une application radio logicielle (SDR) qui combine un serveur Rust dédié au traitement du signal avec une interface web React. Le concept central repose sur un graphe visuel où l’on connecte appareils, décodeurs, affichages et enregistreurs sur une toile, puis on « épingle » les contrôles utiles sur un rack. Cette approche rend le flux de traitement entièrement configurable, du générateur de signaux intégré aux récepteurs cohérents pour le radar passif.
Architecture logicielle
Le serveur Rust (cargo run -p sdrmm) orchestre le pipeline DSP, exploite les bibliothèques SoapySDR (v0.8) pour accéder à plus de dix types de matériel (RTL‑SDR, HackRF, SDRplay, CR‑8, Airspy, LimeSDR, etc.) et expose une API REST, WebSocket et MCP. La séparation client‑serveur autorise le déploiement du serveur à proximité de l’antenne, tandis que l’interface React peut s’exécuter localement ou dans un navigateur distant, ce qui optimise la latence de contrôle en environnement distribué.
L’interface web, construite avec Node 26, pnpm 11 et le bundler Vite, propose un rafraîchissement à chaud (cargo xtask dev) et une documentation Swagger à l’adresse /api/docs. Le graphe de signaux, entièrement « patchable », permet d’insérer dynamiquement des nœuds de décodage (NFM, AM, SSB, modes numériques) ou des modules de traitement avancé comme la formation de faisceaux.
Fonctionnalités radio avancées
Parmi les capacités notables, sdr-- intègre un générateur de signaux virtuel qui produit des IQ de test (ex. ton de 1 kHz à 300 kHz du centre) et des fixtures générées par cargo xtask screenshots. Les récepteurs cohérents offrent localisation directionnelle, combinaison d’antennes et radar passif, exploitant les algorithmes de phase‑cohérence implémentés en Rust pour minimiser la dérive temporelle.
Le flux de données peut être exporté via UDP ou TCP, ou acheminé vers des webhooks, Matrix ou MQTT, facilitant l’intégration dans des chaînes de traitement tierces. La fonction d’enregistrement autorise la capture d’IQ, de base‑band ou d’audio, puis la relecture via les mêmes décodeurs, ce qui simplifie la validation de nouveaux modules de décodage.
Déploiement, construction et sécurité
L’installation se décline en paquets natifs (Homebrew, Nix) et en conteneurs Docker. Un exemple de composition Docker (
docker compose up -d) démarre le serveur en arrière‑plan, accessible sur http://localhost:8080. Par défaut, aucune authentification n’est activée, ce qui impose de sécuriser le réseau (pare‑feu, VPN) avant toute exposition publique.La compilation requiert le toolchain Rust épinglé, un compilateur C/C++, CMake, ainsi que les en‑têtes de développement SoapySDR. Ces dépendances garantissent la portabilité sur Linux, macOS et Windows, mais imposent une chaîne de construction non triviale, surtout pour les pilotes matériels propriétaires qui demandent leurs bibliothèques fournisseurs.
Le projet est publié sous GPL‑v3, assurant la transparence du code mais imposant des obligations de redistribution pour les dérivés. La documentation exhaustive (guide utilisateur, guide de contribution, catalogue de canaux) indique clairement quelles démodulations ont été validées en vol, limitant ainsi les attentes des opérateurs quant à la fiabilité des modes expérimentaux.