Some more technical details:
I am using 4 carrier frequencies (8, 9, 10 and 11 kHz), which are modulated using QPSK-4 (yielding 2 bits per symbol).
Each symbol duration is 1ms, so the bitrate of the modem is 8[kbps] = 2[bit/symbol] * 1000[symbol/second] * 4 (carriers).
The symbols' constellations are shown here:
http://i.imgur.com/JAbGkIt.png. They can be plotted using:
$ source env/bin/activate
$ pip install matplotlib
$ PYLAB=1 python recv.py
Carrier detected at ~2242.0 ms @ 10.0 kHz: coherence=99.411%, amplitude=0.400
Carrier starts at 2241.688 ms
Prefix OK
Frequency error: 1.52 ppm
8.0 kHz: Noise sigma=0.0790, SNR=22.0 dB
9.0 kHz: Noise sigma=0.0407, SNR=27.8 dB
10.0 kHz: Noise sigma=0.0348, SNR=29.2 dB
11.0 kHz: Noise sigma=0.0288, SNR=30.8 dB
Decoded 5 blocks = 1150 bytes (ECC overhead 9.8%)
Decoded 1024 bytes
$ python errors.py data.send data.recv
0/8192 bit error rate: 0.000%
Note that the noise is higher on lower frequencies, probably due to "pink noise" (
http://en.wikipedia.org/wiki/Pink_noise).
The received signal waveform and spectrogram are given here:
http://i.imgur.com/JMuRbAZ.png.
They can be plotted using (after matplotlib package is installed):
$ python show.py rx.int16
By the way, is the BTC bounty still open?
