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.
the GUI program, called SoDaRadio implemented in qtgui/main.cpp
SoDaServer and SoDaRadio are connected to the USRP and host OS sound system as shown here:
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.
The SoDa Radio Components
SoDa::USRPCtrl executes all control and status functions on the USRP
SoDa::USRPRX manages the inbound IF signal stream from the USRP receive chain
SoDa::USRPTX manages the outbound IF signal stream to the USRP transmit chain
SoDa::BaseBandRX demodulates an incoming RX intermediate frequency signal
SoDa::BaseBandTX converts incoming audio into the appropriately modulated TX intermediate-frequency signal.
SoDa::CWTX converts text strings received from the UI thread into amplitude envelopes (keying envelopes) for the USRPTX process.
SoDa::UI waits for requests and CW text on the UDP socket from the GUI, and forwards status and spectrum plots back to the GUI.
SoDa::GPSmon monitors a connection to the gpsd server (if any)
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.
The reason for the three stage conversion scheme is threefold:
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.
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.
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.
Generated on Sun Sep 24 2017 12:16:39 for SoDaRadio-5.0.3-master:8901fb5 by 1.8.13