March 2022 to April 2022
A real-time implementation of a software-defined radio which includes support for both mono and stereo FM channels, as well as RDS (radio data system). Written in C++ and Python, the project processes the radio signals received through RF hardware using digital signal processing techniques, resulting in a fully useable radio!
The main objective of this project was to build a real-time implementation of a computing system while following industry-level specfications.
This project is part of the "Computer Systems Integration Project" (COMPENG 3DY4) course taught by Dr. Nicola Nicolici at McMaster University.
For the sake of brevity, the project can be divided into three main parts.
In this first part, the signal undergoes several stages of transformation. It is:
The resulting mono audio data is then further processed:
The second part involves the extraction of stereo pilot tone and stereo data from the RF front-end. This is achieved using band-pass filters. The stereo pilot tone is then used in two key processes:
The mono path's low-pass filter and decimation/resampling are reused on the resulting data, which is subsequently passed to the stereo recombiner. The outcome of this is the generation of the left and right audio channels.
Finally, the third part, or RDS Decoding and Application Layer, involves the extraction of the RDS data. This is accomplished through:
After the Manchester decoding and differential decoding processes, parity check and syndrome comparison are used to confirm frame synchronization. This step also allows for the extraction of the program information code, type, and service name for user display.