UAV+JetsonK1+BladeRF = FlyingSDR

Originally started as a project with my students, I finally decided to go back to put a SDR on a UAV.
The goal here is to do some propagation measurements, by recording received RF signals at different altitudes and use the video link (FPV) to see the user interface from the ground, while storing the collected samples onboard on a SSD.
Main issue : keep it light, working at low power.

Currently under work, no antenna yet, but here are the ingredients :

  1. DJI Matrice 100 UAV
  2. One Jetson K1 (GPU + Arm + Linux),
  3. bladeRF SDR
  4. SSD for data storage
  5. HDMI video encoder to have the display on the ground
  6. Feedback from UAV IMU to have position and altitude
  7. DC-DC converter to get 12V from the DJI Matrice 100 25-30V

Current status :

Flying SDR

Lots of cables…

Flying SDR
(512 Go SSD finally replaced by 64Go.. this one needs only 120 mA instead of 1 A)

Flying SDR


Flying SDR

First flights soon !


Sharing SDR stream over the network

After long hours of development, I have successfully finished a first release of the “SDR Server” (formerly known as “SDR Cloud” system but this name was also chosen by other team).

This software solution is able to share customizable (and programmable) IQ Streams of your favorite radio over the network for remote listening or processing. Currently only my own SDR software can handle the remote connection, but a “extio like” DLL is under work.

SDR streams can be remotely reprocessed and re-dispatched as one “sdr server” can receive and share streams coming from other servers. A script engine accepts JSON requests or script snippets to change its behavior.

Basically the protocol relies on HTTP and uses “application/content-stream” content-types. It means the streams can by sent across network proxies and standard TCP/IP equipment. Samples are sent using a VITA49 like format, with samples encoded as INTs or FLOATs depending on bandwidth.

Here is an example use case :

share IQ stream

An AirSpy USB receiver is attached to the PC box running the SDR Server software. This AirSpy is fitted with a SV1AFN upconverter, so it is able to receive bunches of 10 MHz of HF at once.

For this demo, the SDR is tuned at 12 MHz, so it can process from 7 MHz to 12 MHz. The server is configured so as to create two IQ substreams :

  1. One stream from 10.100 to 10.150 MHz, called “30m”
  2. A second stream from 14.000 to 14.300, called “20m”

As the two streams fall inside the 10 MHz of the AirSpy, they can be served over the network simultaneously… That’s what I show below, where two instances of the gkSDR receiver are running on the same remote machine and processing the two streams at the same time.

SDR Server vue


This sharing server is fully web controlled and embeds a script engine to set and configure the streams and possible connections. Just to illustrate what can be done, here is the relevant section of the “boot script” used to declare the streams used in this example :

Basically the boot script checks what hardware is connected and decides what to do.

Note that the server accepts REST queries through a JSON over http mechanism so the settings could have been set manually.

For example, the remote SDR can be tuned with a request like :

http://<server IP>/api/stream/RX:1/tune/14.235

Each stream can be shared over multiple clients, as long as the server running the software as enough processing power. To avoid central frequency tuning conflicts, the boot code can decide if the band is locked (as in this example), or not.

The scripting engine allows to program specific local processing on any band, even while users are streaming on their side. Among many features, the scripting engine can:

  • Capture bunches of spectrum and do some DSP locally (FFT, power, etc.),
  • Post/Get results over http to remote systems,
  • Trigger local recording of sub bands,
  • Share set of “memories”,
  • Manage client-to-client chats,
  • encrypted streams,
  • etc.

Work in progress :

  • Remote stream synchronization,
  • Remote stream aggregation,
  • Remote stream decoding (analog linear modulations or digital modulations).

This software to share SDR IQ streams over the network is not Open Source and will probably not be free.

Contact me for details and availability

gkSDR 0.18 soon to be released

Version 0.18 will soon be released. Among various new features :

  1. Available in 32 bits with specific installer (runs now on Windows XP)
  2. Several enhancements and performance improvements, works better with old processors and now supports 10 MHz or more bandwidth for AirSpy or BladeRF (requires “good” PC)
  3. Memory management now available

gkSDR 0.18

Posted in SDR

gkSDR 0.17 Available for download

Windows 64 bits edition


Latest release of gkSDR is now available with Drivers for the following hardware :

  • RTL SDR dongles,
  • BladeRF from Nuand,
  • AirSpy
  • HackRF
  • SigFOX
  • Perseus SDR

Currently documentation in PDF is only available in french. Feel free to contact me in case you need help !

Donwload here : (Qt installator, requires internet connection for Download). If you have already installed previous release, just look for “maintenancetool.exe” in program folder and go for update.

gkSDR has unique features, like :

  • Dual receiver
  • Integrated map
  • Dual hardware support for ADSB monitoring
  • Measurement mode to record a narrow band for matlab processing
  • MP3 recording with dual-receiver support
  • XMLRPC support for remote operation
  • GPS Support for time and position
  • Automatic download of HF Broadcast programs



Some translations may be missing, please do not hesitate to contact me !

Drop me a mail : sylvain<dot>azarian<at>gmail<dot>com


Posted in SDR

gkSDR 0.16 now available for english users (windows 64 bits only today)

I am pleased to release the english edition of my SDR software called “gkSDR 0.16″ for english users.

The user interface is fully translated, some tricks still pending for complete internationalization (the Terrain Elevation Model included in the download is only France so far, get in touch with me for other locations).

This software runs under linux and windows, currently only the binary for windows 64 bits is available for download here :

Please join the gkSDR Google Group  for support


Currently supported hardware : see (french)

Posted in SDR

In depth study of the VOR signals (part 1)

[this post is a complete rewrite of the initial article , lost in my blog crash]

I. Introduction : What is a VOR, my motivation

The VHF Omni Range (VOR) system was designed in 1937 and deployed by 1946 to provide a solution for airplanes to estimate their position and to follow their route by indicating bearing angle towards ground radio transmitters. At that time the system had to be completely based on analogue hardware and the design engineers created a sophisticated modulation scheme for easy processing at the receiver. There are now around 3000 VOR transmitters over the world, and this number is now decreasing, progressively replaced by GNSS systems like GPS or the coming European Galileo. Operating in the 108 to 118 MHz band, these transmitters have been broadcasting their dual-modulation signals towards the aircrafts for more than 50 years and are still widely used by all types of aircrafts (see [1]). For several works on passive radar [see refs 2,3 and 4]  I had to study in depth the signal transmitted by this system. One can find different details on the signal structure, my motivation was to check how accurate they were. In this post I will describe the technique I used to process the signals acquired using a DVB-T SDR dongle and MATLAB.

II. Signal model – How it works

A typical VOR transmitter is shown in figure 1 (image from Wikipedia)

Figure 1 - VOR ground transmitter

Figure 1 – VOR ground transmitter

A central antenna transmits the REF signal, with a 30 Hz frequency-modulated signal. Meanwhile, other antennas (initially mechanically rotating and now using phase shifting techniques) transmit on a second carrier an amplitude modulated signal so that, from a given angle, the aircraft receives the two signals with a phase difference proportional to bearing to the station (figure 2).

Figure 2

Figure 2

Figure 3 shows the internal structure of a VOR receiver, as they were built in the “analogue era” before using digital signal processing. An envelope detector extracts the AM modulation at Intermediate Frequency (IF). The resulting signal is split in two branches:

Figure 3

Figure 3

  • A first branch, containing the REF signal (showing the North direction) is band-pass filtered and the FM sub carrier extracted,
  • A second branch, containing the VAR signal (indicating the current angle to the VOR) is low-pass filtered.

The two resulting signals phases are then compared and the resulting difference is amplified to drive the instrument needle. We can find in the literature the following equation (see figure 4) to describe the time domain signals transmitted by the VOR ground station:

Figure 4 - VOR equation

Figure 4 – VOR equation

To check this model is accurate… lets find a signal, analyse it and compare with this equation !

III Field validation – collecting RF data and analysis

I leave a few miles away the Rambouillet VOR transmitter (callsign is RBT), active on 114.7 MHz. I decided to go next to it with a RTL-SDR dongle and collect some samples to see what’s inside the signal. Figure 5 shows my car location respective to the transmitter.

Figure 5 - VOR transmitter position

Figure 5 – VOR transmitter position

I used HDSDR and the small antenna shipped with the dongle. Figure 6 below shows the waterfall spectrum I got :

Figure 6 - HDSDR VOR Waterfall

Figure 6 – HDSDR VOR Waterfall

The VOR signals were acquired using the 1M samples per second setting, I manually set the gain to have a good SNR but no saturation (I was very close to the VOR, usually the transmitters use around 200 Watts).


What can we say from the waterfall (from center to side bands) ?

  1. We have one narrow band signal in the middle, consistent with the VAR signal definition;
  2. We have one audio carrier, amplitude modulated (symmetric). Use the waterfall to decode the signal ;-) “BT” is the end of the VOR callsign very slow keying
  3. One other ‘multi trace’ symmetric carrier approx 9600 Hz away from central peak, should be the REF signal.

Let’s see how we can decode and process this signal with Matlab (or Octave).

First, we need to load the audio (RF) samples from the wav file into the working space :

this loads (be patient…) the complete file, processes the Left and Right to complex samples and plots the spectrum of the complete file. You should get something like this:

VOR spectrum

VOR spectrum

We collected much more than required, and the file is huge… but lets zoom around 114.7:

VOR spectrum - zoom

VOR spectrum – zoom

Okay, consistent with HDSDR display. Next step is to remove extra band and just keep the useful bandwidth. If the math showed before is correct, we should only keep from -9600+REF_WIDTH to +9600+REF_WIDTH. That’s around 30 KHz wide.

We will use a 15 KHz low pass filter, it will remove all but what we want to keep. Let’s go and see what we get (we start with a simple 128 taps filter)

at first glance that looks nice… but zoom in the center, you should have that :

After low-pass filtering

After low-pass filtering

It looks like we are a bit off the center of the spectrum, so we are also removing wanted signal… we have to “shift left” the spectrum, so we need to mix it (multiply) with a complex signal of frequency -offset. I estimated visually on spectrum the offset to be 9950 Hz. Our software mixer is like follows:

apply our filtering like before, plot and look what it is now:

VOR spectrum after mixing - zoom

VOR spectrum after mixing – zoom

That’s much better, but it seems :

  1. The removal of extra signals is not that good,
  2. The shape of the noise is not that flat …

this is because our initial filter cutting at 15 KHz with 128 taps is not sharp enough. As we have time and we are rich … we change the settings of the filter to :

(feel free to try other values of taps, you’ll see how long it takes ;-)). This leads to:

Zoom after extending the FIR low-pass filter number of taps

Zoom after extending the FIR low-pass filter number of taps

As our signal is now band-limited, we have in fact too much samples… we can “downsample” (lower sampling rate) and trash most of them. In fact we have an initial sampling rate of 1028571 samples per second, but we only need 30000 samples per second (our useful bandwidth). this means we can keep only 30000/1028571 samples. To make it simple, we’ll keep 1/32 of the band.

OK ! we have our base band samples, and now Matlab breathes again…

Here is the final Matlab code for the VOR signal extraction :

Stay tuned for tutorial continuation !



[1]     Nordian – VOR and Doppler VOR” –

[2] Automatic real-time collection of RCS of airplanes in a real bistatic low-frequency configuration using a software defined passive radar based on illuminators of opportunity, J. Pisane, S. Azarian

[3] Experimental RCS acquisition system: Using software defined radio to build a classification datasetSylvain Azarian, Jonathan Pisane, Radar (Radar), 2013 International Conference on

[4] Automatic Target Recognition for Passive Radar; J. Pisane, S. Azarian, Aerospace and Electronic Systems, IEEE Transactions on, 2014/1