1.  Motivations

La norme DVB-S a été développée dans les années 1990 pour la diffusion de bouquets de télévision satellite numérique. Ces dernières années elle a été adoptée la communauté des radioamateurs pour des expériences de TV numérique (DATV). Des récepteurs DVB-S grand public sont disponibles à faible coût sous la forme de boîtiers set-top-box, de cartes PCI et de clés USB. Malheureusement certains ne sont pas adaptés à la DATV pour les raisons suivantes:

  • Leur étage d'entrée est optimisé pour un signal entre 950 MHz et 2150 MHz (transposé depuis 10.700 .. 12.750 GHz par une tête satellite) alors que la DATV se pratique aussi dans les bandes 70 cm et 13 cm (voire 2 m et 6 m). Les convertisseurs de fréquences ajoutent des coûts, de la complexité et du bruit.

  • Ils sont conçus pour une mise en oeuvre aussi simple que possible, alors que les radioamateurs préfèrent avoir accès à un maximum de réglages pour optimiser la réception.

  • Certains récepteurs ne supportent pas les vitesse de modulation très basses que les radioamateurs doivent utiliser pour respecter les contraintes de bande passante.

  • Certains émetteurs DATV, comme le système HamVideo de l'ISS, génèrent un flux MPEG légèrement différent de ceux des chaînes grand public, et certains récepteurs refusent de le décoder.

Avec des pilotes spécifiques il est apparemment possible de syntoniser au delà des fréquences spécifiées par le constructeur, de démoduler à bas débit, de contrôler davantage de paramètres et de récupérer les paquets MPEG bruts : voir http://www.vivadatv.org. Mais ceci ne fonctionne qu'avec certains chipsets.

Un récepteur DVB-S logiciel permet de s'affranchir de ces problèmes. On trouve maintenant des récepteurs SDR pour de nombreuses bandes de fréquences avec divers compromis entre le coût, la bande passante et la sensibilité. Les récepteurs RTL-SDR couvrent les bandes 10 m, 6 m, 2 m, 70 m et 23 cm.

Un récepteur DVB-S logiciel permet par ailleurs de profiter de tous les avantages de la radio logicielle :

  • Il est possible d'enregistrer un flux I/Q brut et de le démoduler plus tard. On réduit les risques d'erreur de manipulation pendant l'étape d'acquisition. C'est un avantage appréciable pour les signaux transitoires tels que ceux de l'ISS.

  • On peut passer autant de temps qu'on le souhaite à ajuster les paramètres de démodulation pour minimiser le taux d'erreur final.

  • On peut examiner les signaux et les filtrer numériquement avant de les démoduler, par exemple pour éliminer des signaux fantômes (birdies) ou corriger un écart en fréquence inattendu. Des algorithmes coûteux en temps de calcul peuvent être utilisés pour tenter de filtrer des bruits non aléatoires.

  • En combinant des enregistrements I/Q cohérents de plusieurs récepteurs, on peut espérer obtenir du gain matriciel, du gain de diversité ou une meilleure directivité.

  • On peut injecter un même signal numérique dans plusieurs demodulateurs logiciels pour comparer objectivement leurs performances.

  • Un récepteur SDR peut servir d'analyseur de spectre rudimentaire. Ceci permet de diagnostiquer divers problèmes tels que la présence de signaux parasites.

  • Un démodulateur logiciel ne devient jamais obsolète car tous les récepteurs SDR ont à peu près la même interface : configurer la fréquence centrale et la vitesse d'échantillonnage recevoir les données I/Q brutes. Au contraire, grâce aux progrès de l'industrie informatique, un démodulateur logiciel donné pourra traiter soit des débits plus importants, soit un plus grand nombre de canaux simultanément.

2.  Projets similaires

gr-dvb [GRDVB] est une implémentation complète de DVB-S pour gnuradio. Je l'ai utilisé pour des expériences de DATV antérieures (voir [SOFTDATV]).

gr-dvb est très utile en tant qu'implémentation de réference et d'un point de vue pédagogique, mais il est trop lent pour démoduler les signaux DATV de l'ISS en temps réel, même sur un PC de bureau rapide. Par ailleurs il s'appuie sur toute l'infrastructure associée à gnuradio y compris Boost, SWIG et Python, ce qui est pénalisant sur des plate-formes embarquées.

leandvb est écrit en C++ simple quasiment sans aucune dépendance, et est 10 fois plus rapide sur un seul coeur que gr-dvb tournant sur deux coeurs. La contrepartie de cette vitesse est une sensibilité très inférieure ; pour certaines applications c'est un compromis acceptable. Plus précisément, leandvb n'implémente pas l'algorithme de Viterbi. Il estime les symboles par décisions dures avant d'inverser le codage convolutif.

3.  Fonctionnalités

  • DVB-S, QPSK, taux de codage 1/2, 2/3, 3/4, 5/6, 7/8.

  • Détection des signaux I/Q conjugués (pour les convertisseurs dont la fréquence locale est supérieure à celle du signal).

  • Testé à faible taux d'échantillonnage (2 Msymboles/s à 2.4 Méch/s).

  • Filtrage automatique des "birdies" (utile avec des récepteurs SDR bas de gamme).

  • Format I/Q 8 bits non signé par défaut (compatible avec l'utilitaire rtl_sdr).

  • Supporte aussi I/Q flottant 32 bits (compatible avec gqrx).

4.  Limitations et problèmes identifiés

  • Pas de filtrage passe-bande. En présence d'autres transmissions à proximité du signal à démoduler, il faut réduire la fréquence d'échantillonnage.

  • Démodulation uniquement.

  • leandvb ne satisfait vraisemblement pas aux exigences de la normee DVB-S en terme de correction d'erreurs. Il n'est donc pas conforme à la norme DVB-S.

5.  Installation

leandvb nécessite un compilateur C++ avec les bibliothèques standard. Il est développé sous Linux et compile vraisemblablement sur d'autres plate-formes de type UNIX ou embarquées.

git clone http://github.com/pabr/leansdr.git
cd leansdr/src/apps
make

6.  Utilisation

Usage: leandvb [options]  < IQ  > TS
Demodulate DVB-S I/Q on stdin, output MPEG packets on stdout

Input options:
  --u8           Input format is 8-bit unsigned (rtl_sdr, default)
  --f32          Input format is 32-bit float (gqrx)
  -f HZ          Input sample rate (default: 2.4e6)
  --loop         Repeat (stdin must be a file)

Preprocessing options:
  --anf N        Number of birdies to remove (default: 1)
  --derotate HZ  For use with --fd-pp, otherwise use --tune
  --fd-pp NUM    Dump preprocessed IQ data to file descriptor

DVB-S options:
  --sr HZ        Symbol rate (default: 2e6)
  --tune HZ      Bias frequency for demodulation
  --cr N/D       Code rate 1/2 .. 7/8 (default: 1/2)

UI options:
  -h             Print this message
  -v             Output info during startup
  -d             Output debugging info
  --fd-info NUM  Print demodulator status to file descriptor
  --gui          Show constellation and spectrum
  --duration S   Width of timeline plot (default: 60)
  --linger       Keep GUI running after EOF

Testing options:
  --awgn STDDEV  Add white gaussian noise (slow)

N.B. : L'option --gui est disponible uniquement sur les plate-formes avec X11.

6.1.  Démodulation à partir de fichiers

Pour un signal HamTV à 2395 MHz transposé à 397 MHz par une tête MMDS avec oscillateur local de 1998 MHz LO :

$ rtl_sdr  -f 397000000  -s 2400000  capture.iq
$ ./leandvb  --gui  < capture.iq  > capture.ts
$ ffplay capture.ts

6.2.  Démodulation en temps réel

Pour une réception et un décodage en direct, il suffirait en théorie de lancer :

$ rtl_sdr  -f 397000000  -s 2400000  -  |  ./leandvb  --gui  |  vlc -

Cependant la diffusion de flux multimédia temps réel n'est pas si simple :

  • Certains lecteurs MPEG examinent le flux d'entrée avant de commencer à décoder. Il en résulte un délai que l'on peut parfois réduire en spécifiant les formats et codecs sur la ligne de commande.

  • La plupart des lecteurs MPEG cadencent l'affichage vidéo en utilisant le débit de la carte son comme horloge de référence, indépendamment du débit en entrée. Il en résulte inévitablement des artefacts sonores ou des saturations de buffers qui conduiront leandvb à se désynchroniser. On peut parfois remédier à ces problèmes en spécifiant manuellement une cadence d'affichage légèrement plus élevée que la valeur réelle.

Pour certains applications, par exemple la visioconférence, il faut également s'intéresser aux sources de latence.

  • La norme MPEG permet de transmettre les images dans le désordre, ce qui implique de la latence. Il faut paramétrer les encodeurs pour interdire la backward prediction.

  • L'entrelacement DVB-S introduit une latence incompressible de 2244 octets, soit 300 ms à 64 Kbit/s.

  • leandvb effectue certains traitements par blocs de taille fixe (mais la latence qui en résulte est en principe inférieure à celle imputable à l'entrelacement).

  • La plupart des décodeurs MPEG gèrent un tampon d'entrée pour que la lecture soit plus fluide.

Voici un script utilisé pour voir le flux vidéo de l'ISS en direct tout en enregistrant les échantillons I/Q :

$ while true; do
   rtl_sdr  -g 22  -f 397000000  -s 2400000  -  |  tee $(date +%Y%m%d_%H%M%S%z.iq)  |  ./leandvb  --gui  |  mplayer  -demuxer mpegts  -tsprobe 1  -vid 256  -aid 257  -vc ffmpeg2  -ao null  -
  done

Parfois le décodeur détecte plus facilement le flux MPEG lorsqu'on force la mise en tampon :

$ ...  |  mplayer -cache 128 -

leansdrcat peut rejouer un fichier à débit constant. Ceci permet de tester si un décodeur MPEG est capable de traiter des flux temps réel.

$ ./leansdrcat  --cbr $((2400000*16))  < capture.iq  |  ./leandvb  --gui  |  mplayer -

6.3.  Détection automatique des paramètres de modulation

leandvb a besoin de connaître la fréquence de modulation et le taux de codage DVB-S. Un outil auxiliaire, leansdrscan, permet d'automatiser la détection de ces paramètres.

La commande ci-dessous instanciera leandvb avec six combinaisons de fréquences de modulation (250 kS/s, 500 kS/s, 1000 kS/s) et de taux de codage (1/2, 7/8) jusqu'à l'obtention d'un flux MPEG.

$ ./leansdrscan  -v  --rewind  ./leandvb  -f 1024000  --sr 250000,500000  --cr 1/2,7/8  < capture.iq  > capture.ts

Avec un flux temps réel, l'option --rewind n'est pas utile. Par ailleurs, l'option --tune devrait permettre de balayer plusieurs canaux à bas débit dans un flux à large bande :

$ rtl_sdr ...  |  ./leansdrscan  -v  ./leandvb  -f 2400e3  --tune -500e3,0,500e3  --sr 250000  --cr 1/2,7/8  |  ...

N.B. : Il est possible que ceci ne fonctionne pas sur des bandes très chargées car leandvb n'effectue pas encore de filtrage passe-bande.

6.4.  Intégration avec d'autres logiciels

Avec l'option --fd-info, leandvb indique l'état du démodulateur sur un canal auxiliaire.

$ rtl_sdr ...  |  ./leansdrscan  ./leandvb --fd-info 2 -f 1024e3 --sr 250e3,500e3 --cr 1/2,3/4  |  mplayer -cache 128 -
CR 1/2
SR 250000.000000
LOCK 0
FREQ 4047
SS 66.660774
MER 19.8
LOCK 1
FREQ 4062
SS 65.118179
MER 18.7
FREQ 4047
...

Ceci devrait permettre d'utiliser leandvb comme plugin pour d'autres applications. Par exemple, leandvb_tui.sh présente l'état du démodulateur sur une ligne :

$ rtl_sdr ...  |  ./leandvb_tui.sh  ./leansdrscan  ./leandvb  --fd-info 2  -f 1024e3  --sr 250e3,500e3  --cr 1/2,3/4  |  mplayer  -quiet  -cache 128  -
[SS  68] [Offset   +4047 Hz] [MER 18.7 dB] [LOCKED] [SR  250000 Hz] [FEC 1/2]

7.  Performances

7.1.  Débit

La charge CPU dépend de la fréquence d'échantillonnage, de la fréquence de modulation et, dans une moindre mesure, du taux d'erreurs à corriger. N.B. : L'option --gui augmente la charge CPU.

leandvb peut démoduler 2 Msymboles/s numérisée à 2,4 Méch/s en temps réel sur une tablette Intel Z3745 1.33 GHz. Ceci permet de recevoir les transmissions HamTV de l'ISS avec un dispositif portable et peu coûteux, ce qui était l'objectif initial.

leandvb fonctionne également sur les plate-formes Raspberry Pi, mais avec des débits plus faibles.

Tableau 1.  Comparaison entre plate-formes

Datasetsamprate/symbrate/durIntel Core i7Intel Atom Z3745Raspberry Pi 2 Model B
gqrx_20151211_2047462.4M / 2M / 232588 KiB in 4 s2588 KiB in 13 s2639 KiB in 50 s

7.2.  Latence

7.3.  Sensibilité

leandvb peut démoduler un signal HamTV enregistré pendant un passage de l'ISS au zénith avec une antenne de 24 dBi polarisée linéairement, un convertisseur MMDS et un récepteur RTL-SDR R820T2.

leandvb a permis de recevoir le contact HamTV ARISS du 2016-05-09 avec une élévation culminant à 67° et une antenne portée à l'épaule (voir [HAMPADS]).

En revanche, lors d'un passage à 47° d'élévation par temps humide, la démodulation a été très mauvaise.

Tableau 2.  Comparaison entre démodulateurs

Sur Intel Core i7.

Datasetsamprate/symbrate/durleandvbgr-dvb without Viterbigr-dvb
gqrx_20151211_2047462.4M / 2M / 232588 KiB in 4 s2579 KiB in 8 s (17 s total)2648 KiB in 37 s (58 s total)

8.  Remarques sur la sécurité

Tout composant logiciel qui traite des données d'origine tierce doit être considéré comme un risque du point de vue de la sécurité. Cette règle s'applique aussi bien aux serveurs web qu'aux récepteurs radio logiciels. En théorie, si la réception logicielle de modes numériques sophistiqués devient populaire, une transmission mal intentionnée sur une bande HF pourrait attaquer des failles logicielles dans un grand nombre de récepteurs à l'échelle mondiale.

À titre préventif, il est souhaitable de faire tourner leandvb avec des privilèges minimaux, sous SELinux, dans une machine virtuelle, sur du matériel dédié, etc.

9.  Dépannage

Cette section illustre quelques problèmes courants.

9.1.  Configuration

Figure 1.  Format de données incorrect

Les échantillons ne sont pas décodés correctement.

Spécifier --u8 ou --f32.

Format de données incorrect

Figure 2.  Fréquences incorrectes

La synchronisation est instable.

Vérifier -f et --sr.

Fréquences incorrectes

Figure 3.  Suréchantillonnage excessif

Le récepteur SDR capture une bande plus large que nécessaire.

Ceci poserait des problèmes dans une bande chargée.

Réduire la vitesse d'échantillonnage.

Suréchantillonnage excessif


9.2.  Gain

Figure 4.  Amplitude excessive

  • Gain fixé manuellement trop haut
  • ou signal radio trop fort.
Amplitude excessive

Figure 5.  Saturation interne ?

Le motif I/Q en anneau suggère que le rapport S/B est bon (à gauche et au milieu).

Mais la distribution est anormale : l'amplitude est bornée, et les quatre nuages de points ne sont pas circulaires (à droite).

Ceci pourrait s'expliquer par une saturation à l'intérieur du récepteur RTL-SDR, avant l'étage DDC.

En attendant que ce phénomène soit mieux compris, on peut ajuster le gain manuellement.

Saturation interne ?


9.3.  Signal

Figure 6.  Signal parasite

Une porteuse parasite (en haut à droite) est filtrée automatiquement (en bas).

Ceci rétablit le motif I/Q en anneau (en bas à gauche).

Augmenter --anf si nécessaire.

Signal parasite

Figure 7.  Décalage en fréquence

Le signal est bon mais la syntonisation est imparfaite (en haut à droite).

Le spectre est re-centré avec --derotate -50000 (au milieu à droite).

N.B. : Le démodulateur aurait toléré ce décalage de toute façon.

Décalage en fréquence


10.  Détails d'implémentation

Figure 8.  Chaîne de démodulation

(Pour des signaux HamTV à 2 Msymboles/s et FEC=1/2)


11.  Développement

Voir https://github.com/pabr/leansdr.

12.  Perspectives

  • Améliorer l'interpolation

  • Mesurer la sensibilité

  • Multi-threading

  • Optimisations SIMD sur x86 et ARM

  • Viterbi. Ajustement automatique de la stratégie de démodulation en fonction du CPU

  • Permettre à leansdrscan de lancer plusieurs démodulateurs en parallèle.

  • DVB-S2

  • Modulateur (pour faire des tests ; il existe déjà plusieurs modulateurs DATV logiciels)

  • Plugin GQRX

  • Application Android.

13.  Notes sur la propriété intellectuelle

leandvb est développé principalement pour l'expérimentation non commerciale dans un contexte radioamateur. Sans entrer dans les débats sur la légitimité des brevets logiciels, quiconque envisagerait d'autres applications devrait probablement se plonger dans les considérations ci-dessous :

La norme DVB-S a été publiée initialement en 1994 sous la référence ETS 300 421. On peut espérer que tous les brevets applicables ont expiré ou expireront prochainement. Cependant, même lorsqu'une norme n'est plus couverte par des brevets, il est possible que des détails d'implémentation soient toujours protégés.

Pour construire un récepteur DVB-S logiciel complet il faut généralement ajouter un décodeur MPEG-2. La norme MPEG-2 a été finalisée vers 1995 et publiée en 1996. Cer article estime que les derniers brevets expireront en 2018.

D'autres normes telles que DVB-T (1997), H.264 (2003), DVB-S2 (2005), DVB-T2 (2008) et HEVC (2013) sont vraisemblablement protégées par des brevets.

14.  Remerciements

Edmund Tse a publié une implémentation de référence de DVB-S pour gnuradio dès 2010 ([GRDVB]), ce qui a permis de valider la faisabilité du projet.

Les premiers utilisateurs, F5OEO et K4KDR, ont fourni des enregistrements I/Q représentatifs de plusieurs types de modulateurs, de canaux de transmission et de récepteurs. Ceci a contribué à la mise au point de leandvb.

Bibliographie

[DVBS] Digital Video Broadcasting (DVB); Framing structure, channel coding and modulation for 11/12 GHz satellite services . 1997. ETSI. https://portal.etsi.org/webapp/WorkProgram/Report_WorkItem.asp?WKI_ID=5316.

[GRDVB] Software Radio for Digital Satellite Television . 2010. Edmund Tse. http://www.edmundtse.com/wp-content/uploads/2009/04/treatise.pdf.

[SOFTDATV] Réception logicielle des transmissions vidéo numériques de la Station Spatiale Internationale . http://www.pabr.org/radio/softdatv/softdatv.fr.html .

[HAMPADS] Une station de réception portative pour les satellites amateurs . http://www.pabr.org/radio/hampads/hampads.fr.html .