Displaying Live Weather and Traffic Data from HD Radio (NRSC-5) Signals

Thanks to KYDronePilot for submitting news of his new Python based script called HDFM which displays live weather and traffic data from data that is embedded into iHeartRadio HD Radio (NRSC-5) radio stations

If you are in the USA, you might recognize HD Radio (aka NRSC-5) signals as the rectangular looking bars on the frequency spectrum that surround common broadcast FM radio signals. These signals only exist in the USA and they carry digital audio data which can be received by special HD Radio receivers. Earlier in the year in June a breakthrough in HD Radio decoding for SDRs like the RTL-SDR was achieved by Theori when he was able to piece together a full HD Radio software audio decoder that works in real time.

It turns out that some of these HD Radio signals run by iHeartRadio also contain other data streams such as live weather and traffic data that is consumed by HD Radio based car GPS receivers or audio head units in US vehicles. HDRadio.com also write that they can embed other data such as sports scores and emergency messages into the data stream as well.

KYDronePilot's Python script utilizes Theori's decoder to save all received weather and traffic data maps for a folder. Below is an example of traffic and weather data that he received.

HD Radio Received Traffic Data
HD Radio Received Traffic Data
HD Radio Received Weather Data
HD Radio Received Weather Data
Notify of

Inline Feedbacks
View all comments

Can anyone help, i’m getting the error when I run . I’m probably doing something wrong and any pinpoint where im going wrong.


Sorry it didn’t post the code the First time.
Can anyone help,
I’m getting the error:
‘_tkinter.TclError: no display name and no $DISPLAY environment variable’
when I run:
‘python ./hdfm.py 101.5’
I’m probably doing something wrong and any pinpoint where im going wrong.


Sounds like you’re using the program over SSH or on a computer with no desktop. This program uses a GUI, so you’ll have to have a desktop running on your machine when you start the script.

If you have any more questions, open an issue on the GitHub page.


Is there a way that I can use this with the Windows executable? That would be the version of nrsc5 that was built with Cygwin.


Yes, there is more information about this on the GitHub page here


@cr08 I think you are right. The traffic map appears to be decoded tile-by-tile, but not overlaid on any external data. If you look at the sample image in the post here, you can see it’s not using the same OpenStreetMap.org-style base map as the weather.

This inconsistency does lead to the question, though — what would a vehicle use as its base map when rendering the weather? I suppose if they sent traffic as an overlay any misalignment with (say) the car’s own satnav-rendered maps would be more obvious than with the weather radar, but still…


I think for weather maps it may end up being a case where most vehicles with screens large enough for weather display are likely going to have built in nav and will use those maps.

I know with my Ford vehicle with built in nav it has Sirius Travellink which will show weather data and it just overlays on the built in nav maps.


HD Radio now exists in Canada as well. There are several stations in the Toronto area. I’ll have to give this a try and see if any of them broadcast this data.

Edward Vielmetti

I got a successful decode of 95.5 FM (“Channel 955”) tuned in to this Detroit area station from Ann Arbor.

https://twitter.com/vielmetti/status/944008092114739200 has a link to the decoded image.


I’m very curious about this. How much of the above images are sent verbatim vs generated via the python script? Based on a brief view of the github it appears the weather map may just be sending the radar imagery and is overlayed via the script onto the map. The traffic map I’m more curious about though.


The traffic maps are sent as 9 separate tiles and the program assembles and continuously updates them. The weather map is sent as an overlay which the software composites with a segment of a cached OSM map of the US. A config file sent along with the other files defines the bounds of the weather map, and thus what part needs to be extracted from the cached OSM map. Even though they’re transmitted, I believe the traffic maps are depreciated, since traffic data in a vehicle’s nav system is more accurate than these maps. I’m guessing the newer info is sent in a different data stream since there’s no reference to it in files dumped by nrsc5.