kopia lustrzana https://github.com/rs1729/RS
soft decoding: info update
rodzic
dc9a90cac3
commit
e8c78b8f63
|
@ -40,3 +40,23 @@ alternative decoders using cross-correlation for better header-synchronization
|
|||
`<sr>`: sample rate <br />
|
||||
`<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.
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Plik binarny nie jest wyświetlany.
Ładowanie…
Reference in New Issue