Engineering

Project 02 / 06

Over-the-Air Acoustic Modem for Text Transmission

A two-author MATLAB project converted short ASCII text into a framed, 3 kHz acoustic waveform and reconstructed it on a receiving laptop using built-in audio hardware. The receiver isolated and aligned an unknown-start packet before deciding bits and rebuilding the message.

Trial 2 — received packet to recovered baseband

Two laptops — over-the-air recordingTrial 2 received-signal plot: a laptop microphone recording contains a distinct transmitted packet between lower-level background signal.
MATLAB time-domain plot labeled Received signal over the air, with a high-energy acoustic packet around the middle of lower-level background signal.
Two laptops — receiver processingTrial 2 recovered baseband after matched-carrier demodulation, low-pass filtering, and trimming.
MATLAB plot labeled Recovered baseband after demodulation and low-pass filtering, showing the trimmed bipolar pulse-like signal used for bit decisions.

In the reported two-laptop Trial 2, HELLO WORLD was recovered with 0 errors over 120 full-frame bits and 0 errors over 88 payload bits. This is one documented observation.

01A text message through an acoustic channel

The project turns a short text message into an audible signal and then reconstructs it from a laptop-microphone recording.

Cooper Robillard and Max Pohl built a MATLAB acoustic modem that converts text to binary data, maps the bits to a baseband waveform, modulates the waveform onto a 3 kHz audio carrier, and plays it through a laptop speaker. A second laptop records the sound, processes it, aligns the bit boundaries, and reconstructs text.

The visible signal pair is Trial 2 evidence of that path. It establishes a received acoustic packet and a recovered baseband stage; it does not by itself establish a range, throughput, noise tolerance, or generalized communications-performance result.

02Framing an audible bitstream

The transmitter used a fixed framing and modulation scheme to make the text message representable as audio.

From characters to passband audio

Each ASCII character occupied eight bits. A known 32-bit preamble, formed by repeating [1 0] sixteen times, was placed before the payload so the receiver could later score candidate symbol alignments.

Each bit became a 10 ms rectangular pulse: +1 for a 1 and −1 for a 0. At the reported 44.1 kHz sampling rate, this produces 441 samples per bit; the bipolar baseband was then multiplied by a 3 kHz cosine carrier, normalized, saved as audio, and played through the laptop speaker.

  • ASCII payload: 8 bits per character.
  • Frame prefix: 32-bit known preamble before the payload.
  • Baseband mapping: +1 / −1 pulses, 10 ms each.
  • Passband path: 3 kHz carrier, normalization, and speaker playback.

Reported passband modulation

The reported cosine carrier c[n] shifts the bipolar baseband b[n] into an audible passband waveform x[n] for speaker playback.

Bipolar baseband pulse train formed from the framed bits.
Cosine carrier generated at the reported carrier frequency.
Carrier frequency, configured as 3 kHz.
Sampling rate, configured as 44.1 kHz.

These are reported implementation settings and relations, not measured throughput, bandwidth, or an optimized parameter selection.

Reported modem configuration
ParameterConfigured valueRole in the documented implementation
Sampling rate44.1 kHzAudio processing rate
Carrier3 kHzCosine modulation carrier
Bit duration10 msRectangular pulse duration
Samples per bit441Samples in each bit interval
Preamble32 bitsKnown prefix for alignment
FIR low-pass filter101 tapsReceiver low-pass filter

These values are reported configuration choices. The 10 ms bit duration must not be reframed as a headline bit-rate or throughput performance claim.

03Recovering timing before recovering text

The receiver must locate the useful packet and choose bit boundaries before it can reconstruct characters.

Receiver path

The MATLAB receiver records 10 seconds of audio, multiplies the recording by the same carrier, and applies a 101-tap FIR low-pass filter. It identifies the start and end of the message from the filtered waveform using a threshold of 0.2 · max|y|, with one bit of padding before trimming.

Because the recording does not arrive with known symbol boundaries, the receiver evaluates candidate offsets up to four bit intervals. For each candidate it compares the first 32 detected bits with the known preamble, considers printable-ASCII plausibility, chooses the highest-scoring alignment, then decides each 441-sample segment by the sign of its mean before grouping bits into ASCII bytes.

04Three documented acoustic trials

The report records one baseline and two two-laptop observations using the same documented modem parameters and HELLO WORLD message.

Reported HELLO WORLD acoustic-trial outcomes
TrialSetupMessage recoveredFull-frame BERPayload-only BER
1Single laptop (baseline)HELLO WORLD0/120 = 0.00000/88 = 0.0000
2Two laptops (intended use)HELLO WORLD0/120 = 0.00000/88 = 0.0000
3Two laptops (final demo run)hELlO WORLD2/120 = 0.01672/88 = 0.0227

Each row is one documented HELLO WORLD observation. Full-frame BER includes the preamble and payload; payload-only BER excludes the preamble. The report compares overlapping transmitted and recovered bitstream portions and documents no repeated-trial statistics, range sweep, or acoustic-channel uncertainty bounds.

Trial 2 decoded output

MATLAB command window from Trial 2 showing HELLO WORLD and zero errors over 120 full-frame bits and 88 payload bits.
Two laptops — one documented zero-error observationTrial 2 MATLAB output: HELLO WORLD was recovered with 0 errors over 120 full-frame bits and 0 errors over 88 payload bits.

The console is direct evidence for Trial 2 only; it does not make a general zero-error claim for the modem.

05What the BER records

The report compares transmitted and recovered bit sequences, while separating frame alignment from message-payload errors.

Trial 2 documented observation

HELLO WORLD; 0/120 full-frame and 0/88 payload errors

The intended two-laptop Trial 2 recovered the reported message with zero recorded errors over its documented frame and payload lengths.

This is one documented trial, not a claim of error-free communication in other runs or conditions.

Trial 3 documented observation

hELlO WORLD; 2/120 full-frame and 2/88 payload errors

The final two-laptop demo retained the phrase but recorded two bit errors, visible as case changes in the recovered message.

The report does not isolate the cause of those specific errors.

The three rows are not a statistical BER, repeatability, noise-resistance, range, latency, packet-loss, or generalized reliability characterization.

The complete three-row table belongs to the test evidence, not a performance dashboard. It preserves the successful Trial 2 observation alongside the imperfect Trial 3 observation so the dossier does not imply universally error-free recovery.