How to setup your SDR for clean ATC audio

Check out our previous blog posts:

Welcome to the next blog post from our series of “How to set up an ATC voice recorder”. We will aim at software installation and SDR settings. We expect you to choose Linux as the OS.

Please follow the instructions at https://atco.opensky-network.org/ website. You should end up with a Linux distribution with installed SDR drivers and RTL-airband software running (https://github.com/szpajder/RTLSDR-Airband).

You need to do several steps to set up the SDR. First, you need to identify VHF frequencies you want to record and decide what is your central frequency and bandwidth. If some frequencies are too distant, you may use two SDR devices (we are also using this setup). Let see two examples.

LKTB airport

We checked available on-line resources and found main frequencies used in LKTB.

01_pasted image 0.png

 

We are not interested in ATIS. You can notice that the distance between LKTB_TWR and LKTB_APP is 7.75MHz which is much larger than 2.5MHz supported by the RTL-SDR but smaller than 10.6MHz supported by the SDR RSP1A (see previous blog post regarding more technical information). So to fully cover the LKTB, we need a pair of RTL-SDRs or one RSP1A. We choose the second option. See our configuration in the following figure:

02_pasted image 0.png

The green boxes indicate 25kHz bandwidth of one channel. We placed the central frequency in the middle. The “bandwidth” of the SDR - sampling frequency - was chosen wider than needed to overcome possible distortions on the edges.

Sample of rtl-airband config for SDRplay RSP1A device would look like the following:

country = "Czech Republic";
location= "49.25411,16.58154";
fft_size = 1024;
devices:
({
type = "soapysdr"; #driver
device_string="driver=sdrplay,serial=xxxxxxxxxxxxxx";
gain = "IFGR=20,RFGR=2"; #Every type of device has different gain settings
centerfreq = 123.500; #MHz
correction = 0;
mode = "multichannel";
sample_rate = 9.00; #bandwidth in MHz around centerfreq
channels:
({
freq = 119.600;
airport = "LKTB";
label = "BRNO_Tower";
outputs:
({
type = "rawfile";
directory = "/home/pi/output_airband";
filename_template = "BRNO_Tower_119_600MHz";
split_on_transmission = true;
});
});
});

 

LKPR airport

The LKPR airport has more channels. One of the Radars and the Tower are the problematic ones as they are away from the rest. We would need about 16MHz bandwidth to cover them all.

03pasted image 0.png

 

We analyzed the traffic on the channels and found out that the Radar on 127MHz is a “copy” of Radar on 120MHz. So we discarded it. Finally, our solution was to use SDRplay RSP1A and RTL-SDR (on two separated antennas). RSP1A covered the group of channels around 123MHz and RTL-SDR took care of the Tower on 134MHz. See the following figure:

 

04_pasted image 0.png

We set the bandwidth of RSP1A to 5MHz which gave us 14-bit sampling precision (better audio quality). We limited the bandwidth of RTL-SDR and put the center frequency the same as the frequency of the Tower (134.55MHz).

However we found a problem with recording the Tower (note: our setup is very close to the airport so we have a strong signal). We had strong harmonic distortion in the audio signal. See the following spectrogram:

05_pasted image 0.png

Notice the spectral line around 1.6kHz. RSP1A did not suffer from the problem. The problem is called ghosting (thanks to https://www.sdrplay.com/community/viewtopic.php?t=2968). It may happen that a strong source near you may leak into your recording (even if it is on a different frequency). We have tried to change the bandwidth and gain but it did not help. The solution was to change the central frequency.

06_pasted image 0.png

Sample of rtl-airband config for RTL-SDR device.

country = "Czech Republic";
location= "50.10678,14.26600"
fft_size = 512;
devices:
({
type = "rtlsdr"; #driver
index = 0;
gain = 15; #Every type of device has different gain settings
serial = "00000001";
centerfreq = 134.750; #MHz
correction = 0;
mode = "multichannel";
sample_rate = 900100; #bandwidth in Hz around centerfreq
channels:
({ freq = 134.550;
airport = "LKPR";
label = "PRAGUE_Tower";
outputs:
({
type = "rawfile";
directory = "/home/pi/output_airband";
filename_template = "PRAGUE_Tower_134_550MHz";
split_on_transmission = true;
});
});
});

 

There are 2 more parameters that have an impact on the audio quality. The first one is gain and the second one is fft_size.

fft_size

FFT size is an internal parameter that impacts the signal processing. The larger the value (in power of 2) the slightly better the signal but the more CPU power is needed. Good practice is that for wider bandwidth the FFT size should be larger. Tune this parameter (128 / 256 / 512 / 1024) and watch the load and signal quality. If you set it too high, then the signal starts to be choppy.

Gain

To set up the gain(s) is critical. There may be more gain controllers for your device. RTL-SDR has 1 gain, SRDplay RSP1A has 2 gain controls. Please consult documentation, support, or community for your device to find out block diagrams, gain controllers and proper settings. You should set the gain as low as possible in general. Ideally you should tweak only the analog gain closest to the antenna. The rest can be switched off. If you set the gain too low, you will receive noisy audio signals as there is not enough energy and your signal will be coded only in a few lower bits by the ADC. On the other hand, if you set the gain too high, then clipping appears on the ADC and you get “noisy” recordings.

We tuned the gains carefully and did some more experiments which we will share with you in one of our next blog posts. To make the long story short:

  • We set the gain to a value and record about half a day of data.
  • We calculated the average SNR of this data and filled the SNR in a table.
  • We changed the gain settings and repeated until the table was filled.

 

IFGN\RFGN

0

1

2

3

4

20

6.75

10.33

12.29

11.76

9.70

25

10.39

11.385

11.55

11.83

8.97

30

11.20

11.36

11.39

10.71

5.47

Table of gain tuning of RSP1A connected to the Watson WBA-20 antenna for LKTB. Values are SNR [dB].

The RFGN (columns) is the main gain on the SDRplay RSP1A, where higher the value (0-9) smaller the gain. The IFGN is a “minor” gain controller which does not have much influence if the RFGN is tuned properly. You can see, that there is optimal point at RFGN = 2 and IFGN “switched off”.

We encourage you to do a similar thing. You do not need to calculate SNR, but collect some sufficient amount of audio and listen to it. You can try to do this on ATIS or Tower ATCs where you should have stable signals. Then try different gains and find the optimum.

This is all about setting up the SDR software. We hope this will help you to set up the recording easily with good results. We are aware that many things were simplified here. To go deeper in principles is out of the scope of these blog posts. If you are interested, please study more underpinning resources.