Décodeur RDS
Le dimanche 13 septembre 2009 à 23:16 - Lien permanent
Je viens de concrétiser un projet de longue date : réaliser un décodeur RDS. J'avais travaillé sur ce projet en 2001, sans aboutir, et je l'avais ensuite remis à plus tard. Voyons en quoi cela consiste, et ce qui m'a enfin permis d'avancer.
Le RDS, pour Radio Data System, permet aux émetteurs de radiodiffusion en bande FM de transmettre des informations telles que le nom de la station, des fréquences alternatives, des signaux horaires, des textes, ou encore des informations plus complexes qui permettent le basculement sur d'autres réseaux lors de la diffusion d'informations routières. D'un point de vue technique, le RDS ajoute une porteuse à 57 kHz au signal multiplexe des stations (le signal multiplexe de base est constitué du signal mono non modulé et d'un signal stéréo « différentiel » modulé en AM sur une porteuse à 38 kHz, supprimée), laquelle est modulée en amplitude, porteuse supprimée, par des symboles biphase correspondant aux bits, au débit de 1187,5 bits par seconde. Les données binaires sont structurées en « groupes » de 104 bits, composés de 4 blocs de 26 bits. Un bloc contient lui-même 16 bits de données et 10 bits qui servent à la synchronisation et à la détection/correction des erreurs. Il est possible d'acquérir la synchronisation au niveau bloc.
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...
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 :
- le programme de décodage [mise à jour du 27 novembre 2009 : le programme est devenu RDS Surveyor, publié sur son propre site web] ;
- la récupération du signal multiplexe sur le Sangean PR-D1 (quelques précisions sur le site de RDS Surveyor, en anglais) ;
- le montage électronique de démodulation (décrit sur le site de RDS Surveyor).
Liens vers d'autres décodeurs RDS maison :
- Décodeur belge
- Décodeur de Carsten Groß
- Décodeur à base d'ATmega
- Décodeur à base d'ATtiny
- Hollies RDS Decoder
- Décodeur à PIC et écran de téléphone Nokia
- Quelques infos sur un décodeur RDS réalisé en BTS
- Décodeur RDS à 68HC11, autre version
- Décodeur RDS à PIC de Xavier Fenard
- Site sur le RDS de G. Laroche, voir aussi l'index de ses projets et notamment un codeur RDS
- RDS – an investigation
Commentaires
Bonjour
merci pour votre site
Pourriez-vous me dire si vous connaissez des modules decodeur rds monté
J ai achete le RAYDEES....
http://www.on3pfm.be/raydees.php3
http://www.on3pfm.be/raydeesmodif.p...
L interface pour moi, est tres bonne (decodage MPX sur de tres faible signaux ) et installe tres facile
mais le soft interne ne vaut rien.....il met un temps fou a afficher les infos et reset aux moindre variation du signale
il faut un signale stable et fort......
Le concepteur a l air d etre sourd et avare de sevice apres vente (info)....
des que je renvoie le data dans le pc....c est le reve casis instantané PI ect...
si vous le desirez, je mettrai une video en ligne.....
voila, donc je chercherais un module pret a l emploi qui AFFICHE ! :)
ps je ne me sens pas capable d assumer des EPROGRAMMATION
ect.....
j ai pas peur de la soudure....
mais j ai du mal a me procurer les composents
A bientot
merci