aicodix___modem/README.md
2021-07-21 17:15:47 +02:00

58 lines
1.7 KiB
Markdown

### OFDM MODEM
Quick start:
Create file ```uncoded.dat``` with ```43040``` bits of random data:
```
dd if=/dev/urandom of=uncoded.dat bs=1 count=5380
```
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 uncoded.dat
```
Start recording to ```recorded.wav``` audio file and stop after 20 seconds:
```
arecord -c 1 -f S16_LE -r 8000 -d 20 recorded.wav
```
Start playing ```encoded.wav``` audio file:
```
aplay encoded.wav
```
Decode ```recorded.wav``` audio file to ```decoded.dat``` file:
```
./decode decoded.dat recorded.wav
```
Compare original ```uncoded.dat``` with ```decoded.dat```:
```
diff -s uncoded.dat decoded.dat
```
### 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), [AWGN](https://en.wikipedia.org/wiki/Additive_white_Gaussian_noise), [SFO, CFO](https://en.wikipedia.org/wiki/Carrier_frequency_offset), decode and compare:
```
./encode ping.wav 8000 16 2 uncoded.dat 2000 && ../disorders/multipath pong.wav ping.wav ../disorders/multipath.txt 10 && ../disorders/cfo ping.wav pong.wav 234.567 && ../disorders/sfo pong.wav ping.wav 147 && ../disorders/awgn ping.wav pong.wav -30 && ./decode decoded.dat ping.wav && diff -s uncoded.dat decoded.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