Transmit data over audio.
This project was created primarily for me to learn and understand the concepts of digital communications.
If you are looking for a mature digital signal processing library take a look at liquid-dsp or quiet instead. Although, it does appear at least equal to the efficacy of quiet-js
cargo run --release --bin transceiver_cli -- <OPTIONS>
The cli has help information if -h
or --help
or help
are used as options.
cargo run --release --bin transceiver_gui -F gui
The gui has help information on hover.
Hosted demo at https://easyoakland.github.io/audio-network-interface/
To run locally: Install trunk
then run
trunk serve --release
. You may need to install wasm-opt first.
The gui has help information on hover.
- Physical layer
- On Off Keyed (OOK) Frequency division multiplexing (FDM)
- Forward error correction
- Reed solomon
- Parity checks
- Hamming codes
- 74
- 84
- Convolutional/Viterbi
- Cyclic redundancy check CRC-32
- Orthogonal FDM (OFDM)
- Cyclic prefix
- Multiple frames
- Multiple contiguous frames
- Multiple non-contiguous frames
- Coarse timing estimation
- Autocorrelation
- Cross-correlation
- Precise timing estimation
- Pilot Symbol
- Pilot Channel
- Quadrature Phase Shift Keying (QPSK)
- bpsk (2 point)
- qpsk (4 point)
- n point
- Quadrature Amplitude Modulation (QAM)
- 2 point
- 4 point
- n point
- Different sampling frequency of transmitter vs receiver
- Realtime
- Faster than realtime but don't yet have option to decode direct from microphone.
- From file
- Interface
- Command line interface (cli)
- Native gui
- WASM static website
- Note: Not great because poor AudioWorklet and/or Multithreading in Wasm support. The single-threaded implementation in cpal is sometimes too choppy/imprecise causing phase to rapidly become incorrect. Also see here for a good summary of the state of things.
- Local server.
- Public site.
- Operating system network interface/adapter