Copy Transcript
Copied
WEBVTT 00:00:00.000 --> 00:00:03.419 Every FM radio station in the country has a little 00:00:03.419 --> 00:00:07.059 data stream hidden inside it. It's been there 00:00:07.059 --> 00:00:09.560 for decades. Most listeners don't know it exists. 00:00:09.599 --> 00:00:13.439 And I mean, why would you? A lot of radio stations 00:00:13.439 --> 00:00:15.480 forget it's even running or how to set it up 00:00:15.480 --> 00:00:18.879 properly. It's called RDS and it's the reason 00:00:18.879 --> 00:00:21.219 your car knows what's playing and can show it 00:00:21.219 --> 00:00:24.260 on your dash. And in parts of Europe, it'll actually 00:00:24.260 --> 00:00:26.899 interrupt your music to tell you that there's 00:00:26.899 --> 00:00:30.289 a wreck on the highway. This is the Tyler Woodward 00:00:30.289 --> 00:00:32.969 Project. I'm Tyler. Everything in this episode 00:00:32.969 --> 00:00:37.670 is from my point of view, and any opinions are 00:00:37.670 --> 00:00:41.369 my own. Today I'm talking about RDS and RBDS, 00:00:41.549 --> 00:00:44.289 where it came from, how it ended up in the United 00:00:44.289 --> 00:00:49.049 States, and why a 1984 data protocol is still 00:00:49.049 --> 00:00:51.829 holding up the metadata backbone of FM radio 00:00:51.829 --> 00:01:03.520 in the US in 2026. RDS stands for Radio Data 00:01:03.520 --> 00:01:09.099 System. RBDS is the Americanized version. Same 00:01:09.099 --> 00:01:11.640 tech, slightly different implementation because 00:01:11.640 --> 00:01:17.299 we like to be different. The data rate is about 00:01:17.299 --> 00:01:22.540 1 .2 kilobits per second. A single second of 00:01:22.540 --> 00:01:26.359 Spotify audio carries roughly 13 ,000 times more 00:01:26.359 --> 00:01:29.859 data than an RDS stream can send in a full second. 00:01:30.140 --> 00:01:33.239 This isn't a fire hose of data, it's more like 00:01:33.239 --> 00:01:37.079 a drip from a leaky faucet. And it's outlasted 00:01:37.079 --> 00:01:39.620 a dozen or so systems that were supposed to replace 00:01:39.620 --> 00:01:43.359 it. The German predecessor to RDS was called 00:01:43.359 --> 00:01:48.480 ARI, and it did exactly one thing. In the late 00:01:48.480 --> 00:01:51.920 1960s, German broadcasters wanted car radios 00:01:51.920 --> 00:01:55.180 to alert drivers when there was a traffic alert 00:01:55.180 --> 00:01:59.540 erring. Not play it, not switch to it, not display 00:01:59.540 --> 00:02:02.930 it. Just light up a little indicator on the dash. 00:02:03.409 --> 00:02:07.530 Yes or no. That was it. The European Broadcasting 00:02:07.530 --> 00:02:10.469 Union figured there was probably more you could 00:02:10.469 --> 00:02:13.949 do with that idea. They started a working group 00:02:13.949 --> 00:02:18.830 back in 1974. Ten years of field trials and competing 00:02:18.830 --> 00:02:22.490 proposals and the final spec was released in 00:02:22.490 --> 00:02:26.610 1984. Commercial RDS car radio showed up at the 00:02:26.610 --> 00:02:32.659 Berlin radio show in 1987. Volvo shipped the 00:02:32.659 --> 00:02:37.460 first factory -installed RDS unit that same year. 00:02:38.400 --> 00:02:42.159 The U .S. didn't have a standard until 1993, 00:02:42.919 --> 00:02:45.439 when the National Radio Systems Committee published 00:02:45.439 --> 00:02:53.439 the NRSC -4. That's the RBDS spec. Several revisions 00:02:53.439 --> 00:02:56.879 followed, and in 2021, the standalone American 00:02:56.879 --> 00:03:00.860 standard was retired. and folded back into the 00:03:00.860 --> 00:03:04.979 international IEC standard as a named variant. 00:03:06.300 --> 00:03:09.639 Now, we can't talk about RDS and RBDS without 00:03:09.639 --> 00:03:13.759 getting a tad bit technical, so strap in, because 00:03:13.759 --> 00:03:17.800 here we go. FM radio signals have a certain structure 00:03:17.800 --> 00:03:21.199 to them that most people never think about or 00:03:21.199 --> 00:03:23.340 would ever care to think about, unless you're 00:03:23.340 --> 00:03:26.080 like me and you work in the industry or you're 00:03:26.080 --> 00:03:29.379 just a nerd. Either way, this stuff is fascinating. 00:03:30.259 --> 00:03:35.539 FM stereo broadcast carries a 19kHz pilot tone 00:03:35.539 --> 00:03:41.000 above the left plus right summed audio. Your 00:03:41.000 --> 00:03:45.259 radio uses that as a reference clock. From that, 00:03:45.620 --> 00:03:49.740 the receiver decodes a 38kHz subcarrier carrying 00:03:49.740 --> 00:03:53.360 the stereo difference signal, also called left 00:03:53.360 --> 00:03:57.319 minus right, which is the information that separates 00:03:57.319 --> 00:04:00.439 the left audio channel from the right audio channel, 00:04:00.919 --> 00:04:03.379 if that wasn't clear from the left minus right. 00:04:04.219 --> 00:04:09.520 RDS sits at 57 kHz, three times the pilot tone, 00:04:09.939 --> 00:04:14.280 and that's not a coincidence. Locking RDS to 00:04:14.280 --> 00:04:18.079 the third harmonic of the pilot means it shares 00:04:18.079 --> 00:04:21.180 the same reference clock as everything else in 00:04:21.180 --> 00:04:25.980 the signal. A receiver already decoding a stereo 00:04:25.980 --> 00:04:29.019 signal has everything it needs to decode RDS. 00:04:30.199 --> 00:04:33.959 In the 1980s, that meant adding RDS to a car 00:04:33.959 --> 00:04:39.060 radio was cheap. The groundwork was already there. 00:04:39.839 --> 00:04:44.439 The 1 .2 kilobit data rate isn't a random number 00:04:44.439 --> 00:04:47.339 either. It comes straight from the math of the 00:04:47.339 --> 00:04:51.319 signal itself. Everything is locked together. 00:04:51.470 --> 00:04:54.670 the pilot tone, the subcarrier, the bit clock, 00:04:54.949 --> 00:04:58.870 one big synchronized system. Whoever designed 00:04:58.870 --> 00:05:02.250 this was smart. Way smarter than me, I'll give 00:05:02.250 --> 00:05:08.110 you that. Now, one question I get about RDS is, 00:05:08.250 --> 00:05:12.029 well, why doesn't AM have this? Well, there's 00:05:12.029 --> 00:05:18.490 no room. FM modulation gives you enough bandwidth 00:05:18.490 --> 00:05:21.290 to stack subcarriers above the audio without 00:05:21.389 --> 00:05:25.930 interference. That's how stereo works. That's 00:05:25.930 --> 00:05:30.370 how RDS works. AM is a 10 kilohertz wide channel. 00:05:31.569 --> 00:05:35.589 Think of it like Wi -Fi channels. 20 megahertz, 00:05:35.670 --> 00:05:40.389 40 megahertz, 80 megahertz, but much, much smaller. 00:05:41.350 --> 00:05:45.870 The audio, the carrier, everything has to sit 00:05:45.870 --> 00:05:49.589 in that 10 kilohertz. There's nowhere to hide 00:05:49.589 --> 00:05:52.209 a subcarrier without landing on your own audio 00:05:52.209 --> 00:05:57.430 channel or worse, a neighboring station. The 00:05:57.430 --> 00:06:01.269 NRSC actually had a placeholder for AMRDS and 00:06:01.269 --> 00:06:05.589 the early versions, but even with trials there 00:06:05.589 --> 00:06:09.910 was never a deployment because of physics. You 00:06:09.910 --> 00:06:12.990 can't fit it in there if there isn't room for 00:06:12.990 --> 00:06:17.560 it. This is why HD radio matters more so for 00:06:17.560 --> 00:06:21.139 AM stations than FM, at least on the metadata 00:06:21.139 --> 00:06:25.240 side alone. The digital sidebands carry song 00:06:25.240 --> 00:06:29.639 title, artist information, album art, station 00:06:29.639 --> 00:06:33.819 names, and station logos. For stations that converted, 00:06:33.920 --> 00:06:38.259 it works and looks absolutely amazing. For the 00:06:38.259 --> 00:06:42.149 majority of AM stations that haven't, Well, your 00:06:42.149 --> 00:06:45.970 dashboard shows a frequency and not much else. 00:06:46.329 --> 00:06:52.750 1040 AM. In 2026, that's just not good enough 00:06:52.750 --> 00:06:56.529 anymore. The data stream is organized into groups 00:06:56.529 --> 00:07:00.790 of 104 bits with error correction built right 00:07:00.790 --> 00:07:05.569 in. The first 16 bits of every group, every time 00:07:05.569 --> 00:07:08.689 is the program identification code, the pie. 00:07:09.579 --> 00:07:12.980 In the US, it's calculated from the call sign. 00:07:13.459 --> 00:07:15.860 Feed a receiver the Pi, and it can decode the 00:07:15.860 --> 00:07:20.800 call sign. Group Type 0 carries the program service 00:07:20.800 --> 00:07:23.920 name, the eight -character station name on your 00:07:23.920 --> 00:07:27.300 infotainment system. Eight characters. Because 00:07:27.300 --> 00:07:30.420 that's what could fit on a mid -1980s car radio 00:07:30.420 --> 00:07:35.860 screen. The limit was designed around hardware 00:07:35.860 --> 00:07:40.329 that... hasn't existed for 40 some odd years 00:07:40.329 --> 00:07:46.170 and it hasn't changed. Group type 2 is radio 00:07:46.170 --> 00:07:50.750 text up to a whopping 64 characters song title 00:07:50.750 --> 00:07:55.230 and artist. An extension called radio text plus 00:07:55.230 --> 00:07:59.490 adds position tags so the receiver knows which 00:07:59.490 --> 00:08:02.689 characters are the song title and which is the 00:08:02.689 --> 00:08:05.449 artist. That's what builds the now playing display 00:08:05.449 --> 00:08:09.180 in the song history. that shows up on modern 00:08:09.180 --> 00:08:15.079 head units. There are also groups for clock sync 00:08:15.079 --> 00:08:17.860 alternate frequencies so a car radio can follow 00:08:17.860 --> 00:08:20.339 a station across various transmitters as you 00:08:20.339 --> 00:08:24.740 drive. Traffic announcements and the data only 00:08:24.740 --> 00:08:27.800 traffic service called TMC that fed European 00:08:27.800 --> 00:08:31.480 navigation devices for about 15 years before 00:08:31.480 --> 00:08:36.110 Google Maps made that irrelevant. Most American 00:08:36.110 --> 00:08:39.230 stations don't use a lot of the features that 00:08:39.230 --> 00:08:44.509 are available. Typical small to mid -market FM 00:08:44.509 --> 00:08:47.590 stations typically put their call letters in 00:08:47.590 --> 00:08:51.389 the 8 -character PS field, a static radio text 00:08:51.389 --> 00:08:54.149 that says something like, thanks for listening 00:08:54.149 --> 00:08:59.549 to 93 .3 The Rock or whatever station. A genre 00:08:59.549 --> 00:09:01.889 code that was probably configured by whoever 00:09:01.889 --> 00:09:05.620 set up the encoder years ago. or whatever defaults 00:09:05.620 --> 00:09:08.460 shipped from the factory. There's a station out 00:09:08.460 --> 00:09:12.700 by where I'm at that continues to say undefined, 00:09:12.720 --> 00:09:15.679 and it's been that way for 10 plus years, it's 00:09:15.679 --> 00:09:19.259 probably not gonna get fixed. The RBDS encoder 00:09:19.259 --> 00:09:23.279 can be a standalone box, usually at the transmitter 00:09:23.279 --> 00:09:26.379 site, but it can also be placed at the studio 00:09:26.379 --> 00:09:30.820 and sent by a lot of different methods out to 00:09:30.820 --> 00:09:35.129 the transmitter site. like Micro -MPX. Sometimes 00:09:35.129 --> 00:09:37.830 RBDS encoders can be built into the transmitter 00:09:37.830 --> 00:09:45.470 themselves and processors like the Omnia 9. There's 00:09:45.470 --> 00:09:48.090 Inovonix out of Santa Cruz. They make the most 00:09:48.090 --> 00:09:50.929 common RBDS encoders in the US radio market. 00:09:51.690 --> 00:09:55.470 And there's WorldCast that handles European installs, 00:09:55.629 --> 00:09:58.730 major markets over there. There's a Czech company 00:09:58.730 --> 00:10:01.860 called Pura that's become sort of a cult item 00:10:01.860 --> 00:10:05.019 and low power in college radio stations. I've 00:10:05.019 --> 00:10:08.120 seen engineers recommending that specifically 00:10:08.120 --> 00:10:10.820 because it's so cheap, you can sort of treat 00:10:10.820 --> 00:10:14.200 it as disposable. You can usually find those 00:10:14.200 --> 00:10:15.919 for about one hundred and ninety to five hundred 00:10:15.919 --> 00:10:18.840 bucks. We had a couple of these at the last cluster 00:10:18.840 --> 00:10:21.779 I worked at and they just worked and they were 00:10:21.779 --> 00:10:24.940 simple little boxes to set up. Not much to them. 00:10:25.559 --> 00:10:30.649 Now, that said, the standalone encoder It's slowly 00:10:30.649 --> 00:10:34.210 becoming a thing of the past. Nontel exciters 00:10:34.210 --> 00:10:37.470 now have RDS built directly into the web interface. 00:10:37.649 --> 00:10:40.289 You log into the transmitter and you configure 00:10:40.289 --> 00:10:44.409 it right there. No separate box. There's Orban 00:10:44.409 --> 00:10:47.529 that just announced at NAB 2026 that the new 00:10:47.529 --> 00:10:53.990 Optimod 5950 has Q's visual radio platform baked 00:10:53.990 --> 00:10:57.490 directly into the audio processor itself. The 00:10:57.490 --> 00:11:01.100 whole chain. Audio processing, RDS encoding, 00:11:01.940 --> 00:11:06.460 metadata management collapsed into one box. Great 00:11:06.460 --> 00:11:09.320 news for small stations who don't want to manage 00:11:09.320 --> 00:11:12.059 various pieces of gear, but less great news if 00:11:12.059 --> 00:11:16.059 you're in the business of selling standalone 00:11:16.059 --> 00:11:22.539 encoders. When the automation to encoder chain 00:11:22.539 --> 00:11:25.980 is maintained, it works fine and it looks great. 00:11:27.149 --> 00:11:30.110 When it's ignored you get stations with the wrong 00:11:30.110 --> 00:11:34.090 format code set for years and While speaking 00:11:34.090 --> 00:11:37.230 of that there's a documented case of an engineer 00:11:37.230 --> 00:11:39.710 taking over a station after an ownership change 00:11:39.710 --> 00:11:42.789 and finding The encoder was still broadcasting 00:11:42.789 --> 00:11:45.990 the previous formats branding the format had 00:11:45.990 --> 00:11:50.889 ended nine years earlier nine years of wrong 00:11:50.889 --> 00:11:57.039 data Now how nobody noticed? I find that hard 00:11:57.039 --> 00:11:59.419 to believe, but it seems to have happened, at 00:11:59.419 --> 00:12:03.000 least from a post over on radio discussions about 00:12:03.000 --> 00:12:09.779 it. The 8 character scrolling thing has its own 00:12:09.779 --> 00:12:15.179 argument. The European standard says PS is a 00:12:15.179 --> 00:12:20.240 static name. Period. Full stop. The American 00:12:20.240 --> 00:12:25.659 RBDS standard allows changes if they're not too 00:12:25.659 --> 00:12:30.879 distracting. What did American radio hear? You 00:12:30.879 --> 00:12:34.019 can change it! And it immediately started running 00:12:34.019 --> 00:12:37.580 full slogans through the field eight characters 00:12:37.580 --> 00:12:41.600 at a time like a marquee sign. European automakers 00:12:41.600 --> 00:12:45.220 hate this. There's a radio world piece specifically 00:12:45.220 --> 00:12:48.080 about a new Audi putting the scrolling PS text 00:12:48.080 --> 00:12:51.080 right next to the speedometer in the driver's 00:12:51.080 --> 00:12:54.539 sightline. Don't be that station. Don't do that. 00:12:55.879 --> 00:13:01.120 Now parts of RDS and RBDS are aging out. The 00:13:01.120 --> 00:13:03.460 TMC traffic service over in Europe is shutting 00:13:03.460 --> 00:13:07.379 down. The eight character display limit is embarrassing 00:13:07.379 --> 00:13:11.899 at this point, but we got to talk about the Pi 00:13:11.899 --> 00:13:14.960 code because it's still doing something that 00:13:14.960 --> 00:13:19.240 nothing else can do. It's literally holding up 00:13:19.240 --> 00:13:22.559 the next generation of metadata in the radio. 00:13:23.120 --> 00:13:28.039 Xperi. The company behind HD radio runs a system 00:13:28.039 --> 00:13:33.059 called DTS Auto Stage. It's in over 16 million 00:13:33.059 --> 00:13:37.240 vehicles across 13 brands including BMW, Ford, 00:13:37.980 --> 00:13:42.340 Audi and Mercedes. It reads the pie code off 00:13:42.340 --> 00:13:46.419 the RDS stream, uses that as a lookup key against 00:13:46.419 --> 00:13:51.190 a cloud database and pulls down a high -res version 00:13:51.190 --> 00:13:54.269 of the station's logo, album art, and full metadata 00:13:54.269 --> 00:13:59.289 that the subcarrier itself could never carry 00:13:59.289 --> 00:14:02.710 in that one point something kilobit stream. The 00:14:02.710 --> 00:14:06.809 broadcast sends a 16 -bit identifier. The internet 00:14:06.809 --> 00:14:11.029 sends everything else. The bridge is a number 00:14:11.029 --> 00:14:15.210 from a 1984 standard. Only thing about this, 00:14:15.669 --> 00:14:18.870 it does rely on cellular data to support it. 00:14:19.819 --> 00:14:23.720 Radio DNS does the same thing from a different 00:14:23.720 --> 00:14:26.559 approach. It takes the Pi code, builds a DNS 00:14:26.559 --> 00:14:31.600 style query, and it gets back a URL with enriched 00:14:31.600 --> 00:14:36.580 metadata. Same Pi being used. Emergency alerting 00:14:36.580 --> 00:14:40.240 is another reason why radio hasn't fully disappeared. 00:14:40.879 --> 00:14:44.559 EAS runs on FM because FM works when cell networks 00:14:44.559 --> 00:14:48.360 fail. There are commercial alerting systems built 00:14:48.460 --> 00:14:52.139 onto the RDS subcarrier specifically to push 00:14:52.139 --> 00:14:55.720 emergency techs during tornadoes and tsunami 00:14:55.720 --> 00:14:59.639 warnings. FEMA certified it. It's active in 17 00:14:59.639 --> 00:15:03.000 plus states. It's called Alert FM and it's a 00:15:03.000 --> 00:15:06.480 separate platform that you can have run alongside 00:15:06.480 --> 00:15:12.419 your station. Switzerland tried to prove FM was 00:15:12.419 --> 00:15:16.399 done in obsolete. They shut off the National 00:15:16.399 --> 00:15:20.669 Public FM Network at the end of 2024 and lost 00:15:20.669 --> 00:15:25.009 25 % of the German -speaking audience almost 00:15:25.009 --> 00:15:30.110 immediately. By late last year, parliament reversed 00:15:30.110 --> 00:15:37.009 it. RDS is a foundation of radio, at least FM 00:15:37.009 --> 00:15:41.730 radio, that nobody thinks about. It runs quietly, 00:15:42.049 --> 00:15:44.450 and it's been running quietly for 40 -something 00:15:44.450 --> 00:15:48.659 years. And the industry mostly ignores it until 00:15:48.659 --> 00:15:55.299 something breaks. The Pi code is a good example 00:15:55.299 --> 00:16:00.740 of how these things go. Designed to let a receiver 00:16:00.740 --> 00:16:04.639 verify it had the right station before switching 00:16:04.639 --> 00:16:09.980 frequencies. Now it's the identifier connecting 00:16:09.980 --> 00:16:13.220 a broadcast signal to a cloud database of logos 00:16:13.220 --> 00:16:18.720 and album art. in over 16 million cars. It became 00:16:18.720 --> 00:16:22.240 load -bearing without anyone planning for it 00:16:22.240 --> 00:16:28.379 to become load -bearing. 40 years, about 1 .2 00:16:28.379 --> 00:16:33.220 kilobits per second, still doing its thing. If 00:16:33.220 --> 00:16:35.820 this made you want to see what your local FM 00:16:35.820 --> 00:16:39.940 station is sending, grab an SDR app that decodes 00:16:39.940 --> 00:16:43.019 RDS and pointed at your favorite radio station. 00:16:43.320 --> 00:16:46.080 It's a rabbit hole. I'm not going to be responsible 00:16:46.080 --> 00:16:50.039 for wherever that leads you. RDSpy is a free 00:16:50.039 --> 00:16:53.200 tool you can grab on GitHub if you want to go 00:16:53.200 --> 00:16:56.000 down that hole. Thanks for listening to the Tyler 00:16:56.000 --> 00:16:59.039 Woodward Project. This is an independently produced 00:16:59.039 --> 00:17:02.200 and written podcast by myself. And if you would 00:17:02.200 --> 00:17:05.779 like to support the project, head over to tylerwoodward 00:17:05.779 --> 00:17:08.799 .me slash subscribe and become a member today. 00:17:09.619 --> 00:17:11.920 It goes a long way and it makes me feel all. 00:17:12.059 --> 00:17:14.759 warm and fuzzy inside. You can also follow me 00:17:14.759 --> 00:17:17.220 on blueskythreads and instagram at tylerwoodward 00:17:17.220 --> 00:17:20.440 .me. I'll catch you guys next week.