Wiki

Technical reference for system integrators and engineers.

L-DCB

L-DCB (Leantegra Differential Channel Burst) is a 2.4 GHz TDMA positioning protocol that runs on the L-MESH stack. It enables a meter-class accuracy from RSSI values by removing the two error sources that make ordinary RSSI positioning methods unusable.

L-DCB exists for deployments where centimetres are not required but battery-powered infrastructure is. It adds no radio, no antenna and no separate schedule — it reuses the frames the mesh is already sending and the channel set it is already hopping across.

Measuresreceived signal strength, differentially across adjacent nodes
Accuracy≈ 4 m at 50 m node spacing, ≈ 2.5 m at 30 m node spacing
Radio2.4 GHz — the same one L-MESH uses
Geometryone-dimensional — position along the chain
Burst16 channels in 1.8 ms
Rate0.1–1 Hz, 0.5 Hz default
Tag density20 tags per zone at 0.5 Hz, 50 at 0.1 Hz

Why single-channel RSSI does not work

Turning RSSI into distance is arithmetic anyone can do. The reason it fails in practice is that two independent errors sit on top of the measurement, and they fail in different ways:

ErrorTypicalCharacter
Tag transmit power and antenna spread≈ 5 dBa fixed bias per tag — averaging never removes it
Multipath fading≈ 6 dBrandom per channel and position — averaging does remove it

Together they put roughly 7.8 dB of error on a single reading. Against the gradient a single node sees at 50 m spacing — 0.35 dB per metre — that is 22 m of position error, which is worse than simply reporting the nearest node.

The two errors need different treatments, which is why L-DCB is two mechanisms rather than one. Averaging harder does not fix a bias, and a differential does not fix a fade. Each half addresses what the other cannot.

Differential — removing the tag

Rather than reading absolute strength at one node, L-DCB takes the difference between what two adjacent nodes heard from the same transmission:

Δ(x)  =  RSSI_A − RSSI_B  =  10n · log₁₀( (S − x) / x )

Because both nodes heard one transmission, whatever the tag radiated cancels exactly. Transmit power, antenna gain, orientation, even a different product model — none of it survives the subtraction. What is left describes only where the tag is between the two nodes.

The subtraction has a second effect that matters as much. As a tag moves from A toward B, one reading falls while the other rises, so the difference changes at twice the rate of either reading alone:

GRADIENT BETWEEN TWO NODES, 50 m APART RSSI at node A RSSI at node B Δ = A − B A B 0 m 25 m 50 m 0.35 dB/m at one node · 0.69 dB/m on the difference — the same dB of error buys half the position error
The difference is steeper than either curve because both move at once, in opposite directions. Doubling the gradient halves the position error for any given measurement noise.
The differential costs nothing to obtain. Both nodes are already listening in the same slot, because a mesh frame is a broadcast — hearing it at two nodes is not two transmissions.

Channel burst — removing the fade

Multipath fading is frequency-dependent: a null on one channel is not a null on another. A tag therefore transmits a burst across 16 channels rather than one frame on one channel, and the node averages what it hears.

The burst is a broadcast, sent once. Every node within range receives the same sixteen frames, so one burst serves both sides of the differential at the same time — the measurement is not repeated per node, and a tag does not range against nodes one after another. At 50 m spacing a transmission carries two to three hops, so four to six nodes typically hear each burst; the pair bracketing the tag supplies Δ and the rest are redundancy.

ONE BURST — 16 CHANNELS, 16 FRAMES, 1.8 ms mean ch 1 ch 16 deep fade on one channel fading is independent per channel, so averaging N of them narrows the spread by √N — 6 dB becomes about 2 dB
A single channel can land in a null and report a tag as far away when it is close. Sixteen channels cannot all be in a null at once.

Averaging N independent samples narrows the spread by √N. Sixteen channels do not deliver sixteen independent samples — adjacent channels stay correlated within the coherence bandwidth — so the working figure is about eight effective channels, taking 6 dB of fading down to roughly 2 dB.

The sixteen frames are sent consecutively inside one slot, retuning between each, and the whole burst completes in 1.8 ms. See platform for the per-channel timing and how a receiver follows it.

What the combination is worth

Each half addresses one error, and neither alone is sufficient:

ConfigurationMeasurement errorGradientPosition error
Absolute RSSI, single channel7.8 dB0.35 dB/m≈ 23 m
Differential only8.5 dB0.69 dB/m≈ 12 m
Channel burst only5.4 dB0.35 dB/m≈ 16 m
Both — L-DCB3.0 dB0.69 dB/m≈ 4 m

At 50 m node spacing, path-loss exponent 2.0. The second row is worth reading twice: the differential has the largest dB error of any row — subtracting two noisy readings adds noise — and still halves the position error, because dB error is not the quantity that matters. Error divided by gradient is.

This is why neither mechanism ships alone. Differential alone leaves the fading it cannot average; burst alone leaves the tag bias it cannot cancel. Applied together they attack a 23 m error from both ends and land near 4 m.

Node spacing

Accuracy scales directly with spacing, because the gradient does. Closer nodes make a steeper curve:

SpacingGradientPosition error
30 m1.16 dB/m≈ 2.5 m
50 m0.69 dB/m≈ 4.3 m
75 m0.46 dB/m≈ 6.5 m
100 m0.35 dB/m≈ 8.6 m

Node spacing is usually fixed by the mesh link budget rather than chosen for positioning, so this table is generally a prediction rather than a lever. Where accuracy is the binding requirement, spacing is the first thing to change.

Target speed

A tag that moves during its own burst smears its own measurement. Because the burst completes in 1.8 ms, that smear is not a constraint at any speed these deployments see:

TargetSpeedMovement during the burst
Walking1.4 m/s2.6 mm
Vehicle5 m/s — 18 km/h9 mm
Vehicle15 m/s — 54 km/h27 mm
Against a 4.3 m error budget, 27 mm is nothing. L-DCB measures moving vehicles as readily as walking people — what separates it from UWB is accuracy, not the ability to measure something in motion.

How well a track is resolved is a separate question from whether a fix is valid. At 0.5 Hz a vehicle at 18 km/h travels 10 m between fixes, so the update interval, not the burst, is what sets the resolution of a moving target's path.

Tag density

A node listens once per tag burst: a short window to lock onto the first frame, then the 1.8 ms the burst takes.

Node receive window, per tag burst
Lock window on the first channel — covers tag clock drift100 µs
The burst itself, followed on locked timing1.82 ms
Total≈ 1.92 ms

Capacity is then how many of those windows fit in the burst slots the superframe carries, each tag needing one per measurement period:

RateBurst slotsSlot time/sPer tag/sTags per zone
0.1 Hz110 ms0.19 ms50
0.5 Hz220 ms0.96 ms20
1 Hz440 ms1.92 ms20

Tags are placed by identity rather than by contention, exactly as elsewhere in the schedule:

burst_offset  =  dcb_slot_for_id( device_eui )  mod  BURSTS_PER_PERIOD
A zone is the span heard by the same nodes — two to three hops, roughly 100–150 m of tunnel. Twenty tags inside that at 0.5 Hz is a dense crowd: ten people between one pair of nodes is comfortably inside the budget, with room for the vehicles passing them.

Density is what the node pays for, because each tag costs it another receive window:

Tags in zoneBurst listening at 0.5 HzNode totalService life
10.004 mA0.105 mAcell-limited
30.013 mA0.114 mA9.6 years
50.022 mA0.123 mA8.9 years
100.044 mA0.145 mA7.6 years
200.089 mA0.189 mA5.8 years

Node total includes the L-MESH standing cost of 0.066 mA and a platform base, against a 9600 mAh cell (Locator Lite XT). Positioning is the smaller half of the bill up to about ten tags — belonging to the mesh costs a node more than measuring the tags in it.

What it costs

L-DCB is priced in slots before it is priced in current. Burst slots come out of the relay region, and relay slots are what set mesh latency — but at these burst lengths the bite is small:

RateBurst slotsRelay slotsNode — 10 tagsTag99-hop mesh
none0242.0 s
0.1 Hz1230.078 mA0.001 mA2.0 s
0.5 Hz2220.145 mA0.004 mA2.1 s
1 Hz4200.244 mA0.008 mA2.1 s

Mesh latency barely moves across the whole range, because a 99-hop chain needs five superframes whether the relay region holds 20 slots or 24 — only the final partial superframe differs. Raising the rate costs slots and node current and buys a shorter update interval; there is no hidden latency penalty to weigh against it.

The tag column is small because a burst frame is 68 µs: a tag spends about 1.7 ms of transmitter on-time per burst however many channels it covers. Against a UWB receiver at 130 mA doing the same job, none of these currents is a consideration. The scarce resource in L-DCB is slots, not milliamps.

Where it fits

MethodAccuracyReceive currentConstraint
UWB TWRcentimetres≈ 130 mAan exchange per tag — airtime scales with density
UWB TDoAcentimetres≈ 130 mAneeds synchronised anchors
L-DCBmetres≈ 4.6 mAshares the mesh slot budget; one-dimensional
Offline-online RMAzone≈ 4.6 mAno live position at all
L-DCB is the method to choose when the requirement is 2–5 m on battery-powered infrastructure. Where mains power reaches, UWB is better in every respect except cost. The reason L-DCB exists is that in a tunnel, mains power usually does not reach.

Platform

The burst is sequential, not simultaneous. An nRF52840 has one transceiver and can be on one channel at a time, and nothing in L-DCB asks otherwise. What the word burst describes is a set of measurements that belong together, sent back to back — not sixteen transmitters firing at once.

Per channel, at the tag
Retune — FREQUENCY written while the radio is disabledfree
Ramp up — fast ramp-up mode40 µs
Frame — 6-byte payload at 2 Mbps68 µs
Disable6 µs
Step114 µs
All 16 channels1.82 ms

Channel choice is unconstrained: FREQUENCY covers 2400–2500 MHz in 1 MHz steps, so sixteen channels at 5 MHz spacing span 2402–2482 MHz and sit inside the ISM band. The spacing is what makes the diversity real — a tunnel with 100–300 ns of delay spread has a coherence bandwidth of roughly 0.7–2 MHz, so channels 5 MHz apart fade independently.

L-DCB sequences the hop set within a slot on its own counter, rather than taking one channel per slot from the L-MESH slot counter. It shares the channel set, not the per-slot derivation.

How a receiver follows a 114 µs step

A node cannot blind-follow the sequence. The per-channel step is 114 µs, while tag clock drift across a 2 s resync interval is around 100 µs — very nearly a whole step. So the node locks first, then runs open:

Channel 1Channels 2–16
wide window, ±100 µs, waiting for the preamblestepped on local timing, no further searching
arrival time re-establishes the tag's phasedrift across the remaining 1.7 ms is 0.09 µs

Once the first frame is detected the burst is short enough that drift inside it is three orders of magnitude below the step. The guard is therefore paid once per burst rather than once per channel, which is where most of the receive cost would otherwise go.

RSSI and why pairs need calibrating

The nRF52840 reports RSSI at 1 dB resolution with ±2 dB accuracy. Resolution is a non-issue — quantisation contributes 0.29 dB, which averaging takes to 0.1 dB. Accuracy is not a non-issue, and it lands in the one place the differential does not protect:

BiasCancelled by the differential?
Tag transmit power, antenna, orientationYes — one transmission, subtracted away
Node receiver calibration offsetNo — two different receivers, subtracted together

Δ is the difference of readings from two different nodes, so their individual receiver offsets do not cancel — they combine. At ±2 dB per node that is 1.6 dB on Δ, or 2.3 m of position offset for the pair.

Position error at 50 m spacing
Calibrated pairs≈ 4.3 m
Uncalibrated pairs≈ 4.9 m
The saving grace is that this is a fixed offset per pair, not noise — it does not vary with position, time or channel, so a one-off per-pair calibration removes it and it stays removed. Left uncalibrated it does not blur the answer, it shifts it, which is the more dangerous failure because the result still looks precise.

Configuration

SettingDefaultEffect
Burst channels16sets accuracy — diversity against fading
Channel spacing5 MHzabove the tunnel coherence bandwidth, so channels fade independently
Measurement rate0.5 Hzsets burst slots, node current and tag density
Path-loss exponent2.0site-calibrated; tunnels vary with cross-section
Differential pairsadjacentwiden where nodes are dense
Pair calibrationcommissioningremoves the receiver-offset shift; a fixed value per node pair
Lock window100 µsfirst channel only; scales with the resync interval
Outlier rejectionondiscards channels beyond 2σ before averaging
Presence gatingonno burst is expected unless a tag announced itself

Related

L-MESHsupplies the slots, the channel set and the transport
A-RTLSpresence gating, and the view across positioning methods
Unified TDMAthe schedule the burst occupies
MQTTwhat the gateway publishes onward
Accuracy figures on this page are derived from a path-loss model with 6 dB fading and 5 dB tag spread, at eight effective channels of diversity — a deliberately conservative figure, since 5 MHz spacing should decorrelate more of the sixteen than that. Tunnel propagation departs from free-space behaviour in ways that vary with cross-section, lining and traffic, so these describe the design and want confirming by survey on a representative drift before they are used to size a deployment.