Skip to content

Easyoakland/audio-network-interface

Repository files navigation

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

Usage

Usage Instructions Overview

Run Instructions

Cli

cargo run --release --bin transceiver_cli -- <OPTIONS>

The cli has help information if -h or --help or help are used as options.

Native Gui

cargo run --release --bin transceiver_gui -F gui

The gui has help information on hover.

Wasm Gui

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.

Goals/Roadmap

  • 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