The following section discusses the basics of GNU Radio and the software's application to the UAV-RT project. This software is used on the UDOO (the on-board companion computer flown on the UAV) to record down sample incoming radio data. While this section provides a general overview of the software, complete documentation can be found at GNU Radio.
What is GNU Radio?
GNU Radio is a framework that enables its users to design, simulate, and implement a highly capable real-world radio system. This open-source, flow-graph oriented framework is dedicated to writing signal processing applications for uses over a wide range of platforms. By using GNU Radio, you can create a complex algorithm with block module simplicity. These algorithms include digitally modulating a signal or processing data to a user read form. As mentioned before, GNU Radio uses a flow graph oriented framework to allow the user to create algorithms by combining various blocks . An example of this flow graph framework can be seen below, which shows the GNU Radio Companion program and an example signal processing application.
GNU Radio Companion is a useful graphical tool to design signal processing flow graphs. It allows the user to drag-and-drop blocks from a library to perform certain actions and processes. GNU Radio Companion is very user-friendly in that it allows for custom blocks that can be written by the user to be combined with blocks in the provided libraries to perform new functionality that could not otherwise be achieved. A full introduction to GNU Radio is provided on the Main Page of the GNU Radio WIki.
How do we use it?
As introduced in the Radio Telemetry overview, GNU Radio is used to record incoming radio data from VHF wildlife tags. GNU Radio is used to convert the incoming radio data to a digital signal using a Software Defined Radio (SDR). By utilizing GNU Radio, the vehicle's companion computer down samples the incoming radio signal and records both the I/Q and a converted .wav file to local storage.
Custom Processing
The block modularity in GNU Radio provides an easy platform for creating custom blocks for signal processing. Using either Python or C++ a user can program skeleton blocks and insert them into the flow graph algorithm. For the UAV-RT project, the team created a custom Python block for recording vehicle flight data (yaw, roll, pitch, etc) allowing the team to guarantee synchronized time stamps between vehicle information and radio data. The complete code is provided in in the Companion Computer installation.
UDP Stream
We can utilize a UDP Stream to receive live feedback to the ground station. A UDP (User Datagram Protocol) stream is just a stream of data that is sent over the internet. It is designed to be a more real-time data transmitting method due to its capability to drop packets of data instead of waiting for data to be received. Using this protocol over a TCP protocol is better for a more time-sensitive application, in this case, our radio data retrieval, and processing.
I/Q Data Processing
I/Q (In-phase and quadrature) data can be used to show changes in amplitude and phase of a sinusoid. With these amplitude and phase changes, you can encode information on the sinusoid. This encoding is known as modulation. These I and Q signals are the real and imaginary components of a complex baseband/passband signal. They are essentially translations of the polar amplitude and phase waveforms. So why do we use it? Using I/Q processing is much easier to get the desired result with hardware limitations, rather than using normal polar amplitude and phase data. Obtaining the right hardware to be able to manipulate the amplitude and phase of a wave would be expensive and difficult.