From 64af9aa0110496efe187460eaddc20055de73684 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 7 Jan 2021 00:52:50 +0200 Subject: [PATCH] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a09a367..6eb4103 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,9 @@ This library allows you to communicate small amounts of data between air-gapped This library is used only to generate and analyze the RAW waveforms that are played and captured from your audio devices (speakers, microphones, etc.). You are free to use any audio backend (e.g. PulseAudio, ALSA, etc.) as long as you provide callbacks for queuing and dequeuing audio samples. -You can easily test the library using the `waver` application: +## Try it out + +You can easily test the library using the free `Waver` application which is available on the following platforms: Download on the App Store Get it on Google Play @@ -32,6 +34,10 @@ You can easily test the library using the `waver` application: - https://waver.ggerganov.com - https://ggwave.ggerganov.com +## Technical details + +Below is a short summary of the modulation and demodulation algorithm used in `ggwave` for encoding and decoding data into sound. + ### Modulation (Tx) The current approach uses a multi-frequency [Frequency-Shift Keying (FSK)](https://en.wikipedia.org/wiki/Frequency-shift_keying) modulation scheme. The data to be transmitted is first split into 4-bit chunks. At each moment of time, 3 bytes are transmitted using 6 tones - one tone for each 4-bit chunk. The 6 tones are emitted in a 4.5kHz range divided in 96 equally-spaced frequencies: