ELINTIR ML/RF MAPPER

SDR systems for reconnaissance and communications

ELINTIR GR-1 receiving unit: four antennas on the top edge, five coaxial cables to the array

Underslung pod

ELINTIR GR-1

Receiver, compute and storage in one housing under the carrier. Five channels are received coherently, and the direction is computed by MUSIC from raw IQ on board — what goes down is a bearing, not a sample stream.

Receive
24–1766 MHz coherent, survey to 6 GHz
Compute
Cortex-A76 4 cores @ 2.4 GHz
Memory
8 GB
Storage
64 GB SD + 64 GB NVMe for IQ capture
Power draw
30 W — ≈3.8% of what a 15″ carrier takes

Full specification →

ELINTIR SL-1 s.Link operator modem with two antennas

Operator modem

ELINTIR SL-1

The other end of s.Link — our own physical and link layer. It takes the bearing telemetry in and sends commands back. The band is narrow, and in a waterfall the burst reads as a domestic sensor rather than as a military channel.

Radio
872 MHz, GMSK BT=0.5, 25 000 sym/s
Bandwidth
26 kHz occupied
Coding
convolutional 1/2, K=7, soft-decision Viterbi
Encryption
ChaCha20-Poly1305 AEAD, 256-bit
Topology
point to point, no relaying

s.Link datasheet →

High-rate modem

ELINTIR SL-2 Concept

The same s.Link modem on a larger die. In SL-1 the physical layer is computed by the host, in Python — at 25 000 symbols per second that is correct and cheap. The high-rate mode does not work that way: 15.36 Msym/s will not pass through USB into Python, the chain has to live in fabric, and on the SL-1 die only eight of eighty multiplier slices are free.

Die
XC7K325T Kintex-7 — 203 800 LUT, 840 DSP48
Radio
AD9361 — the same transceiver as in SL-1
Memory
DDR3 — frame buffer between fabric and host
Compatibility
s.Link 1.0 unchanged: GMSK, convolutional 1/2, ChaCha20-Poly1305
What it is for
s.Link4k — 15.36 Msym/s at 30.72 MS/s

Kintex figures are datasheet, not our measurement

Sector direction finder

ELINTIR ZR-1 Concept

A cheap direction finder for the band where a coherent array cannot work: above 1766 MHz the GR-1 tuner stops, and FPV control and video live exactly there. Five directional antennas in a ring compare power, not phase, so neither synchronous channels nor array calibration are needed. It gives a sector, not a degree — and says how much to trust it.

Transceiver
AD9363 — 70 MHz – 6 GHz, two receive inputs
Compute
Zynq-7010 — FPGA and Cortex-A9, on the board itself
Switch
SP6T DC – 6 GHz — selects the sector
Orientation
BNO085 magnetometer and GNSS
Reporting
s.Link — GMSK, convolutional 1/2, ChaCha20-Poly1305

Specification follows the first on-air measurement

Ground complex

ELINTIR ZR-47 In design

Eight coherent channels of direct sampling — there is no local oscillator at all. The PLL phase jump on every retune, which breaks wideband direction finding on the five-channel station, does not exist here as a phenomenon. The die sees the whole band and computes a direction on every bin, not on one.

Die
XCZU47DR — eight RF ADCs, 14-bit @ 5.0 GSPS
Front end
TCM2-63WX+ baluns, on-die clock distribution
Self-test
eight RF DACs on the same die — built-in BITE
Synchronisation
MTS — phase across eight channels, tile to tile
Reporting
s.Link; raw IQ over QSFP28

Specification follows the first board

ELINTIR UCA-1 — pentagonal antenna array with five vertical elements

Antenna array

ELINTIR UCA-1

Five elements in a Ø195 mm ring. It is the ring geometry, not the receiver, that decides where a bearing is unambiguous: the chord between neighbouring elements is 114.6 mm, and spacing against wavelength is recomputed on every retune.

Geometry
Ø195 mm ring, five elements
Spacing
114.6 mm chord between neighbours
Unambiguous
262–1309 MHz
Below 262 MHz
energy only, no direction
Output
five coaxial runs to GR-1

Array limits →

Antenna array

ELINTIR UCA-2 In development

Two switched concentric rings of five elements. One ring cannot cover the whole GR-1 range: spacing against wavelength, unambiguous at the top of the band, stops yielding a direction at the bottom. Two rings split the band between them; the receiver stays the same.

Geometry
two concentric rings of five elements
Channels
five, switched between rings
Output
coaxial runs to GR-1

Geometry is fixed by the first drawing

Squint ring

ELINTIR LPA-1 Concept

Five log-periodic antennas placed radially, 72° apart. The ring for ZR-1: each looks into its own sector, and the direction comes from the power difference between neighbours — which is why the elements here are directional, unlike a UCA ring, where they must be identical and omni.

Elements
five printed LPDAs, 72° apart
Method
amplitude comparison of adjacent sectors
Output
SP6T switch into ZR-1

Name provisional — the release session decides

Three rings

ELINTIR UCA-3 In design

Three switched concentric rings of eight elements. Nothing covers 100 MHz – 6 GHz with a single ring, so the rings are made electrically identical and split the range three ways — each working its own third with the same geometry.

Geometry
three rings of eight elements
Radii
26.78 · 104.85 · 410.46 mm
Bands
1533–6000 · 391–1533 · 100–391 MHz
Output
eight channels into ZR-47

Collision mechanics are computed by plan 268

An electromagnetic map, not a list of detections

We are not building an instrument that shows a direction but a platform that folds an arbitrary number of physical sensors into one picture. A coherent array, a wideband survey receiver, someone else's receiver inside a customer's system — the platform does not care what does the receiving. What matters is what comes out.

And what comes out is not a list of bursts but a map with context: which band of the frequency plan this is, which operator holds it, whether this is a legitimate user, and whether the same emitter was already here yesterday. Detections are fused into sources by frequency, harmonics, shared location and modulation coherence — and only then reach the operator.

War is moving exactly there. Control of the spectrum is its next technological cycle, and it will be won not by whoever jams loudest but by whoever sees more and sooner. The station suppresses nothing — it is a SIGINT sensor, not a jammer — and that is what carries it through export control where a jammer stalls for months.

Under the hood: a five-channel coherent array and the MUSIC algorithm give the direction from the phase differences between elements. Each station reports to the operator over its own link; the console crosses bearings from several stations, and a point on the map falls out.

wavefront reached first

The path difference between elements is the bearing

RECEIVERS 24 MHz 1766 MHz 6 GHz ARRAY Ø195 mm 262 654 1309 energy only coarse working zone mirror ambiguity
coherent reception (KrakenSDR) wideband receiver (AD9363/HackRF)

The array and the receivers have different limits. A Ø195 mm ring gives a 114.6 mm chord between adjacent elements, and everything else follows from it: below 262 MHz the array is too small and yields energy only; above 1309 MHz the spacing exceeds half a wavelength and a mirror twin appears. So the receivers tune to 1766 MHz but an unambiguous bearing ends at 1309, and we mark such measurements ambiguous rather than passing them off as clean.

Array
Five elements in a Ø195 mm ring; spacing is recomputed on every retune.
Receivers
24-1766 MHz coherent (5 × RTL2832U), plus survey to 6 GHz.
Compute
Processing and cataloguing on the node — a Raspberry Pi 5, running in the field off a power bank.
Link
s.Link — our own PHY and link layer, 872 MHz, ChaCha20-Poly1305 encryption.

Direction finding

A superresolution method
Direction is computed by MUSIC from raw multichannel IQ rather than from signal levels. That keeps the bearing sharp even when several sources share the band.
Phase holds at every frequency
Element spacing against wavelength is recomputed on every retune. This is not a detail: a corrupted value does not raise an error — it quietly fabricates a bearing of 0.0°, and that is a documented field incident here.
Targets wider than the front end
LTE and DVB-T are direction-found despite occupying more bandwidth than the receiver sees at once. Moving sources are tracked, not merely detected.
Two numbers, not one
The raw array angle and the compass bearing are stored separately, together with the heading source and its own accuracy. Confusing the two is the classic cause of mirrored errors, and we separated them at the record level.
Confidence is computed, not assumed
It comes from the eigenvalues of the covariance matrix rather than from amplitude. A weak but clean signal scores high; a strong but smeared one scores low.

The boards we work on

Two boards, one die
The link and the wideband survey live on boards of the same class: XC7Z010, 17 600 logic cells, 80 DSP slices. The stock bitstream already takes 12 456 cells and 72 of 80 DSP — DSP is the pinch that keeps the fast link mode out. The wideband board adds 1 GB DDR3, gigabit networking and a 0.5 ppm temperature-stable oscillator with an external reference input; its driver is unlocked across the full 70 MHz - 6 GHz range.
We read the silicon instead of trusting the label
The vendor describes the wideband board as a 7020. By IDCODE it holds an XC7Z010 — 17 600 LUT and 80 DSP instead of 53 200 and 220. Read three times in a row, through a second independent decoder, and on all three boards of the park including the station one. The difference is not cosmetic: the conclusion that a 4K receiver does not fit this fabric rests on it.
Measured on them, not taken from a datasheet
12 bits give roughly 60 dB of dynamic range. Sustained throughput over the network is about 9 MS/s with typical buffers, so a continuous maximum rate is impossible over any link: capture works in bursts. The nominal 56 MHz belongs to the AD9361; our board negotiates 30.72 MS/s at most and refuses 61.44, 56 and 40 with an error. An early run measured 48-52 MHz flat out of 56 — we kept the smaller of the two numbers in planning, because it comes from the newer run.
What they do not have
No receive LNA in any variant, and above ~2 GHz the front end goes noticeably deaf — the balun is tuned for 2.4 GHz and there is no preselector. Weak targets in the upper bands need an external LNA and a bandpass filter.
The station
A Raspberry Pi 5 — starts by itself, runs off a power bank, lives in the field.
Real-time direction finding
Five-channel coherent reception and MUSIC over a circular array: an azimuth on the source several times a second, with no demodulation of payload. The d/λ ratio is recomputed on every retune — otherwise the bearing would lie with a zero and never complain.
15 scanners
Each one knows what it is looking for in its own band: communications, radar, satellite channels, navigation jamming. Frequency labels come from a single atlas, not from the scanner's own code.
s.Link
Our own encrypted station-to-operator radio: bearings out, commands back. Its own page →
Signature vector analysis
A feature vector — temporal, spectral, structural — is pulled from raw IQ and the emitter type is determined from it. The catalogue recognises a transmitter when it comes back. No demodulation of payload.
Raw IQ capture
Multichannel coherent samples are written to a standard format with provenance metadata — either short event-scoped snippets or a continuous frame archive. The analysis then happens on the ground, as many times as needed.
Over-the-air updates
Cryptographically signed: new frequency plans reach the stations by themselves; code does not.
MeasuredValueWhen
Bearing on an 868.000 CW beacon, spread0.2–1.5° over 90-second legs, 107 bearings22.08 · field
Source proven by frequency selectivity69.6 dB at 868.0 vs ~16 dB either side — a 53.1 dB drop22.08 · field
Beacon moved 0° → 30°the bearing moved +35.9° for a true +30°22.08 · field
Automated tests passing18,542 passed / 44 skipped, 0 red08.09 · test run

These are not plans or intentions: the code is written, the chain closes on the bench, the tests are green. Exactly one thing is missing — a run on the air.

Operator-to-drone range from link timing
Two MUSIC bearings give directions but not distance. A hostile TDD link gives it away for free: the airframe replies after a fixed turnaround, and the excess path length reads off our own clock — no GPS involved. The mathematics is closed by 47 tests. This is the difference between a strike profile and somebody flying over their own treeline.

The station on an airborne carrier

The same receiver, lifted to altitude, works in a different order of ranges — because what changes is geometry, not sensitivity. For a ground-level source the radio horizon follows straight from height:

50 m
29.6 km of line of sight.
100 m
40.1 km — and this is the engineering sweet spot.
150 m
48.1 km with moderate demands on the platform.
200 m
54.9 km — going from 100 to 200 m buys only ~15 km while raising the demands on the carrier far more.
100 m 40 km single km station altitude exaggerated — schematic, not to scale

The other half of the problem is position. A direction finder gains from closing on the line of contact exactly as it gains from altitude: both move the same horizon. Together they take the station from single kilometres into tens.

What is already known about this path, and what it costs

The figures above are geometric line of sight, not a promised bearing range: a confident bearing is planned more conservatively, at roughly half to two thirds of the lesser of the two limits. An airborne carrier also brings problems of its own, which we have already worked through rather than leaving to be discovered in flight: a planar array gives no stable azimuth directly beneath the carrier, one degree of attitude error costs one degree of bearing error, the array centre has to be kept clear of motors and power runs, and baseline runs must be taken separately with the motors off and on.

Recognising an emitter without demodulating it

We determine what kind of transmitter this is from features of the signal — temporal, spectral, structural — rather than from what it carries. This is a matter of principle: the system stays receive-only and needs neither keys nor any right to the payload. That is precisely why it can be placed where a system that demodulates would not be allowed.

Behaviour gives the family away, not modulation

The task is not "recognise ELRS" but to detect the whole family — including variants whose channels and parameters we do not yet know: mLRS forks, MILELRS, Kuznechik, closed Crossfire. So we catch it by the invariants that physics and the chipset dictate, not by a list of known signatures.

Bandwidth of a single burst
0.5-1.6 MHz — the LoRa series are fixed, FLRC is about 1.3 MHz.
Hop rate
Equal to the packet rate, 25-1000 Hz: one hop per frame is the family rule.
Periodicity
Strictly regular. This is control, not data — the interval is constant.
Duplex asymmetry
Bursts downlink, short telemetry uplink — by design.
Channel occupancy
Sparse, a few per cent of the time on channel. That is what separates it from Wi-Fi and LTE.
constant interval — one hop per frame channel grid family behaviour, schematic — not a recording
We retracted one edition of this table ourselves

The invariants first read "chirp or FLRC, not OFDM". For ELRS and mLRS that is true — and as a family trait it is wrong: it cuts out FrSky ACCST/ACCESS, Flysky AFHDS, Futaba FASST, Spektrum DSMX and SiK/RFD900 telemetry. All of them are FHSS with the same burst-level behaviour but on GFSK or DSSS — a detector built on chirp would have missed half the popular fleet.

The family invariant is behaviour, not modulation. Modulation distinguishes a branch within the family, not the family itself.

Modern standards — by preamble structure

A separate detector tells modern standard families apart with three correlators — DVB-T2 P1, 5G NR PSS (three m-sequences per 3GPP TS 38.211) and Wi-Fi. The output is a family, a confidence and a score per correlator. There is no demodulation here either.

What we measure with

Our board's instantaneous window is 30.72 MHz — not the nominal 56, because it accepts no more — and a 65 536-point transform gives a resolution of 469 Hz inside it. The entire hop set of the sub-GHz families fits inside that window, so we measure the channel grid step rather than guessing it: this resolution divides a 525 kHz grid into 1120 cells.

An honest limitation: this works in park mode. In survey mode the dwell is shorter than the hop period — a sweep against FHSS is doomed, and we do not rely on it.

We can show the station working in person. The full technical wiki and the protocol specification are in the data room.