BER in DMR: what the number means and what is normal

Category: CalibrationDifficulty: ★★☆~7 min

You glance at the DMRhub panel or your hotspot dashboard and see the line BER: 2.4%. Is that good or bad? Do you need to do anything about it? BER is one of the key metrics of a DMR link — easy to measure and not hard to improve. Let's break down where this number comes from, what counts as normal, and what to do if it has drifted out of the acceptable range.

What BER is

BER (Bit Error Rate) is the ratio of incorrectly received bits to the total number of transmitted bits over a given time interval, expressed as a percentage. Put simply: out of every 100 bits, how many arrived "flipped."

In DMR, every voice frame carries data together with an error-correction code (FEC — Forward Error Correction). FEC can automatically fix a small number of errors, so at a BER of up to 1–2% the link often stays perfectly intelligible. But when there are too many errors, the decoder can't keep up — you hear artifacts, speech "breaks up" or drops out.

Where to see BER In the device panel on the DMRhub portal, BER is shown in real time for every active hotspot. You can also see it in the MMDVMHost logs (/var/log/mmdvm/MMDVM-*.log) and in MMDVMCal itself during calibration.

BER norms: targets for a hotspot

Below are the practical thresholds that MMDVM hotspot operators go by:

An important nuance The BER value depends not only on the hotspot but also on the specific radio. One radio may show 0.1%, while another on the same hotspot shows 1.5%. That's normal: every radio has its own crystal and its own deviation. If BER is "bad" with only one radio — the problem is in that radio.

Why BER climbs: the main causes

Frequency drift (the main cause)

MMDVM hotspots use an inexpensive TCXO (temperature-compensated crystal oscillator), which can have a small deviation from nominal — typically within a few hundred hertz. That's enough to raise BER substantially. When the hotspot and the radio are off from each other, the receiver starts "missing" the symbols of the DMR QPSK constellation.

Incorrectly set RxLevel / deviation levels

If the radio is too close to the hotspot, or the receive level (RxLevel in MMDVM.ini) is set too high, the receive chain is overdriven. The signal "pegs" the ADC, the symbols are distorted, and BER climbs. Same story with a level set too low: a weak signal "drowns" in the noise.

Weak signal or interference

A hotspot works in half-duplex on a single receive and transmit frequency. If the radio is too far away, in a zone of reflections, or another transmitter is operating nearby on a close frequency, BER inevitably climbs. For a simplex hotspot, the working distance is usually 1–5 meters within the same room.

Temperature drift

The TCXO is temperature-stabilized, but not perfectly. After power-on the hotspot "warms up" for 5–10 minutes, and during that period BER can be slightly above normal. If the hotspot runs outdoors or in an unheated space, the drift is more pronounced.

Wrong Color Code or time slot

Technically, a Color Code mismatch doesn't increase BER as such, but the hotspot simply won't accept frames from the radio — which looks like a complete loss of communication. The Color Code and time slot (TS2 for a simplex hotspot) must match.

How to measure BER: the BER test in MMDVMCal

MMDVMCal is the standard calibration tool built into RadioStar (the DMRhub image for Raspberry Pi). It can measure BER in two ways:

Method 1: BER from the over-the-air stream (quick)

Watch it in real time: the hotspot runs in normal mode, the radio comes up on the air, and lines like these appear in the MMDVMHost logs:

M: 2024-01-15 14:23:11.456 DMR Slot 2, received RF voice header from R7ABC to TG9
M: 2024-01-15 14:23:14.123 DMR Slot 2, ended RF data, 3.0 seconds, BER: 0.8%

This is the BER of one specific session. A few transmissions and you can already see the trend.

Method 2: loopback BER test in MMDVMCal (precise)

This mode lets you precisely find the optimal frequency and levels. The sequence:

  1. Stop MMDVMHost:
    sudo systemctl stop mmdvmhost
  2. Launch MMDVMCal:
    sudo pistar-mmdvmcal
    (in RadioStar it is the same command).
  3. Set the working frequency with the E key (enter it in hertz, for example 433500000).
  4. Press b — enter DMR BER Simplex mode.
  5. Start transmitting from the radio (TG1, CC1, TS2 — the standard test parameters).
  6. Use the F / f keys to nudge the hotspot frequency up/down (100 Hz step), driving the BER to a minimum.
  7. Once you have found the minimum roughly, switch to a 10 Hz step for fine tuning.
  8. Note the optimal frequency you found. The difference from the nominal value is your RXOffset.
# Example calculation: nominal 433500000 Hz, optimum found at 433500275 Hz
RXOffset = 433500275 - 433500000 = +275 (Hz)
RXOffset and TXOffset are different things RXOffset affects how accurately the hotspot receives the radio's signal. TXOffset — how accurately the radio receives the hotspot's signal. Calibrate both: first RX (described above), then TX — the same way, only you assess the quality of the hotspot's signal with your radio or an SDR.

Applying the calibration results

The values you found go into the MMDVMHost configuration file. In RadioStar this is done through the web panel (the "Hotspot" → "RF parameters" section) or directly in the file:

[General]
...

[DMR]
...
RXOffset=275
TXOffset=-50

After saving, restart the service:

sudo systemctl restart mmdvmhost

Check the BER with a few transmissions — it should drop. If you have reached values below 1%, the calibration was successful.

Additional quality factors

If BER stays high even after calibration, check:

Important Don't confuse the hotspot's BER with the quality of your internet connection. Even at 0% BER the audio can "break up" if the hotspot is connected over an unstable Wi-Fi or a mobile internet link with packet loss. These are different problems with different diagnostic methods.

Watch your BER right in the DMRhub panel

Your DMRhub account shows the BER of each of your hotspots in real time — no need to dig through logs. Keep it below 1% and the link will be solid. If you don't have a hotspot yet, build a RadioStar image in a few clicks.

Sources

  1. Getting the best BER from Pi-Star MMDVM, George Smart M1GEO — george-smart.co.uk
  2. MMDVM BER error rate tuning, OH1E Riku's Blog — riku.titanix.net
  3. Adjust RX/TX Offset (BER) for MMDVM Hotspot, Ailunce Blog — ailunce.com
  4. MMDVMCal — g4klx repository (Jonathan Naylor) — github.com/g4klx/MMDVMCal