soft decoding: info update

pull/27/head
Zilog80 2020-05-05 21:00:01 +02:00
rodzic dc9a90cac3
commit e8c78b8f63
4 zmienionych plików z 32 dodań i 2 usunięć

Wyświetl plik

@ -40,3 +40,23 @@ alternative decoders using cross-correlation for better header-synchronization
&nbsp;&nbsp;&nbsp;&nbsp; `<sr>`: sample rate <br />
&nbsp;&nbsp;&nbsp;&nbsp; `<bs>=8,16,32`: bits per (real) sample (u8, s16 or f32)
#### 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.

Wyświetl plik

@ -1242,11 +1242,15 @@ int main(int argc, char **argv) {
if (option_iq >= 2) {
float bl = -1;
if (option_iq > 2) bl = 4.0;
bitQ = read_softbit(&dsp, &hsbit, 0/*gpx.option.inv*/, bitofs, bitpos, bl, 0);
bitQ = read_softbit(&dsp, &hsbit, 0, bitofs, bitpos, bl, 0);
}
else {
bitQ = read_softbit(&dsp, &hsbit, 0/*gpx.option.inv*/, bitofs, bitpos, -1, spike);
bitQ = read_softbit(&dsp, &hsbit, 0, bitofs, bitpos, -1, spike);
}
// optional:
// normalize soft bit s_j by
// rhsbit.sb /= dsp._spb+1; // all samples in [-1,+1]
}
if ( bitQ == EOF ) { frm = nfrms; break; } // liest 2x EOF

Wyświetl plik

@ -1246,6 +1246,12 @@ int main(int argc, char **argv) {
bitQ = read_softbit(&dsp, &rhsbit, 0, bitofs, bitpos, -1, 0); // symlen=1
if (bitQ == EOF) { break; }
// optional:
// normalize soft bit s_j by
// rhsbit.sb /= dsp._spb+1; // all samples in [-1,+1]
// or at the end by max|s_j| over all bits in rawframe
// (only if |sj| >> 1 by factor 100)
hsbit.hb = rhsbit.hb ^ (bc%2); // (c0,inv(c1))
int sgn = -2*(((unsigned int)bc)%2)+1;
hsbit.sb = sgn * rhsbit.sb;

BIN
ecc/ecc_hamming.pdf 100644

Plik binarny nie jest wyświetlany.