cyrinx

Acoustic data link · measured over the air

Your laptop can talk
to your phone.
Out loud.

Cyrinx is a research modem that moves real data through the air as sound — from an ordinary laptop speaker to an ordinary phone microphone. No radio, no pairing, no network. Measured, byte-verified goodput: 36.6 kbps MacBook → Pixel 7a, and 39.3 kbps decoded by the shipped C library itself.

One transmitted frame 48 kHz · OFDM, NFFT 2048 · 1.1–23 kHz · 16-QAM r¾ · K=7 Viterbi · CRC-32/block
This is the actual frame structure, synthesized in your browser. It sounds like a chirp and a breath of static — that static is the data.

§1 Measured results

Every number below is ordered byte-verified goodput: a block counts only if its CRC-32 passes and its bytes match the transmitted payload at the same position — and the clock runs across everything (preambles, pilots, FEC, CRCs, gaps). Bench: MacBook Pro M4 transmitting and receiving in ordinary rooms, phone resting near the palm rest.

Measured over-the-air goodput by device pair and direction
PeerDirectionGoodputDecoded by
Pixel 7aMac → Pixel36.6 kbpson-device (Kotlin port)
Pixel 7aPixel → Mac27.3 kbpsreference decoder
Pixel 7aMac → Pixel39.3 kbpsthe shipped C library, 16-QAM r¾, 375/375 blocks
iPhone 17 Pro MaxMac → iPhone36.57 kbpson-device (Swift port)
iPhone 17 Pro MaxiPhone → Mac16.87 kbpsreference decoder (iPhone speaker is band-limited)

For scale: the fastest dial-up modems reached 56 kbps over a copper phone line. This is more than half of that, through open air, on hardware that was never designed for it.

§2 How it works

In plain terms

Sound is pressure waves; a speaker can shape them and a microphone can read them. Cyrinx splits the audible spectrum into hundreds of narrow slices (like lanes on a highway) and wiggles the phase and loudness of each lane a little bit, many times per second. Each wiggle carries a few bits. A sharp rising chirp at the start tells the receiver exactly when to start listening, and known reference tones let it learn how the room distorts each lane so it can undo the damage.

The signal path

  1. Chirp sync. A 2→16 kHz sweep; a matched filter finds it to within a sample or two.
  2. Channel estimation. Two known full-band symbols measure the room's response per subcarrier — including the echoes.
  3. OFDM + cyclic prefix. 2048-point FFT frames with a guard copy so echoes land harmlessly inside the prefix.
  4. Pilot tracking. Every 8th subcarrier carries a known tone; per-symbol phase and timing drift are fitted and removed (the two devices' sample clocks disagree by ~25 ppm — ignore that and the constellation spins).
  5. Soft decisions. Each 16-QAM point becomes log-likelihood ratios weighted by that subcarrier's measured SNR — a noisy lane whispers instead of lying.
  6. FEC + verification. A K=7 convolutional code with soft Viterbi decoding repairs the survivors; CRC-32 per 256-byte block accepts nothing on faith.

Why not just crank up the constellation?

Because the transducers lie. The raw channel measures ~52 dB SNR, but the speaker-air-microphone chain has an effective error floor around EVM 0.15 (~15 dB SINR) that no amount of volume fixes. 16-QAM rides comfortably above it; 64-QAM drowns — measured 0 of 339 blocks at EVM 0.173. Drag the slider to see the difference on the constellation.

§3 It degrades. It doesn't die.

Acoustic channels are moody: move the phone six inches and a clean 48 kbps cell becomes a reverberant mess. A naive receiver simply collapses. Cyrinx is built to lose gracefully — measured across placements on the same bench:

The rescue that matters most: maximal-ratio combining across the laptop's two microphones. The mics sit far apart, so the room's dead spots differ between them; combining per subcarrier fills each mic's nulls with the other's signal. In the worst measured placement, neither microphone could decode a single block alone — combined, 8 of 11 blocks came through. That path now ships in the portable C library, pinned by cross-implementation test vectors.

And when even that fails, a non-coherent multitone floor mode — energy detection with symbols longer than the echo tail, now Reed–Solomon-coded — keeps a trickle flowing where phase-coherent modems get nothing at all. Slow is a mode. Silence is a failure.

§4 Standing on prior art

Data-over-sound is a well-trodden field, and Cyrinx borrows its techniques gladly — OFDM, pilot tracking, convolutional codes are textbook material.

minimodem
the classic audio FSK software modem — Bell-era protocols, kilobit rates.
ggwave
compact FSK data-over-sound for short messages; widely embedded.
Quiet
OFDM/GMSK modem library for sound, the closest open-source relative.
Chirp / LISNR
commercial acoustic data transfer for payments and pairing.
Google Nearby
used near-ultrasonic tokens for device discovery.

What Cyrinx adds is the measurement discipline: end-to-end byte-verified throughput on named consumer hardware, a catalog of the four physical-layer defects that actually limited the link, a published log of negative findings so dead ends stay dead, and a receiver architecture whose graceful-degradation claims were demonstrated placement by placement — then ported into a portable C core that reproduces the headline number itself.

§5 Read the paper, run the code