BER in DMR: what the number means and what is normal
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.
BER norms: targets for a hotspot
Below are the practical thresholds that MMDVM hotspot operators go by:
- Under 0.5% — excellent. The hotspot is well calibrated, the link is solid. With proper calibration, MMDVM_HS_Hat–class hotspots steadily deliver 0.05–0.3%.
- 0.5–1% — normal. Acceptable for everyday use. FEC copes, speech is clean.
- 1–3% — noticeable degradation. Worth running a calibration. Occasional artifacts in the audio are possible.
- 3–5% and above — a problem. High chance of lost intelligibility and dropouts. Diagnosis and recalibration are needed.
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:
- Stop MMDVMHost:
sudo systemctl stop mmdvmhost - Launch MMDVMCal:
(in RadioStar it is the same command).sudo pistar-mmdvmcal - Set the working frequency with the E key (enter it in hertz, for example 433500000).
- Press b — enter DMR BER Simplex mode.
- Start transmitting from the radio (TG1, CC1, TS2 — the standard test parameters).
- Use the F / f keys to nudge the hotspot frequency up/down (100 Hz step), driving the BER to a minimum.
- Once you have found the minimum roughly, switch to a 10 Hz step for fine tuning.
- 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)
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:
- Distance to the hotspot. For a simplex hotspot, 1–3 meters is optimal. Right up against it (less than 30 cm) overdrives the receiver and BER climbs.
- Radio power level. Minimal power (0.5–1 W or even less) is plenty for working with a hotspot. High power overdrives the MMDVM input stage.
- Hotspot antenna. The stock "rubber duck" is perfectly adequate indoors. Swapping it for a directional antenna isn't necessary and can make things worse when working at close range.
- Interference. A nearby Wi-Fi router, Bluetooth devices, or another hotspot on a close frequency can raise the noise floor.
- MMDVM firmware. Outdated board firmware sometimes contains bugs in level handling. Update the MMDVM_HS firmware before calibrating.
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
- Getting the best BER from Pi-Star MMDVM, George Smart M1GEO — george-smart.co.uk
- MMDVM BER error rate tuning, OH1E Riku's Blog — riku.titanix.net
- Adjust RX/TX Offset (BER) for MMDVM Hotspot, Ailunce Blog — ailunce.com
- MMDVMCal — g4klx repository (Jonathan Naylor) — github.com/g4klx/MMDVMCal