Hello there
Hope this post finds you well !
I am really proud to present you a package that is now registered in the Julia registry. This package is called AbstractSDRs.jl and aims to provide a unified API to monitor, control and use Software Defined Radio (SDRs) : GitHub - JuliaTelecom/AbstractSDRs.jl: Julia package to monitor various Software Defined Radios in a common API
We have also proposed (but not registered for the moment) two packages that uses the API for specific applications such as to use SDR as a FM receiver or to have a look on the power spectral density. We aim to propose other applications, but feel free to have a look and build bricks on your own !
This packages (and its sidekicks) have been deployed in JuliaTelecom, the organisation dedicated to use of Telecommunications (on a wide range) in Julia. We are still working on some functionalities but the core part is now stable.
Software Defined Radio ?
Classically a radio transceiver (capable to emit and receive data through electro-magnetic waves) is a special chip (or circuit) designed for a specific application. This is often done in ASIC (and this is how for instance the chip inside your phone works). It embeds lot of analog or mixed component and specific hardware//processor.
On the contrary, since few years (like, 20 :D), strong efforts have been made to design radios that are more flexible and capable to work on various carrier frequencies, with different bandwidths, and for many applications. This is the purpose of the SDR: analog and specific hardware parts are reduced to their minimum and most of the processing is done at software level.
Initially, these devices were particularly suited for research and pedagogy (e.g prototyping) but with the growing processing capacities (and evolution of the SDR architectures), the scope of SDR are largely grown.
En bref, to keep it short, SDR paves the way for many applications in many fields.
So, how we do that ?
SDR allows to consider analog parts as black boxes and all we have to do is to code the processing part (and configure the radio). And this is where we believe that Julia can play a decisive role.
Classically to meet the harsh contraints (SDR cope with large rates), processing is often done with a low level langage (C/C++) but this is not where we feel confortable for prototyping. On the contrary for SDR prototyping (offline processing), high level langage (as Python) is often used. In other words, SDR fall right in the two-langage problem.
[It is to be noted that the most popular approach for SDR prototyping is the (fantastic) GnuRadio initiative where processing is done in C++ and then encapsulated in Python with Swig.]
SDR in Julia ?
You should understand here why Julia has our attention. We can fill the gap between the prototyping phase and the efficient implementation. Of course, it requires to be able to configure and use the SDR within a Julia session and this is the core reason of AbstractSDRs.jl.
We propose several backends (i.e. different SDR) to monitor USRP, Adalm-Pluto, RTL-SDR and SDR on ARM devices.
And now ?
We plan to develop more bindings for SDR and wrap them into AbstractSDRs.jl and to propose more apps that use our approach. In the meantime do not hesitate to test the proposed package. Any PR are welcome.
More information on the package can be found in the documentation: Introduction to AbstractSDRs · AbstractSDRs.jl
Also, link of the JuliaTelecom groups where the different packages have been put: JuliaTelecom · GitHub