Project description

Description

This program can be used to transmit a specified file between 2 computers, using
a simple audio cable (for better SNR and higher speeds) or a simple headset,
allowing true air-gapped communication (via a speaker and a microphone).

The sender modulates an input binary data file into an 32kHz audio,
which is played to the sound card.

The receiver side records the transmitted audio,
which is demodulated concurrently into an output binary data file.

The process requires a single manual calibration step: the transmitter has to
find maximal output volume for its sound card, which will not saturate the
receiving microphone.

The modem is using OFDM over an audio cable with the following parameters:

Sampling rate: 32 kHz

Baud rate: 1 kHz

Symbol modulation: BPSK, 4-PSK, 16-QAM ,64-QAM, 256-QAM

Carriers: 2-11 kHz

This way, modem may achieve 80kbps bitrate = 10 kB/s (for best SNR).

A simple CRC-32 checksum is used for data integrity verification
on each 250 byte data frame.

Installation

Make sure that numpy and PortAudio v19 packages are installed (on Debian):

If the signal is “too weak”, increase the sender’s output audio level.

If the signal is “too strong”, decrease the sender’s output audio level.

If the signal is “too noisy”, it may be that the noise level is too high
or that the analog signal is being distorted.
Please run the following command during the calibration session,
and send me the resulting audio.raw file for debugging: