First Steps Towards Decoding HD Radio
Programmer Phil Burr wrote in and wanted to share his newest code which is a partial implementation (no audio) of the iBiquity IBOC HD Radio standard. HD Radio is a proprietary broadcast radio protocol and is used only in North America. You may have noticed it before as the rectangular sidebands on the spectrum which surround standard analogue broadcast FM signals.
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.
HD Radio Decoder on Github
Claims to be able to tune in directly from an RTL-SDR
$ nrsc5 -p 63 -g 490 -w samples1071 107100000 0
$ nrsc5 -r samples1071 0
$ nrsc5 -o - -f adts 90500000 0 | mplayer -
According to Wikipedia, HD Radio uses an encoding that is based off of the HE-AAC format in MPEG4.
I am hardly an expert on codecs, just wanted to point out that (if Wikipedia is believed) there really is no need for supposition. =D
Unfortunately that statement on the Wikipedia page for “HD Radio” is not well-sourced.