SoDaRadio-5.0.3-master:8901fb5
SoDaRadio: Classes and a Server process to build a Linux USRP VHF/UHF Radio

The SoDa VHF/UHF Software Defined Radio is a multi-threaded application developed for the Linux operating system and the Ettus Radio USRP family of SDR platforms.SoDa was written and is maintained by Matt Reilly, kb1vc.

Structure of the Radio

The SoDa program is partitioned into two parts:

SoDaServer and SoDaRadio are connected to the USRP and host OS sound system as shown here:

SoDa_Radio_System.svg

The GUI is built on the Qt GUI toolset, and communicates with the SDR control program via a Unix Domain socket connection. The GUI and the SDR controller run on a single Linux host.

The SDR signal processing and control functions are executed within multiple threads of the SoDa application. The threads communicate via a simple mailbox-in-shared-memory communications scheme where each thread can "subscribe" to one or more message streams, and place messages into any message stream. (See SoDa::MultiMBox and SoDa::MBoxMessage)

The image below shows the thread objects that make up the SoDa SDR radio, and the message streams that link them.

SoDa_Radio_Toplevel.svg
The SoDa Radio Components

The SoDa receiver architecture is a 3 stage heterodyne design. The first two IF conversions are performed within the USRP SDR platform. The final stage of conversion is completed in the USRPRX module.

See also
SoDa::USRPRX
SoDa_Radio_RX_Signal_Path.svg

The reason for the three stage conversion scheme is threefold:

  1. The first stage (Front End) LO is configured to operate in Integer-N synthesis mode. This reduces spurious "birdies" caused by harmonics of the reference oscillator divided by the fractional N denominator.
  2. The second stage LO is tuned to place the signal of interest at least 50 kHz away from both the first and second local oscillators. This ensures that the DC offset "spike" in the second IF stage is well away from the frequency of interest, and is not displayed in a waterfall or periodogram display.
  3. by placing the second IF well away from the target frequency, we can put the target signal well off the skirts of the phase noise curves for both the first and second LOs. The third LO is implemented as a full 32 bit floating point quadrature oscillator, so the quantization noise is comparatively low.
SoDa_Radio_TX_Signal_Path.svg