2026 / Systems and signal processing
Acoustic Modem
A half-duplex Python modem that sends text between laptops using only speakers, microphones, FSK tones, and a UART-like framing protocol.
This project is a proof-of-concept acoustic data link: text typed on one laptop is encoded as sound, played through the speakers, captured by another laptop’s microphone, and decoded back into text.
The modem uses a six-tone FSK scheme. Four tones encode dibits, while dedicated START and STOP tones provide framing so data symbols cannot be confused with frame boundaries. The receiver measures target frequency energy with the Goertzel algorithm and uses a state machine to move through preamble detection, character reading, and inter-character waiting.
Engineering Notes
- Maintained oscillator phase across symbol boundaries to remove audible discontinuities.
- Added receiver gating with SNR thresholds, noise-floor checks, and stable preamble detection.
- Made timing chunk-count based so live microphone mode and in-memory loopback tests behave consistently.
- Added diagnostic tools for tuning microphone thresholds and inspecting per-frequency signal quality.
The result is intentionally slow and simple, but it is a good exercise in protocol design, audio signal processing, state machines, and deterministic testing.