Implementation of a DMR Tier III trunked radio Base Station Transceiver in Software Defined Radio

By Adrian, Sat 23 March 2024, in category Amateur radio

LimeSDR, amateur radio, DMR, Digital voice

Implementation of a DMR Tier III trunked radio Base Station Transceiver in Software Defined Radio


Digital Mobile Radio (DMR), Trunked radio, Multi-Mode Digital Voice Modem (MMDVM), GNU Radio, Software Defined Radio


Digital Mobile Radio (DMR) Tier III trunked mobile radio systems are systems that employ a Time Division Multiple Access (TDMA) technology with a 2-slot TDMA solution and RF carrier bandwidth of 12.5 kHz. The Tier III extension to DMR is defined and specified by the European Telecommunications Standards Insititute (ETSI) and is largely based on DMR Tier II with regards to the RF channel access protocol and voice or data transmission protocol, but offers an extension for trunking which is described in the ETSI TS 102 361-4 document:

ETSI TS 102 361-4

The standard can be used to implement a wide variety of systems, from small systems with only a few physical radio channels (even single physical radio channel systems), through to large networks, which may be formed by the interconnection of BS radio sites.

Trunked radio systems are characterized by regulating channel access. A logical channel is assigned as a control channel (TSCC). The TSCC has an Inbound path for transmissions from MSs (inbound and outbound path for transmissions from the Trunked Station (TS) to MSs (outbound channel)). Control channel packets generated by a Trunk Station Control Channel (TSCC) transmit on the outbound path that all MSs listen to when not involved in a call. MSs request access to the system by random access. The system resources are then granted by the Trunk Station Control Channel (TSCC). This trunking protocol is designed to minimize the signalling required to provide MSs with a particular service in order to provide the greatest possible throughput.

Some of the benefits of a trunked radio systems are:

It seems desirable to study the properties of a trunked radio system and perhaps try to apply them if needed in the Amateur Radio service, however free software implementations of such systems are difficult to find, with most information regarding the practical operation aspects of such a DMR Tier III system not being generally available to amateur radio operators.

These pages are an attempt at demonstrating that a (limited functionality) DMR Tier III trunked radio base transceiver station setup is possible utilizing entirely Open Source / Free Software components as well as open hardware, and employing Software Defined Radio techniques to achieve the result. These pages are not an exhaustive description of the standard or of all possible ways to implement it, just one possible alternative for achieving the results.

Since the goal of the project is educational and amateur radio usage, there is no claim that all features of the ETSI DMR standards that are implemented or described here work as intended.

High level system architecture and components

DISCLAIMER: the work described in these pages is considered "In Progress" and not "finished". If you find any mistakes or have any questions, please send an email to (contact) (at) (the current website domain). Please consider this is not a commercial project nor does it intend to replace commercial projects. Its use for amateur radio and educational projects is encouraged, while other uses are discouraged. The references used for this work were: principally the ETSI standard delivered as TS 102 361-4, TS 102 361-1, TS 102 361-2, TS 102 361-3, existing source code in the MMDVM, MMDVMHost and ok-dmrlib projects, Wikipedia and public comments and answers by open source tools community memebers, especially GNU Radio and MMDVM.

The DMR Tier III base transceiver station implemented here uses a SDR multi-carrier architecture employing a mixed TDMA / FDMA channel access scheme. A total of seven DMR carriers can be transmitted and received simultaneously in a 200 kHz bandwidth. Each RF carrier employs the DMR 4FSK modulation using 4800 symbols / second in a 12.5 kHz channel, as described in ETSI TS 102 361-1, with RF channel separation configured at 25 kHz. The base station employs one control channel and a maximum of six payload channels. Thus the maximum simultaneous call capacity supported is thirteen normal voice calls or six full-duplex voice calls, or six two-slot fast data calls.

The multi-carrier base station transceiver (which can be used not only for DMR but also other amateur radio digital voice modes at the same time), implemented using GNU Radio as a lower PHY, is described in a separate page which can be read here: Implementation of a multicarrier DMR / YSF / M17 base station transceiver in software defined radio (MMDVM, GNU Radio, LimeSDR).

Radio hardware

In order to be able to utilize the time division multiple access scheme (TDMA), some SDR hardware platform is required that can support both the minimum sample rate necessary for the multi-carrier waveform (240 ksps) and also support TDMA transmissions in full-duplex mode.

The latter requirements disqualify some of the candidates due to a either a lack of support in software or hardware for FPGA based timestamps as used in GNU Radio, or a lack of full-duplex transmission, or both.

The following easily available SDR devices are fulfilling these requirements: LimeNet-Micro, LimeSDR-mini, Ettus USRP bus devices, BladeRF. Other potential targets could be the ADALM-Pluto (which requires modifications to the original design) and the AntSDR E200.

The system was mostly developed and tested using the LimeNet-Micro platform from Lime Microsystems.

LimeNet-Micro board

Additional testing was performed using the LimeSDR-mini transceiver and USRP B200 transceiver. Performance was found to be satisfactory at 431 - 434 MHz without any RF duplexer employed, with a total output power of -3 dBm, and an output power of -11 dBm per RF carrier. Additional filtering was required to eliminate spurious output: a low pass filter tuned for the amateur radio 430 MHz band on the output (TX) port and a band-pass filter tuned for the amateur radio band and centered on 435 MHz on the input (RX) port. To avoid receiver front-end overload from close transmissions by the DMR terminals, overall receive gain was turned down close to minimum. Below you can see the spectrum transmitted by the SDR transceiver when all seven DMR channels are active.

In the DMR Tier III system, round-trip PDU latency was measured with both LimeSDR and Ettus USRP equipment, mainly using the DMR presence check PDUs which require a response from the DMR terminal. Mean latency for the LimeSDR was found to be around 350 milliseconds, while on the USRP latency was found to be a bit higher, around 500 milliseconds in the first minutes of operation. Due to an undetermined issue in the software chain, on the USRP radio latency was rising constantly, after one day of non-stop transmission it was found to double to about one second. More testing is required to determine the cause of this latency rise.

Computing hardware

The main computing platform chosen for hosting the software was an x86_64 mini computer with four cores and eight execution threads, connected to the LimeNet-Micro board using USB. The SDR board, although capable of operating standalone using the included RaspberryPi CM3 compute module, was used in peripheral mode, as the CM3 was not capable of supporting transmitting and receiving all seven RF carriers, mainly due to ineffciencies in the current code.

The secondary test platform was an ARM64 board in the standard RaspberryPi factory form, using the big.LITTLE architecture on six cores, with two performance cores and four low-frequency cores. This ARM board was connected to a LimeSDR-mini transceiver and was capable of supporting transmission and reception of up to four DMR channels including the control channel, with acceptable performance.


The software architecture was designed to be modular, split into several applications, and consists of several software components which can all be deployed on the same host computing platform or can be distributed across several hosts, communicating via IP network protocols on the local area network. The main benefits of having separate components are separation of concerns between the programs and of the protocol layers, as well as re-use of existing open source projects without major modifications.
DMR tier III trunking architecture

DMR Tier III system software architecture


The main components are MMDVM - the multi-mode digital voice modem and MMDVMHost (written by Jonathan Naylor G4KLX et al) and modified by Rakesh Peter and myself in custom forks called MMDVM-SDR and MMDVMHost-SDR which enable running MMDVM on a Linux host and can communicate with MMDVMHost via a pseudo TTY instead of an actual serial port. MMDVM and MMDVMHost implement the upper parts of the physical layer and some parts of the MAC and data link layers of the DMR Tier II standards: TS 102 361-1, TS 102 361-2, TS 102 361-3.

As part of this proof of concept work, some alterations of MMDVM and MMDVMHost were made other than the ones required to support SDR transmission and reception. The DMR idle burst (Tier II) generated by the MMDVM was replaced with a continuous Tier III ALOHA burst.
MMDVMHost is modified in several places, with some additional settings added for the [DMR] configuration:


For DMR Tier III, one MMDVMHost program instance is dedicated to the transmission and reception of the Trunking Station Control Channel (TSCC) with the corresponding setting in the configuration file. If this is enabled, the RF channel served by this program instance will transmit continuously.

All other MMDVMHost program instances will only transmit when a call is active, since they are payload channels. They will also have timeslot receiving processing disabled when not active in a call, to avoid spurious decodes.

Provisions were also made for implementing a Control Channel Alternate Slot (TSCCAS) on the second timeslot of the first MMDVMHost program instance (which serves the Control Channel). However this was not finalized, and currently the second timeslot is idle when no calls are present and carries voice or data traffic just as a normal payload channel would.

Also additional modifications were made to support CSBK Multi Block Headers and Continuation Blocks and UDT Data Header PDUs, including retransmission on the Control Channel of uploaded UDT Data.

It is important to note that for this usage type MMDVMHost and MMDVM run in full duplex mode (they transmit and receive simultaneously) with both timeslots active.

QRadioLink and GNU Radio

The lower parts of the physical layer are implemented in QRadioLink via GNU Radio flowgraphs implemented in C++. These flowgraphs are mainly concerned with the frequency modulation and demodulation, filtering, frequency translation and resampling of the stream of samples consisting of 4FSK symbols generated, filtered and upsampled by MMDVM. Also, the GNU Radio flowgraphs implement the TDMA / FDMA multiple access procedures.

The number of DMR RF channels transmitted and received by QRadioLink in the MMDVM-Multi operation mode can be configured between two and seven. Due to latencies in the processing chain of blocks, a mandatory delay between 40 and 80 milliseconds is added to the transmission via a setting in the QRadioLink configuration file, so that samples are transmitted in the future and received samples can be matched in the proper timeslot for time-division multiplexing purposes. QRadioLink communicates with MMDVM-SDR via ZeroMQ packets.

QRadioLink offers a telnet-like command line interface from which various transmission parameters can be controlled at runtime by issuing commands: transmission output power, general receive gain, receive frequency, duplex offset between RX and TX, etc. GNU Radio flowgraphs are dynamically reconfigured at runtime according to the commands. A list of all commands can be accessed by typing help or ? in the CLI interface.

More information about the GNU Radio implementation can be found in this page: Implementation of a multicarrier DMR / YSF / M17 base station transceiver in software defined radio (MMDVM, GNU Radio, LimeSDR).

DMR trunking controller

The call control layer is implemented in a separate application, DMRTC, which handles the DMR Tier III Control Channel broadcasts, RF channel allocation and routing of DMR calls to and from the amateur radio IP networks via one or several instances of DMRGateway. It also routes DMR data packets for ongoing voice or data calls (either incoming or outgoing) towards the correct MMDVMHost program instance and thus the correct radio channel.

DMRTC communicates with several MMDVMHost (up to seven) and DMRGateway (not limited) program instances via UDP packets, the same format of packets used by MMDVMHost, and makes use of DMR related code from MMDVMHost under its original software license, modified where required to support the types of PDUs transmitted and received on the control channel and payload channels.

DMRTC supports one control channel per base station which is by default transmitted on the first MMDVMHost program instance and timeslot one, and support for a control channel alternate slot may be added in the future for the second timeslot of this MMDVMHost instance. All the other instances of MMDVMHost that DMRTC is connected to serve only payload channels.

DMRTC can be run in two modes: with or without a graphical user interface (Qt based). If run with a graphical user interface, the application will display radio channel and timeslot usage in almost real-time, along with call information and statistics, information about registered radios and subscribed talkgroups. Using the GUI, some actions can be performed on registered radios or can be broadcast on the Tier III system. Some of the Tier III standard functions are only available when all radios are required to register, for technical reasons.

DMR trunking controller graphical user interface

DMR trunking controller graphical user interface

DMRTC supports both fixed and flexible radio TSCC hunt plans, and thus requires configuration of all used frequencies. Please refer to the documentation for DMRTC for further details.

When a radio is first turned on, and if the hunting sequence is configured correctly, it will detect the control channel and issue a registration request on the system. Also depending on radio configuration, it will send during registration a list of all talkgroups that it subscribes to, which is one main talkgroup and seven secondary ones, also known as a Scan Group List.

Once registered on the system, the radio will rest on the frequency of the control channel, and monitor any announcements on it, including requests for private calls, short data messages and talkgroup call channel grants.

A trunking enabled radio will not normally display the frequency or timeslot it operates on. Thus the user is only aware of the current talkgroup(s) that are selected. The channel and timeslot information can instead be obtained by monitoring the DMRTC graphical user interface. Instead of changing RF channels, the user will change the talkgroup it wants to talk on, which will also update the subscription list in DMRTC.

When a user wants to talk on the system, a PTT press will signal the trunking controller that a call is requested, and DMRTC will allocate an RF channel and timeslot. The radio will promptly switch to that channel and begin transmitting or receiving. All other users on the system which monitor this active talkgroup will also be drawn in to this particular RF channel and timeslot to hear the conversation. Once a call has ended, or if a timeout timer (configurable in DMRTC and radio) expires, the controller will signal the end of the call, and all radios will switch back to the control channel.

Short messaging or status message transmission in DMR Tier III uses the control channel (normally RF channel 1 and timeslot 1). All radios will decode this transmission if it is addressed to them, but only if they are present on the control channel. Thus, radios engaged in a call may miss messages addressed to them and require re-transmission.

To handle the case where a radio has just landed on a control channel, and a conversation it is interested in is currently happening on some other channel, periodic announcements called Late Entry are made on the control channel about ongoing calls. Late coming radios can thus switch to the desired call automatically.

DMRTC also broadcasts periodically PDUs on the control channel with information about current time, radio frequencies used by the Tier III site channels, and adjacent (nearby) other site information if supplied in the configuration. The adjacent site information is used by the terminals to determine whether to roam or hand-over calls to a nearby site depending on configured criteria (on the terminal) regarding the quality of the signal.

For testing and amateur radio practical purposes, DMRTC configures some special DMR radio ids, and a short text message sent to these radio ids will trigger specific services like location query of another radio, dynamic group number assigning (will add talkgroups to the radio other than the ones configured on it), received signal reports etc. For example, a text message with the content 91 sent to the DGNA service id will determine DMRTC to configure DGNA on the requesting radio for talkgroup 91. A text message with the content containing a DMR id of another radio sent to the location service id will determine DMRTC to query the target radio for GPS location information (if supported) and report it back using the short message service.

DMRTC currently implements the following DMR Tier III services (partly or completely):

  1. Registration service
  2. Talkgroup attachment on registration
  3. Talkgroup voice call service
  4. Private voice call service: OACSU (to and from network subscribers), FOACSU (local subscribers only)
  5. Broadcast talkgroup call service (local subscribers only)
  6. Network voice services
  7. Voice call late entry announcements
  8. UDT short data message service: private (local subscribers only), talkgroup (local and network)
  9. Private voice / UDT short data call diversion service
  10. Dynamic Group Numbering Assignment service
  11. Status delivery service (MS to MS)
  12. NMEA location polling via UDT
  13. System frequencies and local time broadcasts
  14. Adjacent sites announcements
  15. Radio presence check
  16. MS authentication
  17. Preferential call notification
  18. Group call priorities, priority interrupt of network group calls
  19. Fixed and flexible hunt channel plans
  20. Absolute channel grants (only when MS is set to hunt in flexible channel plan)

Other features of the TS 102 361-4 standard are still missing and may be implemented in the future, but require significant additional work. Significant effort is also required for testing various DMR terminals to determine if they are compatible with the software, and also for packaging and documenting the software so it can be easily used by a large number of people without good knowledge of the GNU/Linux operating system and the standard itself.

Due to budget limitations only one type of DMR terminal compatible with Tier III operation was tested. Most such terminals require the user to acquire a Tier III compatibility license from the manufacturer.


DMRGateway is a program written by Jonathan Naylor G4KLX et al which connects a DMR repeater to the worldwide amateur radio IP networks.

Its usage is necessary for two reasons:
The first is that traffic on a Tier III system will take place on an arbitrary radio channel and timeslot as selected by the controller, so it is necessary to rewrite the timeslot for outgoing data packets so that static or dynamic talkgroups and/or private calls can be kept on their slot number as configured in the amateur radio reflector software (as otherwise calls would jump from one timeslot to another non-deterministically).

The second reason arises from a limitation in all major DMR network reflector software: they expect a repeater to only have two timeslots available, and if more than one talkgroup is configured for a certain timeslot, and that timeslot is busy carrying traffic, all other traffic intended for that timeslot will be blocked at the DMR reflector side until it is considered "free", and the Tier III base station will not be able to transmit that traffic originating from the reflector. Existing reflector software is not intended to work with a DMR repeater which is capable of carrying traffic on more than two timeslots. Since DMRTC supports 13 simultanenous calls, some traffic could be blocked if a single IP network connection is used.

To overcome this limitation, DMRGateway is slightly modified to allow multiple talkgroup and network inbound traffic for one timeslot to be passed on, and multiple network connections are used for the same amateur radio reflector, each of them using only one static static talkgroup. Since multiple instances of the DMRGateway software can be used with DMRTC, a large number of network connections and thus talkgroups can be passed from and to the Tier III site without obstacle. Multiple DMR network operators can be configured as well using DMRGateway.


The code used for this proof-of-concept implementation of DMR Tier III is free software (FOSS) and can be found in these repositories:

There are still a number of known issues and bugs, known ones are generally listed in the README for each repository. Package releases will be made in the future, for now the easiest way to get started is to compile all software from source.


Installation and configuration instructions are available in the documenatation area. The documentation may be still incomplete in places and contain outdated information while this topic is still being worked on. It is also advised to read the documentation of the original MMDVM programs.


A series of videos are listed below which demonstrate this work used for real-life amateur radio operation.

1. Two adjacent DMR Tier III sites set up using a LimeNet-Micro and a LimeSDR-mini transceivers. Reception using SDRTrunk and a RTL-SDR-v3 dongle.

2. Monitoring DMR Tier III transmission from a LimeNet-Micro with three active payload channels. Reception using SDRTrunk and a RTL-SDR-v3 dongle.

3. Two Tier III radios calling each other utilizing the Full Off-Air Call Set Up method, using the trunking system. This demonstrates how to use the FOACSU private calls.

More information

This page is hopefully the first in a series of articles detailing DMR trunking operations for educational and amateur radio use. More information will follow in future entries. A PDF version of this article will also be made available. If you found this work useful, I would appreciate if you let me know.

Credits and thanks

This work was made possible by Jonathan Naylor G4KLX (the author of MMDVM, MMDVMHost and DMRGateway programs), Rakesh Peter (the author of the Linux port of MMDVM, MMDVM-SDR) and the GNU Radio and MMDVM communities providing useful advice.

I would especially like to thank Marek Sebera, author of OK-DMRLIB, Denny Sheirer, author of SDRTrunk and the unknown authors of DSD and DSD-FME. Their tools were very useful for receiving the test transmissions and dissecting the DMR tier III protocol as heard over the air.
I would also like to thank here all amateur radio operators who patiently helped me test this setup in real world traffic conditions.