2019-05-20 19:05:05 +00:00
|
|
|
|
|
|
|
## Radiosonde decoders
|
|
|
|
|
|
|
|
alternative decoders using cross-correlation for better header-synchronization
|
|
|
|
|
|
|
|
#### Files
|
|
|
|
|
|
|
|
* `demod_mod.c`, `demod_mod.h`, <br />
|
2021-10-27 21:32:17 +00:00
|
|
|
`rs41mod.c`, `rs92mod.c`, `dfm09mod.c`, `m10mod.c`, `lms6mod.c`, `lms6Xmod.c`, `meisei100mod.c`, `imet54mod.c`, `mp3h1mod.c`,<br />
|
2019-05-20 19:05:05 +00:00
|
|
|
`bch_ecc_mod.c`, `bch_ecc_mod.h`
|
|
|
|
|
|
|
|
#### Compile
|
|
|
|
`gcc -c demod_mod.c` <br />
|
|
|
|
`gcc -c bch_ecc_mod.c` <br />
|
|
|
|
`gcc rs41mod.c demod_mod.o bch_ecc_mod.o -lm -o rs41mod` <br />
|
|
|
|
`gcc dfm09mod.c demod_mod.o -lm -o dfm09mod` <br />
|
|
|
|
`gcc m10mod.c demod_mod.o -lm -o m10mod` <br />
|
2021-01-31 21:51:56 +00:00
|
|
|
`gcc imet54mod.c demod_mod.o -lm -o imet54mod` <br />
|
2019-12-11 16:09:03 +00:00
|
|
|
`gcc lms6Xmod.c demod_mod.o bch_ecc_mod.o -lm -o lms6Xmod` <br />
|
|
|
|
`gcc meisei100mod.c demod_mod.o bch_ecc_mod.o -lm -o meisei100mod` <br />
|
2021-10-27 21:32:17 +00:00
|
|
|
`gcc rs92mod.c demod_mod.o bch_ecc_mod.o -lm -o rs92mod` (needs `RS/rs92/nav_gps_vel.c`) <br />
|
|
|
|
`gcc mp3h1mod.c demod_mod.o -lm -o mp3h1mod`
|
2019-05-20 19:05:05 +00:00
|
|
|
|
|
|
|
#### Usage/Examples
|
2020-01-24 23:22:03 +00:00
|
|
|
`./rs41mod --ecc2 -vx --ptu <audio.wav>` <br />
|
|
|
|
`./dfm09mod --ecc -v --ptu <audio.wav>` (add `-i` for dfm06; or use `--auto`) <br />
|
2019-05-20 19:05:05 +00:00
|
|
|
`./m10mod --dc -vv --ptu -c <audio.wav>` <br />
|
2019-12-11 16:09:03 +00:00
|
|
|
`./lms6Xmod --vit --ecc -v <audio.wav>` <br />
|
2019-05-20 19:05:05 +00:00
|
|
|
|
2020-01-24 23:22:03 +00:00
|
|
|
IQ data:<br />
|
|
|
|
If the IQ data is downsampled and centered (IF band), use <br />
|
|
|
|
`./rs41mod --iq2 <iq_data.wav>` <br />
|
|
|
|
or with lowpass filter <br />
|
2021-10-27 21:32:17 +00:00
|
|
|
`./rs41mod --iq2 --lpIQ <iq_data.wav>` <br />
|
2020-01-24 23:22:03 +00:00
|
|
|
For baseband IQ data, use
|
2021-10-27 21:32:17 +00:00
|
|
|
`./rs41mod --IQ <fq> --lpIQ <iq_data.wav>` <br />
|
2020-01-24 23:22:03 +00:00
|
|
|
where `<fq>` is the relative frequency in `-0.5 .. 0.5`;
|
|
|
|
e.g. if the receiver is tuned to 403MHz and the (complex) sample rate is 2MHz,
|
|
|
|
a signal at 402.5MHz would be -0.5MHz off, i.e. `<fq> = -0.5/2 = -0.25`. <br />
|
|
|
|
For IQ data (i.e. 2 channels) it is possible to read raw data (without wav header): <br />
|
|
|
|
`./rs41mod --IQ <fq> - <sr> <bs> <iq_data.raw>` <br />
|
|
|
|
`<sr>`: sample rate <br />
|
|
|
|
`<bs>=8,16,32`: bits per (real) sample (u8, s16 or f32)
|
2019-05-20 19:05:05 +00:00
|
|
|
|
2020-05-05 19:00:01 +00:00
|
|
|
#### Remarks
|
|
|
|
FM-demodulation is sensitive to noise at higher frequencies. A narrow low-pass filter is needed before demodulation.
|
|
|
|
For weak signals and higher modulation indices IQ-decoding is usually better.
|
|
|
|
<br />
|
|
|
|
|
|
|
|
DFM:<br />
|
|
|
|
The high modulation index has advantages in IQ-decoding. <br />
|
|
|
|
`--ecc2` uses soft decision for 2-error words. If weak signals frequently produce errors, it is likely that
|
|
|
|
more than 2 errors occur in a received word. Since there is no additional frame protection (e.g. CRC), the
|
|
|
|
frames will not be decoded reliably in weak conditions. The `--dist` option has a thredshold for the number
|
|
|
|
of errors per packet.
|
|
|
|
<br />
|
|
|
|
|
|
|
|
LMS6-403:<br />
|
|
|
|
`lms6Xmod_soft.c` (testing) provides a soft viterbi decoding option `--vit2`;
|
|
|
|
IQ-decoding is recommended for soft decoding (noisy/spikey FM-signals don't always help soft decision).
|
|
|
|
The difference between hard and soft viterbi becomes only apparent at lower SNR. The inner convolutional
|
|
|
|
code does most of the error correction. The concatenated outer Reed-Solomon code kicks in only at low SNR.
|
|
|
|
|
2020-06-14 12:43:47 +00:00
|
|
|
soft input:<br />
|
|
|
|
Option `--softin` expects float32 symbols as input, with `s>0` corresponding to `bit=1`.<br />
|
|
|
|
(remark/caution: often soft bits are defined as `bit=0 -> s=+1` and `bit=1 -> s=-1` such that the identity element `0`
|
|
|
|
for addition mod 2 corresponds to the identity element `+1` for multiplication.)
|
|
|
|
|
2020-05-05 19:00:01 +00:00
|
|
|
|