Pourquoi est-il intéressant de disposer d'un décodeur RDS ? La plupart des récepteurs de radio un tant soit peu évolués savent afficher le nom RDS de la station (service PS) et synchroniser leur horloge (service CT). Plus rares sont ceux qui savent afficher le radiotexte, les fréquences alternatives, les informations routières TMC ou les données de basculement entre réseaux. Un récepteur maison sera par contre capable de fournir l'ensemble de ces données, de même que permettre l'étude des types de groupes employés, de leur fréquence, etc.

Comment réaliser un tel décodeur ? Il y a plusieurs sous-problèmes à résoudre :

  • Récupérer le signal multiplexe d'un récepteur de radio FM. Bien entendu, le signal multiplexe n'est pas le signal audio. Il faut récupérer le signal multiplexe sur la platine du récepteur, en sortie du discriminateur. Là se situe la plus grosse difficulté, car sans le manuel technique du récepteur, localiser ce signal peut être difficile, d'autant qu'on peut légitimement craindre qu'une fausse manœuvre ne soit fatale à l'appareil... La situation s'est récemment débloquée pour moi lorsque j'ai trouvé le manuel de dépannage de l'un de mes récepteurs, le Sangean PR-D1.
  • Réaliser la démodulation des données RDS autour de la porteuse à 57 kHz, de façon à récupérer le flux de données synchrone à 1187,5 bit/s. Il existe divers circuits intégrés qui réalisent cette fonction, dont le TDA7330 et le SAA6579, maintenant un peu obsolètes. Le Sangean PR-D1 dispose de la fonctionnalité RDS, réalisée par un SAA6579. J'aurais pu utiliser directement ses sorties numériques, mais j'ai jugé plus sage de récupérer le signal multiplexe et de l'injecter dans un TDA7330 dont je disposais depuis plusieurs années.
  • Transmettre les données à un ordinateur. Je l'ai réalisé par USB, via un échantillonnage par un PIC 18F2455.
  • Décoder le flux de données RDS. Cela se fait facilement en ayant sous la main la norme RDS. Personnellement, je l'ai réalisé à l'aide d'un programme en Java, dérivé d'un programme en C commencé en 2001, et que je n'avais pu essayer à l'époque que sur des flux pré-enregistrés.

Réalisation. Malgré une forte quantité de bruit générée par mon montage, le résultat est déjà assez satisfaisant. Lors de tests réalisés chez moi, où la réception de la radio FM est très mauvaise, mon système décode en quelques secondes les informations RDS de base (notamment le nom de la station), là où le décodeur intégré à mon Sangean PR-D1 patauge pendant de longues minutes. Cela est, je pense, en bonne partie dû à la conception particulière de mon logiciel de décodage. Je suppose que dans la plupart des décodeurs, notamment embarqués, un groupe n'est traité que si chacun des quatre blocs qui le composent a été reçu correctement. Or, quand les conditions de réception font qu'un bloc a une probabilité oscillant entre 0 et 50 % d'être reçu (jamais plus !), un groupe a une probabilité maximale d'environ 6 % d'être reçu intact. Si on prend en considération moins de 6 % des blocs, on comprend que le décodage des informations soit difficile... En revanche, mon décodeur est capable de traiter même les groupes incomplets, et d'en extraire des informations utiles. Par exemple, on se rend compte qu'il suffit de disposer de deux blocs bien précis dans les groupes n°0A pour pouvoir décoder le nom de la station... On peut ainsi passer de 6 % à 25 % des groupes exploités dans les hypothèses ci-dessus...

20090913_rdsdecoder.jpg

L'image ci-dessus est une capture d'écran de mon prototype de logiciel de décodage, lors d'une session sur France Info en Île-de-France. On voit le code PI, le nom de la station (PS), les fréquences alternatives de France Info, ainsi que le détail des informations EON (basculement sur d'autres réseaux) : fréquences de basculement, et même noms des stations concernées (ce qui n'est jamais exploité par les récepteurs du commerce). On note que les informations sur les noms des autres réseaux (notés ON, other networks) sont parfois incomplètes, car ces noms sont transmis à très basse fréquence, contrairement au nom de la station en cours de réception. Le site du CSA permet de vérifier les codes PI.

Il me reste à régler les points suivants :

  • L'installation actuelle génère énormément de bruit sur le récepteur. Je vais donc essayer de réduire ce bruit, notamment en améliorant la réalisation électrique du montage.
  • J'utilise les codes de correcteurs/synchronisateurs uniquement pour la synchronisation et la détection des blocs erronés. J'aimerais tenter d'essayer la correction d'erreur, si cela peut se faire de façon fiable.

Je reviendrai sur ce projet, et je détaillerai notamment :

Liens vers d'autres décodeurs RDS maison :