### OFDM MODEM Quick start: Create file ```uncoded.dat``` with ```2048``` bits of random data: ``` dd if=/dev/urandom of=uncoded.dat bs=1 count=256 ``` Encode file ```uncoded.dat``` to ```encoded.wav``` [WAV](https://en.wikipedia.org/wiki/WAV) audio file with 8000 Hz sample rate, 16 bits and only 1 (real) channel: ``` ./encode encoded.wav 8000 16 1 1500 5 uncoded.dat ``` Start recording to ```recorded.wav``` audio file and stop after 5 seconds: ``` arecord -c 1 -f S16_LE -r 8000 -d 5 recorded.wav ``` Start playing ```encoded.wav``` audio file: ``` aplay encoded.wav ``` Decode ```recorded.wav``` audio file to ```decoded.dat``` file: ``` ./decode recorded.wav decoded.dat ``` Compare original ```uncoded.dat``` with ```decoded.dat```: ``` diff -s uncoded.dat decoded.dat ``` ### Supported Modes All modes need a bandwidth of 2000 Hz and use a 1/2-rate forward error correction code * Mode 1: QPSK, 1.02 seconds and 128 bytes * Mode 2: QPSK, 1.70 seconds and 256 bytes * Mode 3: QPSK, 3.06 seconds and 512 bytes * Mode 4: QPSK, 5.78 seconds and 1024 bytes * Mode 5: QAM16, 1.02 seconds and 256 bytes * Mode 6: QAM16, 1.70 seconds and 512 bytes * Mode 7: QAM16, 3.06 seconds and 1024 bytes * Mode 8: QAM16, 5.78 seconds and 2048 bytes * Mode 9: QAM64, 2.21 seconds and 1024 bytes * Mode 10: QAM64, 4.08 seconds and 2048 bytes * Mode 11: QAM64, 7.82 seconds and 4096 bytes * Mode 12: QAM256, 1.02 seconds and 512 bytes * Mode 13: QAM256, 1.70 seconds and 1024 bytes * Mode 14: QAM256, 3.06 seconds and 2048 bytes * Mode 15: QAM256, 5.78 seconds and 4096 bytes ### Simulating Prerequisite: [disorders](https://github.com/aicodix/disorders) Encode ```uncoded.dat``` to [analytic](https://en.wikipedia.org/wiki/Analytic_signal) audio signal, add [multipath](https://en.wikipedia.org/wiki/Multipath_propagation), [CFO, SFO](https://en.wikipedia.org/wiki/Carrier_frequency_offset), [AWGN](https://en.wikipedia.org/wiki/Additive_white_Gaussian_noise), decode and compare: ``` ./encode - 8000 16 2 1500 5 uncoded.dat | ../disorders/multipath - - ../disorders/multipath.txt 10 | ../disorders/cfo - - 234.567 | ../disorders/sfo - - 147 | ../disorders/awgn - - -30 | ./decode - - | diff -q -s uncoded.dat - ``` ### Reading * Robust frequency and timing synchronization for OFDM by Timothy M. Schmidl and Donald C. Cox - 1997 * On Timing Offset Estimation for OFDM Systems by H. Minn, M. Zeng, and V. K. Bhargava - 2000