mirror of
https://github.com/aicodix/modem.git
synced 2026-04-27 22:35:41 +00:00
74 lines
2.1 KiB
Markdown
Vendored
74 lines
2.1 KiB
Markdown
Vendored
|
|
### 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 48000 Hz sample rate, 16 bits and only 1 (real) channel:
|
|
|
|
```
|
|
./encode encoded.wav 48000 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 48000 -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 2400 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](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 - 48000 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
|
|
|