8.6 KiB
SDRangel Developper's notes
Build options
The release type can be specified with the -DBUILD_TYPE
cmake option. It takes the following values:
RELEASE
(default): produces production release code i.e.optimized and no debug symbolsRELEASEWITHDBGINFO
: optimized with debug infoDEBUG
: unoptimized with debug info
You can specify whether or not you want to see debug messages printed out to the console with the -DDEBUG_OUTPUT
cmake option:
OFF
(default): no debug outputON
: debug output
You can add -Wno-dev
on the cmake
command line to avoid warnings.
Global code structure and flow
The existing receiving flow is represented with green boxes. The futrue Tx flow with red boxes. Some classes and file paths in the Rx part were renamed to avoid collision with future Tx names in this case the old name appears below the present name in italics.
Rx path
- The I/Q samples are collected from a physical device or UDP flow with a device plugin that derives from the
DeviceSampleSource
class. - These I/Q samples are downsampled by a factor set in the device plugin GUI and fed into a
BasebandSampleSink
- The
DownChannelizer
class downsamples further down (or not) the baseband I/Q samples depending on the requirements of the Rx plugin. It cascades the downsampling from the center, left or right half of the baseband in order to fit the Rx plugin bandwidth. It contains the NCO to adjust to the Rx plugin center frequency. - The special
FileSource
plugin reads a file that was recorded using theFileRecord
class directly into the baseband as there is no downsampling from the sample rate at which the file was recorded. - The baseband I/Q samples can be recorded to a file using the
FileRecord
class
Device sample source plugins
At present the following plugins are available:
AirspyXxx
classes inplugins/samplesource/airspy
: Inteface with Airspy devicesBladeRFXxx
classes inplugins/samplesource/bladerf
: Inteface with BladeRF devicesBladeRFXxx
classes inplugins/samplesource/bladerf
: Inteface with BladeRF devicesFCDProXxx
classes inplugins/samplesource/fcdpro
: Inteface with Funcube Pro devicesFCDProPlusXxx
classes inplugins/samplesource/fcdproplus
: Inteface with Funcube Pro+ devicesHackRFXxx
classes inplugins/samplesource/hackrf
: Inteface with HackRF devicesRTLSDRXxx
classes inplugins/samplesource/rtlsdr
: Inteface with RTL-SDR devicesSDRDaemonXxx
classes inplugins/samplesource/sdrdaemon
: Special inteface collecting I/Q samples from an UDP flow sent by a remote device using SDRdaemon.SDRDaemonFECXxx
classes inplugins/samplesource/sdrdaemonfec
: Special inteface collecting I/Q samples from an UDP flow sent by a remote device using SDRdaemon with FEC protection of blocks.FileSource
classes inplugins/samplesource/filesource
: Special inteface reading I/Q samples from a file directly into the baseband skipping the downsampling block
Device sample sink plugins
At present the following plugins are available:
FileSink
classes inplugins/samplesink/filesink
: Special inteface writing baseband I/Q samples to a file skipping the final upsampling block
Channel receiver (Rx) plugins
At present the following plugins are available:
ChannelAnalyzerXxx
classes inplugins/channelrx/chanalyzer
: Signal analysis tool pretty much like a DSA/DSO signal analyzer like the venerable HP 4406A (although still far from it!)AMDemodXxx
classes inplugins/channelrx/demodam
: AM demodulator with audio outputBFMDemodXxx
classes inplugins/channelrx/demodbfm
: Broadcast FM demodulator with audio mono/stereo output and RDSDSDDemodXxx
classes inplugins/channelrx/demoddsd
: Digital Speech demodulator/decoder built on top of the DSDcc library. Produces audio output and some communication data from various digital voice standards: DMR, dPMR, D-Star, Yaesu System Fusion (YSF).LoraDemodXxx
classes inplugins/channelrx/demodlora
: Decodes LoRa transmissions. This is legacy code that is not very well maintained so it may or may not work.NFMDemodXxx
classes inplugins/channelrx/demodnfm
: Narrowband FM demodulator with audio output.SSBDemodXxx
classes inplugins/channelrx/demodssb
: SSB/DSB/CW demodulator with audio output.WFMDemodXxx
classes inplugins/channelrx/demodwfm
: Wideband FM demodulator with audio output. This is a basic demodulator.TCPSrcXxx
classes inplugins/channelrx/tcpsrc
: Sends channel I/Q samples via TCPUDPSrcXxx
classes inplugins/channelrx/udpsrc
: Sends channel I/Q or FM demodulated samples via UDP
Channel transmitter (Tx) plugins
At present the following plugins are available:
AMMmodXxx
classes inplugins/channeltx/modam
: AM modulator with simple sine
Source tree structure
At the first subdirectory level indclude
and sdrbase
contain the common core components include and source files respectively. They are further broken down in subdirectories corresponding to a specific area:
audio
contains the interface with the audio device(s)dsp
contains the common blocks for Digital Signal Processing like filters, scope and spectrum analyzer internalsgui
contains the common Graphical User Interface components like the scope and spectrum analyzer controls and displayplugin
contains the common blocks for managing pluginssettings
contains components to manage presets and preferencesutil
contains common utilities such as the message queue
The plugins
subdirectory contains the associated plugins used to manage devices and channel components. Naming convention of various items depend on the usage and Rx (reception side) or Tx (transmission side) affinity. Transmission side is a work in progress.
-
Receiver functions (Rx):
samplesource
: Device managers:xxx
: Device manager (e.g. xxx = airspy)xxxinput.h/cpp
: Device interfacexxxgui.h/cpp
: GUIxxxplugin.h/cpp
: Plugin interfacexxxsettings.h/cpp
: Configuration managerxxxthread.h/cpp
: Reading samplesxxx.pro
: Qt .pro file for Windows/Android build
channelrx
: Channel handlers:demodxxx
: Demodulator internal handler (e.g xxx = demodam)xxxdemod.h/cpp
: Demodulator corexxxdemodgui.h/cpp
: Demodulator GUIxxxdemodplugin.h/cpp
: Plugin interfacedemodxxx.pro
: Qt .pro file for Windows/Android build
xxxanalyzer
: Analyzer internal handler (e.g xxx = channel)xxxanalyzer.h/cpp
: Analyzer corexxxanalyzergui.h/cpp
: Analyzer GUIxxxanalyzerplugin.h/cpp
: Analyzer plugin managerxxxanalyzer.pro
: Qt .pro file for Windows/Android build
xxxsrc
: Interface to the outside (e.g xxx = udp):xxxsrc.h/cpp
: Inteface corexxxsrcgui.h/cpp
: Interface GUIxxxsrcplugin/h/cpp
: Interface plugin managerxxxsrc.pro
: Qt .pro file for Windows/Android build
-
Transmitter functions (Tx):
samplesink
: Device managers:xxx
: Device manager (e.g. xxx = bladerf)xxxsinkoutput.h/cpp
: Device interfacexxxsinkgui.h/cpp
: GUIxxxsinkplugin.h/cpp
: Plugin interfacexxxsinksettings.h/cpp
: Configuration managerxxxsinkthread.h/cpp
: Writing samplesxxxsink.pro
: Qt .pro file for Windows/Android build
channeltx
: Channel handlers:modxxx
: Modulator internal handler (e.g xxx = modam)xxxmod.h/cpp
: Modulator corexxxmodgui.h/cpp
: Modulator GUIxxxmodplugin.h/cpp
: Plugin interfacemodxxx.pro
: Qt .pro file for Windows/Android build
xxxgenerator
: Generator internal handler (e.g xxx = channel)xxxgenerator.h/cpp
: Generator corexxxgeneratorgui.h/cpp
: Generator GUIxxxgeneratorplugin.h/cpp
: Generator plugin managerxxxgenerator.pro
: Qt .pro file for Windows/Android build
xxxsink
: Interface to the outside (e.g xxx = udp):xxxsink.h/cpp
: Inteface corexxxsinkgui.h/cpp
: Interface GUIxxxsinklugin/h/cpp
: Interface plugin managerxxxsink.pro
: Qt .pro file for Windows/Android build