Thank you to "LikWidChz" for submitting his tutorial on receiving and decoding multiple NRSC5 (HD Radio) channels with the help of GNU Radio, a HackRF and the NRSC5 decoder. He writes:
I wanted a way to utilize GnuRadio for working with HD radio. There are no decoder blocks from within GnuRadio to perform this decoding without an external application. This write up is how I was able to split up some signal and supply NRSC5 what it requires to perform the decode.
My goal was to capture some slice of spectrum and "channelize it" so I can perform multiple HD radio decodes at once.
In this linked zip file we have uploaded his GRC file, and his tutorial PDF, which fully explains each GNU Radio block used, and how to use the NRCS5 decoder along with the flowgraph. He also notes that if anyone wants to get in touch with him he is idling on IRC in #gnuradio and ##rtlsdr on freenode under the nickname "LikWidChz".
Corrosive (KR0SIV) from the SignalsEverywhere YouTube channel has uploaded a new video that explains and shows HD radio being decoded with an RTL-SDR.
If you are in the USA, you might recognize HD (Hybrid Digital) 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. Back in June 2017 we posted about how [Theori] was able to piece together a full HD Radio software audio decoder that works in real time. Later developments saw additional data such as traffic data and weather info extracted from HD Radio too.
Corrosive's video also shows a comparison between analog and HD Radio audio. We note that the "HD" doesn't stand for high definition, so audio quality is not really better than the analog stream. He also notes that the HD Radio data stream can contain multiple audio channels, and often they are not the same as the analog station it surrounds. One example he shows is a Simulcast AM radio station being rebroadcast via HD Radio.
The audio codec specifications are not public and is thus not implemented here, so this code has very little use outside of being a good learning tool. But Phil does write that if anyone if able to figure out how to decode the codec, then this code may be a good starting point.
I wrote this because I wanted to learn about digital broadcasts. Despite the fact that the audio codec used is iBiquity’s proprietary HDC codec, I decided that writing a receiver that could decode the air interface would be a great learning experience.
iBiquity’s HDC codec is supposedly based upon some of the same technologies as HE-AAC codec so it may be possible for some audio codec gurus, given access to the raw HDC audio packets, to write a decoder for the codec.
The receiver is somewhat limited. It only decodes FM MP1 profile transmissions (which happens to includes every IBOC FM transmitter in my area). It is also somewhat limited in the Layer2 packet demultiplexing. It likely needs a strong signal in order to decode signals reasonably well. However it is just enough to get access to the main program stream.