Why digital DMR audio breaks up (cuts out) and how to fix it

Category: HotspotsDifficulty: ★★☆~9 minutes

Digital audio has an annoying trait: it is either there or it is not. An analog radio on a weak signal hisses and crackles, but you can still make out the speech. DMR behaves differently — while everything is fine the audio is clean, like a phone call, but the moment something breaks, the voice turns into a "robot," shatters into fragments and drops into silence. There is almost no in-between state.

The good news: the causes of this "broken" audio are quite specific and fall into three layers — radio frequency, network, and the app/phone layer. If you troubleshoot layer by layer, the problem can almost always be pinned down in ten minutes. Let's go through each layer and give a clear checklist.

Where the "robot" actually comes from

Voice in DMR is encoded by a vocoder into a stream of frames. The frames come in a tight rhythm — roughly every 60 ms — and each carries a slice of speech. The decoder on the receiving side reconstructs the audio from these frames. Lose a frame on the air or in the network, and the decoder has nothing to play, so it outputs silence, a click, or an artifact. A few losses in a row, and you hear that very "robot."

That is why the key diagnostic question is always the same: where are the frames being lost — on the air or in the network? The whole fix depends on the answer.

Layer 1. Radio frequency (RF)

The most obvious suspect. If the radio is far from the hotspot, with a wall or two between them, a poor antenna or an SWR mismatch — some frames arrive with errors and are lost on the radio leg. The symptom: the audio breaks up more the farther away or the worse positioned you are.

The marker of an RF problem is a high BER (Bit Error Rate). If the BER in the hotspot logs creeps up (a few percent or more), the cause is almost certainly on the radio side. What to check:

First — calibrationIf the hotspot was built recently or the audio breaks up even right next to it, the first thing to do is calibrate the modem frequency. A drift of hundreds of hertz is a widespread ailment of budget boards. How to do it is described in the article on hotspot calibration.

Layer 2. Network

And here is where it gets really tricky. Voice travels from the hotspot to the network and back over UDP — a protocol with no delivery guarantee. A packet is lost, nobody retransmits it, the frame simply vanishes. And unlike RF problems, BER will be 0%: the radio leg is perfect, the breakup happens beyond the hotspot.

The classic and extremely common case is Wi-Fi power-save on a Raspberry Pi. To save energy, the Pi's Wi-Fi adapter is set by default to sleep between packets. An occasional ping (one ICMP per second) passes perfectly, and the person concludes "the network is fine." But the adapter in this mode cannot keep up with the dense stream of DMR frames every 60 ms: while it is waking up, frames are lost. The result is broken audio with zero BER and a "normal" ping.

Other network causes:

Ping lies"Ping 20 ms, no loss" is NOT proof that the network is fine for DMR. ICMP is a single occasional packet, while DMR is a dense real-time stream. A network can ping perfectly and still drop every third voice frame. Trust the packet-loss counter in the logs, not the ping.

Layer 3. App and phone

If you are listening to the air in a radio app on a smartphone, one more source is added. The mobile network is "jittery": latency floats, frames arrive in bursts and with spread. If the app's receive buffer is thin (minimal delay for the sake of "liveness"), it cannot smooth out this spread in time — and the audio breaks up on the phone side, even though the hotspot and the network up to it are fine.

This is fixed with a solid jitter buffer: the app accumulates a small reserve of frames (tens to hundreds of milliseconds) and plays them out evenly, riding through short network gaps. In the DMRhub app, reception goes through a server-side AMBE vocoder, so buffering and smoothing rest on the server and the client, not on the radio itself. More on working with a smartphone — DMR radio on a smartphone.

How to diagnose: one simple sign

The whole diagnosis comes down to separating RF from network. Open the hotspot logs (MMDVMHost writes them in detail) and watch two numbers during reception:

This simple test saves hours. The vast majority of "audio breaks up" complaints with clean BER come down precisely to the network — and specifically to a sleeping Wi-Fi on the Pi.

Fix checklist

Want air without the "robot"?

Build the right hotspot and connect to the DMRhub network: a server-side AMBE vocoder and smoothing take on part of the network quirks, while the radio app lets you listen and transmit even from a smartphone.

Conclusion

Broken "robotized" DMR audio is lost voice frames, and the whole question is where they are lost. High BER means the problem is on the radio: antenna, distance, calibration. BER near zero with rising packet loss means the network, and most often it is a sleeping Wi-Fi on the Raspberry Pi: the ping passes, but the dense stream of frames every 60 ms does not. A thin buffer in the app on a mobile network adds its own contribution at the phone. Separate these layers by the two numbers in the logs, run through the checklist — and the air will become clean.

Sources

  1. G4KLX MMDVMHost — log format, BER fields and frame counters, project documentation and sources.
  2. Raspberry Pi documentation on Wi-Fi power management (wlan power management, iw/iwconfig power_save off).
  3. Hands-on experience operating hotspots in the DMRhub network: broken audio at BER 0% due to Wi-Fi power-save and mobile internet jitter.