What is SparkSDR (for non radio hams).
Software Defined Radio (SDR) basically is the approach of replacing nearly all the complicated analog electronics of a radio receiver or transmitter with software. For a receiver this is typically done with a high speed analog to digital converter (ADC) connected to an antenna. All the tasks such as tuning (selecting the signal you want), filtering and demodulating (i.e. turning AM, FM etc. into audio) is done in software (or sometimes on FPGAs due to the high data rates). Transmitters work in a similar way with a high speed digital to analog converter directly generating radio signals. SDRs have many advantages, e.g. it is very easy to add features like supporting new transmission formats with just a software tweak. Because you are digitising large chunks of the radio frequency spectrum simultaneously it is possible to tune into many stations at once e.g. the Hermes Lite sdr digitizes the entire spectrum covering the long wave, medium wave and shortwave bands at once, i.e. the data stream coming from the analog to digital converter contains all those radio signals and software can separate them out.


SparkSDR is software that connects to a number of SDR radios, these are typically small black boxes connected by Ethernet or usb. SparkSDR handles tuning and demodulation of signals and provides the user interface to control the radio. It can simply be used to listen to broadcast radio stations, transmit to others in a variety of modes or decode all sorts of digital transmissions. A key feature is the ability to tune into many signals at once. There are a number of digital modes used in the amateur radio world and these can be detected and automatically reported to PSKReporter (> 30 billion reports at time of writing!), it has become an unofficial challenge as to who can detect the most signals. Spark is well suited to this with some people tuning into 60+ frequencies and modes simultaneously and running 24/7.

This provides some fun software challenges. There is a lot of concurrent real time data to handle fast and with low latency (some setups can swamp a gigabit link). Smooth fast changing spectrum graphs and waterfall displays are required. The GUI has to be flexible enough to present the large amounts of data decoded but also feel like a conventional radio with knobs and buttons for the user that just wants to chat to someone. The early versions were written using WPF and c# with some cpp dsp code. WPF was perfect for the UI but the amateur radio world has a higher than normal percentage of linux users and there were a lot of request for a linux version, so the jump was made to Avalonia to provide cross platform support. SparkSDR was an early adopter of Avalonia but the risk paid off, the open source nature and very helpful dev team meant what few problems occured were very quickly fixed, for the last couple of years it has been basically bomb proof. Spark now runs on windows, mac and linux (including arm versions for the raspberry pi), supporting all these platforms has been remarkably easy with the app looking and behaving identically across them. Avalonia is simply WPF but better and cross platform.
Spark has been an excuse to play with what's new in the software world. There is a cpp core component that handles most of the digital signal processing, it is almost entirely lock free, sequential tasks run in a thread pool with all communication through message queues, this allows dsp code to be written without concern for threading issues. The thread pool is isolated from the .net c# world so it can't be paused by the gc. A lot of use is made of SIMD both in cpp and c#(with the new intrinsics). Codegen links the cpp dsp code to c# MVVM view models. In the early days a lot of the dsp was moved from c# to cpp, this now tending to go back the other way with the performace improvements in .net. The upcoming plugin feature to allow others to add new decoders will be .net based to allow easy cross platform development.
A recent fun development is the Sotamat project that uses data collected from SparkSDR receiving stations around the world to allow people to communicate from mountain tops with simple low power shortwave transmitters.