GNU Radio Simulations

The objective of this project was to explore the functionality of the open source software GNU Radio and how its features can be implemented on software-defined radios. This was accomplished through the design of three separate modules: a transmitter, a receiver, and a transceiver. This project was completed by myself and another member of my Communication Systems class in spring of 2020.

Transmitter Flow Graph

The data to be transmitted is pulled from the computer using the File Source block. Those bytes then pass through the GFSK Modulation block, making the data become a modulated baseband signal. That signal is multiplied with a cosine Signal Source block to shift the signal so that it is centered around the center frequency of 20kHz. The resulting signal is then stored in the computer using the File Sink block.

Screen Shot 2020-12-16 at 11.36.27 AM.png

Receiver Flow Graph

The binary file containing information to be demodulated is taken from the computer using the File Source block. From there it passes through a Frequency Xlating FIR Filter that translates the signal back to being centered around 0kHz. Then it passes through the GFSK Demodulation block to be demodulated and outputted as a stream of bits in the form of 1 bit per 1 byte. Then the data passes through an unpacked to packed block that outputs bytes that are all packed with valid input bits. This data is then saved using the File Sink block.

 

Transceiver Implementation

 
Screen Shot 2020-12-16 at 12.44.35 PM.png

Encoding a message

We wrote two python scripts, an encoder and a decoder, to test the transceiver flow graph. The encoder worked by converting a text string into a binary file containing the encoded message along with additional information for decoding purposes. To the left is a screenshot of the implementation of the encoder script. The encoder script itself can be found below.

Transceiver Flow Graph

Displaying Channel Frequencies

To the right is the Fourier transform of the signal containing the decoded message as it passes through the channel (generated by the QT GUI Frequency Sink on the channel block on the flow graph). Notice the majority of the power of the signal comes from frequencies around 20 kHz. This is due to the fact that the carrier frequency is 20 kHz. This signal will be filtered and demodulated before the resulting string of binary is stored in another file.

Decoding Message

To the left is a screenshot of the output of the decoder as it decodes the file generated by the transceiver. Because the noise voltage of the Channel Model block is set to 1, the received message is not always true to the original (the “False” cases). The decoder script can be found below.

Previous
Previous

FPGA Whack-a-Mole Game

Next
Next

Arduino Trash Compactor