TETRA is a trunked radio communications system that stands for “Terrestrial Trunked Radio”. It is used heavily in many parts of the world, except for the USA. Recently, a software program called Tetra Live Monitor (telive) was released on GitHub. This software can be used along with the (patched) Osmo-TETRA software to monitor and listen to unencrypted TETRA communications.
Below we show a tutorial on how to listen to TETRA communications using a RTL-SDR RTL2832U software defined radio. This tutorial is based heavily on the telive_doc.pdf file that is written by the author of telive and included in the telive git download. Please refer to that pdf file for further details on how the software works. We have modified their tutorial slightly to make it a little easier to understand. As this code is still under heavy development if you have trouble please check their PDF file for modifications to the procedures.
Again, we reiterate: This tutorial is not a substitute for a thorough reading of the documentation. If you have trouble setting this software up, please refer to the telive documentation first, before asking any questions. It contains a comprehensive FAQ section which solves most of the common problems. The documentation can be found directly at https://github.com/sq5bpf/teli
Decoding and Listening to TETRA Tutorial
Most of this tutorial is performed in Linux and we assume that you have some decent Linux experience. We also assume you have some experience with the RTL-SDR dongle and have a decent antenna capable of picking up TETRA signals in your area. If you don’t have a RTL-SDR dongle yet see our Buy RTL-SDR dongles page.
First, we will need to find some TETRA signals. The easiest way to do this is to open SDR# or another program like GQRX and look for them. TETRA signals are continuously broadcasting with a bandwidth of around 25 kHz. In most European countries they can be found at 390 – 470 MHz. In some countries they may be found around 850 MHz or 915 – 933 MHz. There may be several TETRA signals grouped in close proximity to one another. See the example images below.
An example audio clip of a TETRA signal recorded in NFM mode is shown below.
Once you have found some TETRA signals, record their frequencies. Now close SDR#, or whatever software you were using and boot into Linux. In this tutorial we use a 32-bit Ubuntu 14.04 virtual machine running on VMWare Player as our Linux system. Some of the commands may vary if you are using a different system.
Install the software
Note: There is now a telive live Linux image available. This will allow you to boot via a USB drive straight into a Linux OS with telive preinstalled. If you want the easy way out, or have trouble with the install script below, then try this image.
This install script will automatically download the software and all the required prequisites including the RTL-SDR drivers. If you have problems consult the documentation or try a manual install. Instructions for the manual install are shown at the end of this post.
sudo wget https://raw.githubusercontent.com/sq5bpf/telive/master/scripts/install_telive.sh sudo chmod 755 install_telive.sh ./install_telive.sh
Running the Software
- Open a terminal window and browse to ~/tetra/osmo-tetra-sq5bpf/src and run ./receiver1 1.
cd ~/tetra/osmo-tetra-sq5bpf/src ./receiver1 1
- Open a second terminal window or tab and open a specially sized xterm window using the following.
/usr/bin/xterm -font fixed -bg black -fg white -geometry 203x60
- In the xterm window, browse to ~/tetra/teliveand run ./rxx.
cd ~/tetra/telive ./rxx
- Open another terminal window or tab and browse to /tetra/bin and run ./tetrad.
cd /tetra/bin ./tetrad
- Open another terminal window or tab and open GNU Radio Companion by typing the following.
- In GNU Radio open the telive_1ch_simple_gr37.grc file which is found in ~/tetra/telive/gnuradio-companion.
- Execute the flowgraph by clicking on the play button icon on GNU Radio Companion toolbar.
- At the bottom of the screen that pops up look for the Frequency: text box and enter the centre frequency of the TETRA signal that you want to monitor. You can also click on the centre of the TETRA signal spikes in the Full Spectrum view to tune to a different signal.
- Enter the PPM offset of your RTL-SDR dongle in the ppm: text box.
- Finally adjust the SDR Input Gain setting for best reception.
At this point you should confirm that you see a strong rectangular TETRA signal in the FFT window that pops up. If you do, switch back to your first terminal window where you ran ./receiver1 1. You should confirm that you see system data scrolling by. If there is no data scrolling by, try adjust the gain and PPM offset in the FFT window.
If data is scrolling and the system is not encrypted you should start to hear voice audio. If a system is capable of encryption, the terminal window with the system data will show Air encryption: 1. However, note that even if it shows this, there is still a possibility that encryption has not been enabled.
Note that for a one channel receiver the frequency you tune to should be a control channel. The control channel frequency is the frequency shown in the top row of the Telive window in the green bar next to the word “Down:”. By pressing “t” (lower case T) in the Telive window you can toggle between the usage identifier window and the frequency info window. By looking at the frequency info window you can find neighbour networks.
If you want to log all voice communications you can by pressing “shift+R” (upper case R) in the telive window. This will log .ogg audio files to /tetra/out. You can also enable a text log by pressing “l” (lower case L) which will to /tetra/log/telive.log. More options can be found by entering ? (question mark).
Telive is also capable of decoding SDS messages, which are used to send short text messages or radio locations. If the TETRA system you are monitoring does send radio locations via SDS, then these can be automatically exported to a KML file which is stored at /tetra/log/tetra1.kml. If you open example_google_earth.kml, then Google Earth will periodically read from /tetra/log/tetra1.kml and give you an updated map of location. You can also set the TETRA_KML_INTERVAL environment variable which defines how often the location file will update. The default is 30s, but be aware than decreasing the time can slow your system down.
If you happen to close the GNU Radio FFT window and want to run the program again, you will need to restart the ./receiver1 1 program in the first terminal window.
To see how to monitor two or four TETRA channels simultaneously, refer to the telive_doc.pdf PDF file.
OLD MANUAL INSTRUCTIONS
Don’t use these instructions unless you cannot use the automatic script install for some reason.
Install the RTL-SDR Linux Drivers
If you haven’t done so already, follow the instructions at http://sdr.osmocom.org/trac/wiki/rtl-sdr to install the Linux RTL-SDR drivers. Remember to blacklist the DVB-T drivers on Linux.
sudo apt-get update sudo apt-get install vorbis-tools sudo apt-get install sox sudo apt-get install alsa-utils sudo apt-get install libncurses-dev
Note that if you use a different Linux OS, then some users have reported needing to also install the following extra dependencies:
sudo apt-get install git-core autoconf automake libtool g++ python-dev swig libpcap0.8-dev sudo apt-get install cmake git libboost-all-dev libusb-1.0-0 libusb-1.0-0-dev libfftw3-dev swig python-numpy
Install GNU Radio 3.6
The TETRA decoding software requires installation of the older GNU Radio 3.6 (latest version is 3.7). The easiest way to do this is to run Marcus Leech’s install script with the -o flag, to indicate that you want the old version:
cd ~ wget http://www.sbrac.org/files/build-gnuradio && chmod a+x ./build-gnuradio && ./build-gnuradio -o
This script will run for a few hours and should install GNURadio 3.6 and all the drivers required to run the RTL-SDR on Linux. Note that if you already have GNU Radio 3.7 installed, we recommend installing 3.6 on a fresh Linux install as the two versions many conflict.
cd ~ git clone https://github.com/sq5bpf/libosmocore-sq5bpf cd libosmocore-sq5bpf autoreconf -i ./configure make sudo make install sudo ldconfig
cd ~ git clone https://github.com/sq5bpf/osmo-tetra-sq5bpf cd osmo-tetra-sq5bpf cd src make
cd ~ git clone https://github.com/sq5bpf/telive cd telive make sudo mkdir /tetra sudo chown YOURUSER.YOURGROUP /tetra sh install.sh
Where YOURUSER.YOURGROUP should be replaced with the username and group that you are currently logged in to on your Linux system. In most cases it can just be YOURUSER.YOURUSER. Run ls -l in your home directory to see what username and group your files are using.
Install the TETRA Codecs
Note that if you are running a 64-Bit Linux version you will need to set your system to use a 32-bit compiler. The Appendix of the telive_doc.pdf file shows how to do this.
- Go to http://pda.etsi.org/
- In the top right enter as a search term “en 300 395-2” and click the button to select Search Standards.
- Start the search.
- Find the search result labelled as REN/TETRA-05059.
- Click on the winzip icon (looks like a white page with a yellow file cabinet on it) to the right of the result to download en_30039502v010301p0.zip.
- Move this zip file into ~/osmo-tetra-sq5bpf/etsi_codec-patches.
- In a terminal browse to ~/osmo-tetra-sq5bpf/etsi_codec-patches.
- Unzip the file, making sure to unzip with lower case letters by using the following unzip command.
unzip -L en_30039502v010301p0.zip
- Use the codec.diff file to patch the codec files you just unzipped by typing the following patch command.
patch -p1 -N -E < codec.diff
- Open the c-code folder.
- Run make to compile the codecs.
- Copy the compiled files cdecoder and sdecoder to /tetra/bin by typing the following, or just by copy and pasting them in the Linux GUI.
cp cdecoder sdecoder /tetra/bin
If you enjoyed this tutorial you may like our ebook available on Amazon.