tejeez / spektri

Spectrum analysis and digital downconversion of high sample rates
MIT License
11 stars 0 forks source link

Spektri

Spektri takes a digitized signal from a software defined radio receiver, downconverts it into multiple channels of a lower sample rate and sends these downconverted signals to other programs for further processing. This lets you use a single SDR for multiple applications simultaneously.

Spektri uses the fast-convolution filter bank algorithm to efficiently process high input sample rates and a large number of output channels. The algorithm is parallelized to make use of multi-core CPUs.

Spektri also estimates spectrum of the input signal. The same FFT calculations are used both for spectrum analysis and for the fast convolution filter bank.

At the moment, most features are undocumented and unfinished. Everything is still under development and anything may change at any point.

Interfaces

Spektri reads its input signal from stdin, so it can be used with any receiver hardware that provides a program to stream samples to a pipe. So far, it has been mostly tested with an RX888 HF receiver.

Spectrum measurements and outputs of the filter bank are sent to a ZeroMQ PUB socket, so that they can be read by other programs for further processing of the signals. Alternatively, the results can be saved into files, which may be a better option for batch processing of recorded signals.

The file format and format of the ZeroMQ messages are not really stable yet. ZeroMQ may not even be the best choice for the interface, and it was mainly chosen because I found it easy to use and was already familiar with it.

ZeroMQ message format

Messages consists of two parts. The first part is used as a subscription topic and also encodes metadata that stays constant while the program is running. For output signals from the filter bank, the first part contains the sample rate and center frequency of the filtered signal. The second part contains the signal and metadata that may change for each block, such a timestamp of the block.

This leads to a convenient interface to the filter bank: to obtain a filtered signal of given sample rate and center frequency, subscribe to the topic correponding to these parameters.

Currently, filters have to be configured on the command line when Spektri is started. The plan is to use an XPUB socket to monitor for subscriptions and automatically add a filter to the filter bank whenever a new subscription is added. This is not implemented yet.

Contents of the repository