Some radios can set their clock from RDS. That only works if the station sends clock time and sends it right. Nobody publishes which Chicago stations do, so I listened to all of them.
What RDS clock time is
Clock time (CT) is RDS group 4A. A station sends one per minute, at the start of the minute. It carries the UTC date and time to the minute, plus a local offset in half hours. The radio adds the offset to get local time, so a station that sends UTC with a zero offset sets your radio five or six hours off. Stations that don't feed the RDS encoder a time source drift.
Results
Four stations send correct clock time: WTMX 101.9, WKQX 101.1, WCFS 105.9 and WAWE 94.3. WAWE lands about 6 seconds after the minute against 1 to 2.5 for the other three, so its clock runs a few seconds late, likely because the encoder sits behind a satellite feed. Fine for a bedside radio.
Three send it wrong. WBEZ 91.5's clock is 7 hours 27 minutes behind UTC and sent with a zero offset, so a radio shows about 2 hours 27 minutes slow. WPNA 103.1 is 21.5 minutes slow. WMBI 90.1 sends the right UTC with a zero offset, so a radio that applies the offset is five hours fast.
One is ambiguous. WSCR 104.3 sends local time labelled as UTC: right on radios that apply the offset as sent, five hours off on radios that convert from UTC themselves.
Every other station with RDS sends no clock time.
To set a clock, use 101.9, 101.1 or 105.9. All three are strong, decode cleanly, and land within about two seconds of the minute. These results are from Central Daylight Time; whether each station follows the switch to standard time on November 1 is untested.
I've reached out to the stations sending wrong clock time and will update this page if I hear back.
Stations that send clock time
| MHz | Station | CT | Sends (last read) | Radio shows |
|---|---|---|---|---|
| 90.1 | WMBI | right UTC, wrong offset (2 reads) | 15:11 +00:00 | 5 h fast |
| 91.5 | WBEZ | wrong (4 reads) | 07:15 +00:00 | 2 h 27 min slow |
| 94.3 | WAWE | correct (2 reads) | 10:26 -05:00 | right, 6.4 s after the minute |
| 101.1 | WKQX | correct (4 reads) | 10:10 -05:00 | right, 1.1 s after the minute |
| 101.9 | WTMX | correct (4 reads) | 10:12 -05:00 | right, 2.2 s after the minute |
| 103.1 | WPNA | wrong (2 reads) | 09:54 -05:00 | 21.5 min slow |
| 104.3 | WSCR | local time sent as UTC (4 reads) | 10:21 +00:00 | right |
| 105.9 | WCFS | correct (4 reads) | 10:25 -05:00 | right, 2.5 s after the minute |
RDS but no clock time
| MHz | Station | CT | RDS signal |
|---|---|---|---|
| 88.9 | WIIT | none, weak signal | poor (7%, BLER 91%) |
| 90.9 | WDCB | none | good (99%, BLER 26%) |
| 92.3 | WPWX | none | good (100%, BLER 1%) |
| 93.1 | WXRT | none | good (100%, BLER 0%) |
| 93.5 | WVIV | none | good (96%, BLER 44%) |
| 93.9 | WLIT | none | good (100%, BLER 0%) |
| 94.7 | WLS-FM | none | good (100%, BLER 0%) |
| 95.1 | W236CF | none | good (99%, BLER 19%) |
| 95.5 | WCHI | none, fair signal | fair (71%, BLER 45%) |
| 96.3 | WBBM-FM | none | good (100%, BLER 0%) |
| 97.1 | WDRV | none | good (100%, BLER 0%) |
| 97.5 | W248BB | none | good (100%, BLER 35%) |
| 97.9 | WCKL | none | good (100%, BLER 0%) |
| 98.7 | WFMT | none | good (100%, BLER 0%) |
| 99.5 | WUSN | none | good (100%, BLER 0%) |
| 99.9 | WYHI | none, fair signal | fair (76%, BLER 52%) |
| 100.3 | WTBC | none | good (100%, BLER 1%) |
| 102.7 | WVAZ | none | good (100%, BLER 25%) |
| 103.5 | WKSC | none | good (100%, BLER 0%) |
| 105.1 | WOJO | none, weak signal | poor (10%, BLER 83%) |
| 106.7 | WPPN | none, weak signal | poor (31%, BLER 74%) |
| 107.5 | WGCI | none | good (100%, BLER 0%) |
| 107.9 | WLEY | none (2 garbled 4A, noise) | good (100%, BLER 2%) |
RDS identity
| MHz | Station | PS | PI | PI call |
|---|---|---|---|---|
| 88.9 | WIIT | - | 0x6AAB | WIIT |
| 90.1 | WMBI | scrolling (19 values) | 0x747A | WMBI |
| 90.9 | WDCB | scrolling (52 values) | 0x5CC9 | WDCB |
| 91.5 | WBEZ | scrolling (13 values) | 0x57CD | WBEZ |
| 92.3 | WPWX | scrolling (16 values) | 0x7E97 | WPWX |
| 93.1 | WXRT | scrolling (12 values) | 0x9331 | WXRT |
| 93.5 | WVIV | LatinoMx | 0x8D01 | WVIV |
| 93.9 | WLIT | scrolling (11 values) | 0x1297 | none |
| 94.3 | WAWE | Air1 | 0x56E8 | WAWE |
| 94.7 | WLS-FM | scrolling (10 values) | 0x997D | WLS |
| 95.1 | W236CF | scrolling (26 values) | 0x93D1 | WXXX (mismatch) |
| 95.5 | WCHI | scrolling (10 values) | 0x5AAE | WCHI |
| 96.3 | WBBM-FM | scrolling (8 values) | 0x5772 | WBBM |
| 97.1 | WDRV | scrolling (11 values) | 0x5E63 | WDRV |
| 97.5 | W248BB | scrolling (16 values) | 0xD34A | none |
| 97.9 | WCKL | scrolling (7 values) | 0x5AFF | WCKL |
| 98.7 | WFMT | cal WFMT | 0x6327 | WFMT |
| 99.5 | WUSN | scrolling (13 values) | 0x8B59 | WUSN |
| 99.9 | WYHI | - | 0x94C6 | WYHI |
| 100.3 | WTBC | scrolling (4 values) | 0x86F0 | WTBC |
| 101.1 | WKQX | scrolling (6 values) | 0xA7C7 | WKQX |
| 101.9 | WTMX | scrolling (7 values) | 0x8823 | WTMX |
| 102.7 | WVAZ | scrolling (16 values) | 0x1C35 | none |
| 103.1 | WPNA | scrolling (14 values) | 0x7D96 | WPNA |
| 103.5 | WKSC | scrolling (13 values) | 0x17E6 | none |
| 104.3 | WSCR | scrolling (14 values) | 0x8475 | WSCR |
| 105.1 | WOJO | QueBuena | 0x7A98 | WOJO |
| 105.9 | WCFS | scrolling (10 values) | 0x5A84 | WCFS |
| 106.7 | WPPN | Amor | 0x7DD7 | WPPN |
| 107.5 | WGCI | 107.5 | 0x14BC | none |
| 107.9 | WLEY | scrolling (12 values) | 0x7234 | WLEY |
Listed stations with no RDS decoded
| MHz | Station | Format |
|---|---|---|
| 88.1 | WCRX | College |
| 88.3 | WXAV | College |
| 88.5 | WHPK | College |
| 89.3 | WKKC / WNUR | Urban contemporary / College |
| 90.7 | WRTE | Jazz |
| 91.1 | W216CL | Public radio (WBEZ translator) |
| 91.9 | WJCH | Religious |
| 92.7 | WCPY | Ethnic |
| 96.7 | WSSR | Adult hits |
| 98.3 | W252AW | Regional Mexican (WRLL translator) |
| 99.1 | WZQC-LP | College |
| 100.7 | W264BF | Religious (WHLP translator) |
| 101.5 | W268AY | Spanish Christian (WCKL-HD4 translator) |
| 102.3 | W272DQ | Variety (WCKG translator) |
| 103.9 | W280EM | Regional Mexican (WOJO translator) |
| 105.5 | WLPN-LP | Variety |
| 106.3 | WSRB | Urban contemporary |
| 107.1 | W236CG | Hip-hop (WOJO-HD2 translator, CP) |
Runs
2026-10-27-blogv4-g5rv-jr: RTL-SDR Blog V4, on a G5RV Jr wire antenna, gain 20 dB. raw groups, summary csv, scan metadata.2026-10-27-rtl2832u-adsb-antenna: Generic RTL2832U dongle with a 1090 MHz bandpass filter, on a 1090 MHz ADS-B antenna, gain 49.6 dB. raw groups, summary csv, scan metadata.
Reading the tables
- Station: the licensed station on that frequency according to radio-locator, cross-checked against Playlist Research and RadioLineup.
- CT: correct is UTC within a minute and the right offset for Chicago. Right UTC, wrong offset means a radio that applies the offset is hours off. Local time sent as UTC is right on radios that apply the offset and wrong on ones that convert from UTC themselves. None means no clock time in 130 seconds. A "none" on a weak signal is a weaker claim, since a clock time group only counts if it arrives without errors.
- Radio shows: what a radio that applies the offset as sent ends up displaying.
- RDS signal: how many of the expected 11.4 groups per second arrived, and the block error rate before correction.
- PS: the 8-character station name. "Scrolling" means the station pushes song titles through it.
- PI call: RBDS works a call sign out of the PI code. iHeart and others use PI codes that don't map to their call, so "none" or "mismatch" is a fact about the station, not a wrong ID. Two cases look odd and aren't. WKQX sends 0xA7C7, NRSC-4's zero-nibble form of 0x70C7, which is WKQX. WLS-FM sends 0x997D, the three-letter code for WLS; redsea 1.3.1 misses most three-letter codes (its table is searched as if sorted and isn't), so the survey looks those up itself.
- Garbled 4A: on a noisy stretch, error correction now and then "repairs" a group into a clock time dated 1901 or 2206. Those are thrown out and counted, never used for a verdict.
Method
- Receivers: a variety of RTL-SDR dongles and antennas on the Southwest Side, near Midway, listed under the tables. The ADS-B gear isn't built for FM; these stations are strong enough that it doesn't matter much.
- Decoder: redsea 1.3.1 in RBDS mode, fed
171 kHz MPX from
rtl_fm. Receive clock synced by NTP. - 12 seconds on every channel from 87.9 to 107.9, then 130 seconds (two minute boundaries) on every channel with RDS. Listed stations that showed no RDS got another 40 seconds.
- One pass in October, on Central Daylight Time (-05:00). It doesn't show which stations follow the switch to standard time on November 1.
- To run it in your own market: survey.sh and scan.sh. Every decoded group is in the raw files above, timestamped on receipt.
Claude (Anthropic's AI) ran the scans, wrote the tooling and drafted this page on my equipment.
Changelog
- 2026-10-27: first survey, two receivers.