RTL-SDR Tutorial: Listening to TETRA Radio Channels

NOTE: There is now a plugin available for SDR# that will decode TETRA fairly easily. It is still in beta and misses a few features found in telive. Check it out in this post.

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.

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.

Note: As of October 2016 there is now a Windows port of the Telive decoding software available. This may be an option for you if you prefer to run in Windows. More information here.

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.

A Zoomed in TETRA Signal

A Grouping of TETRA Signals Zoomed Out

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.

Note 2: As of October 2016 there is now a Windows port of the Telive decoding software available. This may be an option for you if you prefer to run in Windows. More information here.

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.

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.

gnuradio-companion

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.

Telive Receiver Window

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.

TETRA Decoding Windows

Listening in to TETRA radio

OLD MANUAL INSTRUCTIONS

Don't use these instructions unless you cannot use the automatic script install for some reason.

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:

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.

Install telive

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.

179 comments

Hi everybody.
I tried to install Gnuradio in my RP3, and this happened.

Starting all functions at: su 11.8.2019 18.23.56 +0300
SUDO privileges are required
Do you have SUDO privileges?y
Continuing with script
Installing prerequisites.
====> THIS MAY TAKE QUITE SOME TIME <=====
Unsupported Debian version 9.9

Since i’m from northeastern Europe…
Then i’ve seen something like this on every tetra cahnnel over here… both fields are equal to 1
Registration_required=1
De_registration_required=1
I know that 0 is false and 1 is true
Also Air_interface_encryption=1
TTT with with single and dual mode made no difference…
No group calls no nothing only encrypted voice…
Since they use TETRA in here as a 4th mobile network called “ESTER”
Should i try this method as this post?

I’m not 100% sure but if Air_interface_encryption=1 then it is encrypted and you wont be able to decrypt as far as i Know.
I can only relate to the Swedish TEA2 encryption “RAKEL”, which is impossible to decrypt as it is sort of a two-way encryption.

Hi all
I’m trying to decode TETRA in Debian with a SDRPlay RSP2. I follow the steps above mentioned but when I run the last step in GNURadio I’m in doubt about the file I’d choose (the steps above indicate choose the file ~/tetra/telive/gnuradio-companion/telive_1ch_simple_gr37.grc but in my installation the path isn’t correct). The likest I found is ~/tetra/telive/gnuradio-companion/sdrplay/telive_1ch_simple_udp_xmlrpc_sdrplay_rsp1a.grc but I’m afraid it’s for SDRPlay RSP1A.

I installed and all went fine but the running!
When I arrive to the Tetra live receiver, it came grey and does not respond anymore to any click.
In the same time I get “PLL not locked”.
Where I can look to fix it? Obviously using GQRX the dongle work…
Thank you

I continued to test and experiment, with no luck.
The manual tell that “PLL not locked” can be a out of range frequency; no fix entering the frequency in the main windows (X then my 462.3000) and impossibility to use the window of Tetra Live Receiver, which not respond.
I get also a message:
The xterm executable “” is missing.
You can change this setting in your gnuradio.conf, in
section [grc], ‘xterm_executable’.

The message will show only once, and I don’t know if I need to fix it (and how!)

I just have one issue; when i activate the recording function, i can see that it saves the .ogg file in the terminal window, but it is not there in the tetra folder, so i created the /out folder, still nothing in it.
See below:

Hi Eudardo,
it wasnt so easy get it running on RPi3.
I tried the “telive live Linux image” on a regular PC and it worked.
After a days of testing i tried copy the telive_1ch_simple_gr37_slow_udp.grc from the “telive live Linux image” (tru a USB stick) to RPi3 and run it from gnuradio and it worked 🙂
Hopefully i helped you!

Hi, i have tried using Bootable 16GB USB stick for Tetra decoding on my 7 year Laptop, i have problems receiving no audio and nothink showing in Telive monitor window. GQRX is work really well from RTL 820T2 donge any help please ?

“Failed to open rtlsdr device #0.” means that the usb dongle is claimed by something else, probably the dvb-t driver. blacklist it (i can’t remember the exact command, but it’s in the telive docs) and reboot and it should work.

Any chance of porting this to an OS for mentally challenged and undereducated normal people and getting this into a form that doesn’t require a time machine to travel back 50 years to get the degree in programming neurosurgery robots on DIY rocket ships needed to operate this software? Thanks for considering. Linux-only software is modern racism.

Cmon guys. You can’t complain about software that is written by a volunteer for free. The fact is if Linux didn’t exist this software would be 100x harder to program and woulnd’t even exist in the first place

HI, and thanks for this tutorial. Finaly found the time to install it and test it (using the install script) … and for most part it went well.
A do have a few questions, and I hope someone can help me:

I’m running Ubuntu 14.4 32bit on VMplayer with maximum number of cores (6) and 4 gb of ram, but when everything is running the fft control window gets frozen (turns to b&w) when decoding a signal. I can only change freq. and ppm at the start, and even then it’s sluggish. Is that normal, and what can I do to make it faster??

Decoding is running despite of the frozen control window, without any evident error messages but I only record very short (1-2 seconds max) voice massages that seem to be encrypted. I am not sure if the whole sistem is encrypted or if there is a problem with decoding the signal due to a slow system. (I have a phenom 1090t procesor with 20gb ram)

Tnx … but in the mean time I “fixed” the issue by installing debian (as suggested on the radioreference forum). Under Debian everything is running much much smoother!
But the disappointment is that almost everything is encrypted 🙁

Just found out a solution to this problem. In my case it was due to the virtual machine in WM Player was set to 1 processor while my system is an Intel Haswell with 4 cores (8 logical cores).
Changing the virtual machine to 2 processors fixed it! (power off the guest in WM Player, right click your virtual machine, select settings, select processor and set it to an adequate number). Hope this is of any help!

it works on 32bit Kubuntu 14.04 with GRC from the official 3.7.2.1 ubuntu repo and compiled rtl drivers, except after 2 seconds or so it freezes with error ” file_sink write failed with error 21 ” – i guess this may be a buffer prob, as just running RTL FM from within bash plays ok. but with buffering errors, but in GQRX it works smoothly.. – i’m currently tweaking GRC to try to correct this.. anyone help plz ? am i on the right track ?

update – if i start GRC on a valid freq – on its own, no tetrad, receiver 1, no telive or no rxx … GRC starts , finds my hardware, looks good and apears to work without any apparent errors.

if i *- then* start tetrad and the other command line tools whilst GRC is running, they don’t error, but sadly they don’t see any output from GRC – i think there is some lack of comms between modules maybe.

I tried 5 times to get this working but I can’t. When I try to run it, in the first step, (./receiver1 1) I keep getting this error:mkfifo: cannot create fifo ‘/tmp/fifo1’: File exists
Traceback (most recent call last):
File “demod/python-3.7/simdemod2.py”, line 18, in
import osmosdr
ImportError: No module named osmosdr

What can I do?
I saw that Christian said that he installed GRC 3.7 instead of 3.6, so now I’m trying the same. I’ll notice you. Thanks.

This normally (for me anyway) means that I either don’t have a strong enough signal or the signal I do have needs fine tuning in the FFT window.
I also got a lot of this when using a VM in VirtualBox. Switching to VM Player was much better as apparently VM Player handles the USB passthrough a lot better.
You dont mention if you’re using an RTL stick or not but might be worth checking that you are using at least USB2 ports and have the latest drivers installed etc….

I did everything according to instructions. But instead gnuradio 3.6 I installed gnuradio 3.7. And then opened the file telive_1ch_gr37.grc. receiver1 I started with sudo ./receiver1 1, because otherwise I had an error message.

Hello..how resolve this problem…all work good, but when i open ./receiver1 1 apear this error:
Traceback (most recent call last):
File “demod/python/simdemod2.py”, line 78, in
tb = top_block()
File “demod/python/simdemod2.py”, line 49, in __init__
verbose=options.verbose)
File “/home/test/osmo-tetra-sq5bpf/src/demod/python/cqpsk.py”, line 260, in __init__
self.receiver.set_alpha(self._costas_alpha)
AttributeError: ‘mpsk_receiver_cc_sptr’ object has no attribute ‘set_alpha’
I tried many ways,but do not I realize that I supposed to do. sorry for my badd english and thank s

Hi,
I had the same error.
To “solve” I brutally commented out two lines in the python source code “cqpsk.py” in order to have:
#self.receiver.set_alpha(self._costas_alpha)
#self.receiver.set_beta(self._costas_beta)

However I’m not sure if this hack compromise the proper functioning of the program.

Hi everybody, I just wonder if I have a AIR ENCRYPTION = 1 system, and I think I shouldn’t get any voice or just sound from it. but I get something like broken voice or wrong decoder noises when somebody’s making a group call. Is this a real air encryption enabled system, or I made some mistake in the settings?

Air Encryption = 1 means that there has been a license for encryption applied to the network as a whole.
However (as is the case with a local network that I’ve been monitoring) that doesn’t mean that every transmission will be encrypted, its just that it has the capability to be if needed.
I actually get (surprisingly) quite a lot of unencrypted comms.
Encrypted stuff does just sound like garbled speech with a few whistles and other strange noises thrown in!
Unencrypted stuff should be nice and clear…

Dont know about other countries but in the UK attempting to decode a secure home office/public safety TETRA encryption algorithms (TEAs) type radio’s- Airwave tetra base terminal network (O2)- is a serious as carrying a firearm. The area of TETRA security is extensive costing millions of pounds in its development.i would not like to be the person caught hacking tetra.

I tried to run it on a Pi 2 last weekend (just to see what would happen). It took an age to install, and at the end of it all, Gnu Radio just froze it. So, I would say that is a pretty comprehensive no! 🙂

Submit a Story/Contact

Meta

What is RTL-SDR

The RTL-SDR is an ultra cheap software defined radio based on DVB-T TV tuners with RTL2832U chips. The RTL-SDR can be used as a wide band radio scanner. It may interest ham radio enthusiasts, hardware hackers, tinkerers and anyone interested in RF.