mirror of
https://github.com/aicodix/modem.git
synced 2026-04-27 14:30:34 +00:00
Simple OFDM modem for transceiving datagrams
- cpp 100%
| .gitattributes | ||
| .gitignore | ||
| common.hh | ||
| decode.cc | ||
| encode.cc | ||
| freezer.cc | ||
| LICENSE | ||
| Makefile | ||
| polar_tables.hh | ||
| psk.hh | ||
| qam.hh | ||
| README.md | ||
| schmidl_cox.hh | ||
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 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
These use a differential modulation scheme:
- Mode 0: DBPSK, 3 seconds and 256 bytes
- Mode 1: DQPSK, 3 seconds and 512 bytes
- Mode 2: D8PSK, 4 seconds and 1024 bytes
And these a coherent modulation scheme:
- Mode 3: BPSK, 3 seconds and 256 bytes
- Mode 4: QPSK, 3 seconds and 512 bytes
- Mode 5: QAM16, 1 second and 256 bytes
- Mode 6: QAM16, 3 seconds and 1024 bytes
- Mode 7: QAM64, 4 seconds and 2048 bytes
Simulating
Prerequisite: disorders
Encode uncoded.dat to analytic audio signal, add multipath, CFO, SFO, AWGN, 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 - - -20 | ./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