Source: W1700K SDR, by h0m3us3r
The w1700k-sdr project turns a Gemtek W1700K Wi-Fi 7 router into a 320 Msps radio receiver. At that rate the samples need about 3% more than its 10 GbE port carries. The radio’s own cores pack away bits no sample uses, and the stream fits.
Each sample pair is an I value and a Q value, 16 bits each: 32 bits per pair. 320 million pairs a second × 32 bits is 1.28 GB/s from the radio. One 10 GbE link carries about 1.24 GB/s of payload.
The usual fixes cost data. A lower sample rate shows less of the band. Dropped packets leave gaps in the stream.
Packing every chunk is not needed. Packing half of them, 8 of every 16, brings the stream under the link.
The capture engine writes 14-bit I/Q into a ring over 1 MiB of the radio’s on-chip memory.
The producer follows the capture pointer and publishes 8 KiB chunks.
At 320 Msps the WM packs 4 and the WA packs 4 of every 16 chunks to 7 KiB each.
DMA writes into one 1 GiB ring of 131,072 × 8 KiB slices. It absorbs short stalls, about 0.8 s at full rate.
Every slice leaves as one UDP datagram, zero-copy, on the 10 GbE port.
The host unpacks, tags any gaps, and serves complex int16 samples to every consumer.
Samples flow down; the filled diamond is where half the chunks shrink.
| Situation | Lesson | Rule now |
|---|---|---|
| 1.28 GB/s into ~1.24 GB/s | Values stored wider than their precision waste the pipe. | Before paying for a bigger pipe, count the bits each value uses and the bits it is stored in. |
| Half the chunks packed | Pack only as much as the link needs. | Measure the gap, then close it, not more. |
The project: h0m3us3r/w1700k-sdr on GitHub, with its README, docs/architecture.md and firmware README.
Sources: every number is from the h0m3us3r/w1700k-sdr README, docs/architecture.md (“Throughput”) and firmware/README.md.