Enchanting subcarriers on FM


RDS has been my main object of interest in the field of FM listening for years now. RDS is the reason you can read the station name on a radio as soon as you tune onto it. It contains a lot of other info about the station and ongoing program as well (Wikipedia article). My interest is more in the decoding process than in the data it can reveal, although I like logging the data as well.

My radio (Sangean ATS 909) conveniently produces an alias of the 57 kHz RDS subcarrier around the stereo pilot tone at 19 kHz. This can be digitized using an ordinary sound card and demodulated + decoded in software (it's on GitHub, I named it redsea). However, the signal is very weak and suffers from interference due to its proximity to the audio band. Also, the radio already has an RDS decoder chip designed by someone wiser, so why not exploit it!

I plan to replace my sound card hack by redirecting the actual data from the decoder chip directly to a parallel port — which happens to use the same logic voltage levels (0/+5 V). Today I got the first components and already built part of the cable! So more updates soon.

My main concern is what happens to the voltage levels if they're fed both to the CPU in the radio and the parallel port at the same time. Will they still be over the threshold? We'll see! Ideas for amplifying the signal back to 5V are welcome.

Continues on the next post


  1. In the US, RDS PI codes are computed from the station callsign. Unfortunately, they appear to be random in Finland.

    1. Not only that, they aren't even unique here. Two unrelated stations may share a PI if their coverage areas are far apart.


The comments section is pre-moderated; it will take some time for the comment to show up.

You might want to check out the FAQ first.