CRC mmbTools

Home arrow FM/RDS Tools arrow FM-RDS
FM-RDS Tools
Wednesday, 17 February 2010

Our works on multimedia data broadcasting and the renewed interest in RDS lead us to identify the need for an open FM-RDS transmission/reception chain. The GNU Radio platform which we used for our DAB tools appeared as a logical basis for new FM-RDS tools.

After some research, we discovered that most of the tools required to create an FM broadcasting chain were already available for GNU Radio but without much documentation or examples. This page shows an overview of the basic FM -RDS transmission and reception tools that we were able to integrate and further develop. For each demo, the GNURadio Companion flowcharts and the resulting Python code are provided. The CRC FM-RDS GNURadio flowcharts are licensed under the Creative Commons Attribution-ShareAlike 3.0 License.

FM-RDS Applications

The flowcharts we produced with the GNURadio Companion tool and the resulting code should run with the following dependencies installed:

  • - GNURadio version 3.2.2
  • - GNURadio Companion 3.2.2 (to open the flow charts)
  • - gr-rds project built from svn reposity v435 (as of 2010-02-19) (to use the RDS enabled applications)
  • - USRP with basic TX and basic RX daughter boards

FM demodulations

This is a demo of different ways to demodulate FM radio using the GNURadio framework. The user can enable/disable the sound from any of the demodulator to compare the results.

[GRC flow chart ] [Python code ]

 FM demodulation grc flowchart

FM spectral analyzer

This is a demo of a simple spectral analyzer for FM frequencies. This application samples a width of 3.2Mhz of spectrum which makes it easier to see multiple FM stations at once. A button lets the user turn on the audio of the current central FM frequency but a very powerful CPU will be required for this to work correctly.

[GRC flow chart ] [Python code ]

 FM spectral analyzer grc flowchart

 

FM-RDS Transmitter

This is a complete FM-RDS transmitter that takes an audio file or a raw audio feed through a named pipe. The "RDS data Source" block takes an XML file containing a description of the data to insert in the RDS channel in the following format:

<?xml version='1.0' encoding='UTF-8' ?>
<rds>
    <group type="0A">
        <field name="PI" type="string">C000</field>
        <field name="TP" type="bool">false</field>
        <field name="PTY" type="int">24</field>
        <field name="TA" type="bool">false</field>
        <field name="MuSp" type="bool">true</field>
        <field name="AF1" type="float">107.9</field>
        <field name="AF2" type="float">107.9</field>
        <field name="PS" type="string">CRC-FM  </field>
    </group>
    <group type="2A">
        <field name="RadioText" type="string">CRC-FM test transmission</field>
    </group>
</rds>

FM-RDS reception on iPod nano

The design is based on the FM transmitter found on opendigitalradio.org to which was added the RDS components from the gr-rds project. The RDS generation is now functional (as of 2010-02-19). The resulting data was successfully received on an FM enabled iPod nano as shown on the left.

[GRC flow chart ] [Python code ]

 FM-RDS transmitter grc flowchart

 

FM-RDS Receiver

This is a complete stereo FM-RDS receiver. The RDS blocks are also provided by the gr-rds project and they have been tested to work with multiple commercial FM radio stations. The decoded RDS data is shown on the console with the following format:

0A - PI:C849 - PTY:Cultures - country:MT/GB/LT/HR/   - area:Regional 5 - program:73
==>KISS FM <== -  -  -Music-STEREO - AF:105.30MHz
2A - PI:C849 - PTY:Cultures - country:MT/GB/LT/HR/   - area:Regional 5 - program:73
Radio Text B: Empire State Of Mind                   Jay Z + Alicia Keys      

[GRC flow chart ] [Python code ]

 FM-RDS receiver grc flowchart