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.
§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.
| Peer | Direction | Goodput | Decoded by |
|---|---|---|---|
| Pixel 7a | Mac → Pixel | 36.6 kbps | on-device (Kotlin port) |
| Pixel 7a | Pixel → Mac | 27.3 kbps | reference decoder |
| Pixel 7a | Mac → Pixel | 39.3 kbps | the shipped C library, 16-QAM r¾, 375/375 blocks |
| iPhone 17 Pro Max | Mac → iPhone | 36.57 kbps | on-device (Swift port) |
| iPhone 17 Pro Max | iPhone → Mac | 16.87 kbps | reference 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
- Chirp sync. A 2→16 kHz sweep; a matched filter finds it to within a sample or two.
- Channel estimation. Two known full-band symbols measure the room's response per subcarrier — including the echoes.
- OFDM + cyclic prefix. 2048-point FFT frames with a guard copy so echoes land harmlessly inside the prefix.
- 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).
- Soft decisions. Each 16-QAM point becomes log-likelihood ratios weighted by that subcarrier's measured SNR — a noisy lane whispers instead of lying.
- 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:
- clean placement48 kbps
- reverberant rescued by adaptive cyclic prefix + mic selection~11 kbps
- shadowed rescued by two-microphone combining~5 kbps
- nearly hopeless non-coherent multitone floor68 bps
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.