Publié le 9 avril 2014 - par

Le Raspberry Pi comme émetteur FM expérimental avec RDS !

rds_250pxDébut janvier, je vous avais présenté pifm, qui permettait de transformer votre framboise314 en émetteur FM expérimental.

Christophe, un radioamateur français (F8FTK) a amélioré le logiciel en lui adjoignant la possibilité de transmettre des informations RDS !

Avec PiFmRds vous pouvez désormais envoyer des données numériques , comme les stations de la bande FM.

tx_fm_600pxL’adjonction du RDS passe par une sous porteuse à 57kHz qui vient en supplément des autres informations normalement transmises par une station FM.

vfd_displayLa porteuse est supprimée mais peut être reconstituée à partir de la porteuse à 19kHz qui est multipliée par 3 par le récepteur. Les normes RDS indiquent que l’erreur de la sous-porteuse de 57 kHz doit être inférieure à ± 6 Hz, soit moins de 105 ppm (parties par million). L’erreur de l’oscillateur du Raspberry Pi peut être supérieure à ce chiffre. C’est là que le paramètre -ppm entre en jeu: vous spécifiez l’erreur de votre Pi et Pi-FM-RDS ajuste les diviseurs d’horloge en conséquence.

rds_250pxPar défaut l’émission se fait sur 107,9 MHz, mais vous pouvez la modifier.

panneau_danger_80pxReportez vous à l’article précédent pour les recommandations concernant la réglementation sur les émissions FM !
Ces émissions sont strictement interdites en France et vous réalisez ces essais à vos risques et périls. Il ne saurait être question de monter un émetteur FM personnel permanent…

Les essais seront de TRÈS COURTE DURÉE (quelques secondes) et avec la portée la plus réduite possible. Au delà, vous vous exposez à des poursuites.

En aucun cas framboise314.fr ne pourra être tenu pour responsable
des essais que vous déciderez de faire avec ce montage.

Le programme PiFmRds de Christophe est disponible sur Github.

Bravo pour la réalisation de ce programme !

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

41 réflexions au sujet de « Le Raspberry Pi comme émetteur FM expérimental avec RDS ! »

  1. Ping : Le Raspberry Pi comme émetteur FM expérimental avec RDS ! | Radioamateurs-France

  2. Alexandre

    Tout d’abord, bravo et merci pour le site.
    Il serait possible donc d’envoyer le titre de la musique lue par le transmetteur FM sur l’affichage de l’autoradio par exemple ?

    Répondre
    1. admin Auteur de l’article

      Bonjour Alexandre
      La réponse est oui, le paramètre -rt permet d’indiquer le texte à transmettre (maxi 64 caractères).
      Cordialement
      François

      Répondre
  3. Vincent

    Bonjour,

    Cet outil est vraiment très bien mais à chaque fois que je l’exécute, le son est capté que pendant 3-4 sec et après plus rien… comme s’il perdait la main sur la GPIO.
    Est-ce que c’este possible ?

    Vincent

    Répondre
  4. Ping : Le Raspberry Pi comme émetteur FM exp&ea...

  5. Ping : Le Raspberry Pi comme émetteur FM exp&ea...

  6. F8FTK

    Tout d’abord merci François pour ce joli article 🙂

    Vincent, c’est bizarre… Peut-être un bug qui ne se produit pas chez moi. Est-ce que le programme s’arrête abruptement au bout de 3-4 secondes ? Est-ce que le RDS continue à être émis ? Et en lançant le programme sans indiquer de fichier audio ?

    Aussi, pensez à mettre à jour (git pull) et recompiler, j’ai amélioré la gestion de l’audio hier, désormais on peut utiliser n’importe-quelle fréquence d’échantillonnage et générer de la stéréo. Avec de la chance, le problème sera peut-être résolu 😉

    Christophe.

    Répondre
  7. Ping : Le Raspberry Pi comme émetteur FM exp&ea...

  8. Puk

    Serait il possible de déporter l’antenne via un câble coaxial avec l’âme branchée sur le GPIO4 (broche 7) et la tresse de masse branchée sur la masse (broche 9)?
    Cela afin d’éloigner l’antenne émettrice et même installer une antenne plus performante…

    Encore merci pour ce site plein de bonnes idées et de nouvelles du monde de la framboise

    Répondre
  9. F8FTK

    Bonjour,

    Oui bien sûr, ce que vous décrivez est techniquement possible. Il faudrait aussi impérativement ajouter un filtre car la modulation FM produite par le Raspberry Pi produit beaucoup d’harmoniques non souhaités (car le signal est rectangulaire et non sinusoïdal). Le filtre permettrait de couper ces harmoniques.

    Attention cependant, pour émettre sur la bande FM, en France il faut obligatoirement avoir une autorisation du CSA (il faut être une station de radio autorisée à émettre sur une certaine fréquence, autrement dit). À ma connaissance la réglementation est à peu près équivalente dans la plupart des pays.

    Répondre
    1. Puk

      Bonjour,

      Votre réponse m’éclaire un peu plus sur le signal émis (Signal rectangulaire et non sinusoïdal) car n’ayant pas d’outils de mesure, je me demandais effectivement si le signal était propre malgré qu’il n’y ait pas de phénomène de rebond sur les fréquences alentours.
      Quel type de filtre serait il possible de mettre en place afin de corriger le problème des harmoniques?
      Je travaille dans une radio asso et avec une demande d’autorisation temporaire auprès du CSA, le Raspberry Pi semblait pouvoir être une solution lors de la couverture d’évènement extérieure afin de créer une radio temporaire sur le site le temps de l’évènement mais aussi de pouvoir envoyer le signal jusqu’à un point avec ADSL pour pouvoir ensuite streamer le signal sur internet jusqu’à notre studio pour pouvoir refaire une mise en ondes sur nos fréquences habituelles.

      Merci pour ces précisions

      Répondre
  10. laurent

    Bonjour,
    Débutant avec le raspberry et linux, j’ai voulu testé le fonctionnement de cet
    émetteur Fm. Malheureusement, quand je lance la commande
    sudo ./pi_fm_rds
    il apparait le message d’erreur
    command not found
    Pourtant j’ai lancé cette commande à partir du répertoire
    /PiFmRds/src
    De même en listant les fichiers dans ce répertoire, j’ai remarqué que j’avais un fichier nommé pi_fm_rds.c est-ce normal ?
    D’avance merci pour votre aide

    Répondre
  11. admin Auteur de l’article

    Bonjour Laurent
    Le programme est livré sous forme de source en C. Il faut d’abord le compiler avent utilisation comme indiqué dans le fichier README. Il faut normalement installer gcc s’il n’est pas installé sur votre RasPi puis compiler le programme avec la commande make. Après ceci vous devriez obtenir un exécutable.
    Cordialement
    François

    Répondre
    1. laurent

      Merci François,
      J’ai lancé la commande make et l’exécutable a été crée.
      J’ai testé un des fichiers wav fourni et cela fonctionne parfaitement. Seul petit souci le processus ne s’arrête et j’ai du débrancher le Raspi pour stopper l’émission. En outre le programme peut-il lire directement les mp3 sur une clé usb par exemple ?
      En tous cas, Félicitations pour ce site très pédagogique et intéressant .
      Bonne soirée

      Répondre
  12. eric

    Bonjour, ma sortie audio (jack) est coupée pendant le le broadcast via pifm, y a t il une solution pour conserver la sortie audio pendant l’émission radio ?
    Cordialement.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour sur la doc de PiFM en début du source, il est précisé que :
      * This code uses DMA channel 0 and the PWM hardware, with no regard for
      * whether something else might be trying to use it at the same time (such as
      * the 3.5mm jack audio driver).
      Ce qui explique sans doute l’absence de son sur le jack, puisque PiFM s’approprie le PWM sans se soucier des autres 😉
      A moins de modifier le programme, je ne vois pas de solution
      Cordialement
      François

      Répondre
  13. john

    Bonjour,
    Je viens d’acquérir le Rapberry B+ et souhaite tester ce projet.
    Après un apt-get update, et avoir suivi le README de Christophe, l’executable (lancé sous l’utilisateur pi) indique:
    Failed to open /dev/mem: Permission denied
    Terminating: cleanly deactivated the DMA engine.

    Avec l’utilisateur pi en « sudo », cela semble fonctionner.
    Quelques recherches indiquent qu’il serait une mauvaise idee de modifier les droits sur /dev/mem.
    Ne connaissant pas bien le fonctionnement de Github (https://github.com/contra/PiFM/blob/master/PiFmDma.c et celui de Christophe), je n’ai pas trouvé d’ « issues » relatant ce problème de droit.
    Une idée pour avoir accès à une utilisation avec un utilisateur autre que root serait la bienvenue pour moi.
    Cordialement avec de forts remerciements à Framboise314 pour ses articles, projets et présentations bien construites et traduites.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      il n’y a effectivement pas d' »issue » ouvert
      sur ce lien http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter il est précisé (dernier paragraphe)
      qu’il faut utiliser sudo pour lancer l’exécutable… :
      « Accessing Hardware

      The python library calls a C program (provided both precompiled and in source form). The C program maps the Peripheral Bus (0x20000000) in physical memory into virtual address space using /dev/mem and mmap. To do this it needs root access, hence the sudo. Next it sets the clock generator module to enabled and sets it to output on GPIO4 (no other accessible pins can be used). It also sets the frequency to 100.0Mhz (provided from PLLD@500Mhz, divided by 5), which provides a carrier. At this point, radios will stop making a « fuzz » noise, and become silent.  »
      Donc si ça fonctionne avec sudo ne changez rien d’autre
      Cordialement
      François

      Répondre
      1. john

        Merci beaucoup pour cette réponse ultra rapide!
        Je vais donc suivre vos conseils en renouvelant ma gratitude concernant à la fois les recherches que vous avez faites pour moi et pour l’ensemble des informations que votre site apporte.
        Cordialement,

        John

        Répondre
        1. F8FTK

          Bonsoir,

          En effet, il faut obligatoirement lancer PiFmRds en root (donc avec sudo), car il a besoin d’accéder à /dev/mem ; je préciserai ce point dans le README quand j’aurai le temps. Le programme manipule directement des pages mémoire, ce que normalement aucun programme utilisateur (même lancé par root…) ne devrait faire. Gérer la mémoire, c’est le domaine du noyau, point. Et donc PiFmRds & co ne devraient pas toucher à la mémoire eux-mêmes, mais déléguer cette tâche à un module du noyau. Voilà pour la théorie. Dans la pratique, /dev/mem permet de contourner ça, et c’est bien pratique pour des « programmes du dimanche ». Ce serait à changer si le programme passait du stade de « démo » au stade « qualité industrielle ».

          Christophe, F8FTK.

          Répondre
  14. Clotaire

    bonjour
    tout d’abord, bravo pour tout ce travail partagé,

    j’ai refait ce tuto plusieur fois sur un raspberry pi2

    Suite a la commande:
    root@raspberrypi2:/home/pi/PiFmRds/src# sudo ./pi_fm_rds -freq 100.0 -audio sound_22050.wav

    J’obtient ceci:
    Can’t open device file: mbox
    Try creating a device file with: sudo mknod mbox c 100 0

    Qu’est-ce à dire?

    D’avance merci

    Répondre
  15. Luis DA FONTE

    Bonsoir à tous,

    J’utilise le beau soft de https://github.com/ChristopheJacquet/PiFmRds et ça fonctionne bien.

    J’utilise la commande suivante :
    sudo sox -t mp3 http://listen.radionomy.com/modulradio -t wav – | sudo ./pi_fm_rds -freq 93.3 -ps ‘MODUL’ -audio –

    J’aurai deux questions:
    1) Est-il possible d’augmenter la puissance d’emission à 50 mW ?
    Puissance nouvellement autorisée à condition d’avoir 200 khz de libre au dessus et au dessous de la fréquence utilisée.

    2) Est-il possible d’améliorer la qualité du son émis car je le trouve un peu plat ?

    A bientôt et merci.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonsoir Luis
      Pour augmenter la puissance il faudrait un ampli mais aussi mesurer précisément la puissance de sortie, connaitre le gain « réel de l’antenne (PAR = Puissance Apparente Rayonnée ! ce n’est pas la puissance en sortie de l’émetteur) et s’assurer que l’émission est propre (raies parasites) .. ce qui ne se conçoit qu’avec des appareils de mesure adapté. Si vous vous lancez là dedans sachez que vous le faites à vos risques et périls 🙂
      http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000030160927
      Pour la modulation on n’est pas en présence d’un émetteur mais d’un système expérimental… ce qui n’est pas comparable
      cordialement
      François

      Répondre
  16. Fabien

    Bonjour,tout d’abord je vous félicite du travaille accompli.Cependant, un problème demeure, une fois la musique lancé elle se coupe aussi tôt (4-6 secondes après le lancement) sans aucune raison apparente. je précise que je suis tout nouveau dans le domaine de la programmation.
    Merci, a bientôt.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Fabien
      désolé mais à distance avec aussi peu d’infos c’est difficile de résoudre ce genre de problème
      essayez de chercher si quelqu un aurait eu ce souci sur les forums par exemple
      cordialement
      François

      Répondre
  17. Fabien

    bonjour, je donne suite a mon problème qui a été résolue. en changeant de carte sd donc j’ai réinstallé le système je me suis aperçu que sa marchais niquel ! je peut emmètre aisément sur 250m.
    est-ce-que quelqu’un aurais une commande qui me permettrais d’utiliser un micro ? Merci,
    cordialement, Fabien

    Répondre
          1. Fabien

            je vous remercie de votre réponse mais malheureusement cela ne fonctionne pas , voici la réponse du terminal:

            ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM copy
            arecord: main:722: erreur à l’ouverture audio: Aucun fichier ou dossier de ce type
            Unrecognised argument: –.
            Syntax: pi_fm_rds [-freq freq] [-audio file] [-ppm ppm_error] [-pi pi_code]
            [-ps ps_text] [-rt rt_text] [-ctl control_pipe]
            Terminating: cleanly deactivated the DMA engine and killed the carrier.

  18. F8FTK

    ALSA (arecord) est censé convertir à la volée les échantillons du micro au format WAV, et les envoyer sur sa sortie standard.

    Du côté de PiFmRds la commande suivante permet de lire un fichier WAV sur l’entrée standard:

    sudo ./pi_fm_rds -audio –

    Donc théoriquement avec la commande ci-dessus ça devrait marcher (attention à bien utiliser un trait d’union après -audio, pas un tiret demi-cadratin…)

    Répondre
    1. F8FTK

      Copier-coller la partie de commande ci-dessus ne fonctionnera pas, car justement, le moteur de blog transforme le trait d’union en fin de ligne en un tiret demi-cadratin…

      Répondre
  19. Bobyco

    Bonjour, je trouve le travaille excellent.
    Je l’avait installer sur mon raspberry b et maintenant que j’ai le pi3 je voulai savoir si ça fonctionner aussi avec, car je trouve qu’avec le PI3 j’ai un mauvais signal.

    Répondre
  20. milcam48

    bonjour :grinning: et j’ai un problème :

    avec vlc je difuser une musique sur un flux local et je voudrais le redifuser en fm avec pifm sur le raspberry

    info complemetaire
    raspberri 1
    avec raspbian

    un ordi avec ubuntu 16.4

    Répondre
  21. Lyonel

    Bonjour,
    Testé ce matin succès.
    Ça diffuse, pas de message d’erreur particulier.
    Seul souci, quand je demande à PiFmRds de lire un fichier mp3 (avec sox), le fichier est lu avec un problème de vitesse, au ralenti.
    Quelqu’un a t’il déjà eu le même problème ?
    Est-ce qu’il y a une solution ?
    Test réalisé avec un Raspberry pi 3 sous Raspbian

    Répondre
      1. Lyonel

        Merci pour votre réponse.
        J’essaye de diffuser un fichier mp3 avec un taux d’échantillonage 22050 Hz hébergé sur un serveur web. Voici la comande et son résultat :
        pi@raspberrypi:~/PiFmRds/src $ sox -t mp3 http://www.urban-radio.com/sites/default/files/podcasts/podcast/testfm.mp3 -t wav – | sudo ./pi_fm_rds -audio –
        Using mbox device /dev/vcio.
        Allocating physical memory: size = 3403776 mem_ref = 5 bus_addr = fd7b0000 virt_addr = 0x768a8000
        ppm corr is 0.0000, divider is 1096.4912 (1096 + 2012*2^-12) [nominal 1096.4912].
        sox WARN wav: Length in output .wav header will be wrong since can’t seek to fix it
        Using stdin for audio input.
        Input: 22050 Hz, upsampling factor: 10.34
        2 channels, generating stereo multiplex.
        Created low-pass FIR filter for audio channels, with cutoff at 8820.0 Hz
        PI: 1234, PS: .
        RT: « PiFmRds: live FM-RDS transmission from the RaspberryPi »
        Starting to transmit on 107.9 MHz.

        J’obtiens un son déformé car diffusé avec un pitch (ralenti)

        Répondre
        1. François MOCQ Auteur de l’article

          Bonjour Lyonel
          ça va plus loin que ce que j’ai pu tester
          est-ce qu’un fichier en local est correctement diffusé ?
          il faut essayer de localiser le défaut dans une des couches que vous avez empilées…
          cordialement
          François

          Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.