Strong preamble detection even with --aggressive.
To try to decode messages with a fundamentally flawed preamble is mostly a useless waste of CPU time. The new aggressive mode still detects a sensible percentage of additional messages because of the error tolerance and two-bits fixes but does not waste your CPU time.
This commit is contained in:
parent
184953ff92
commit
977493cf63
|
@ -195,7 +195,6 @@ sending DF17 packets), but can detect a few more messages.
|
||||||
|
|
||||||
The algorithm in aggressive mode is modified in the following ways:
|
The algorithm in aggressive mode is modified in the following ways:
|
||||||
|
|
||||||
* Preamble detection is weakened to be more liberal in what is consdered valid.
|
|
||||||
* Up to two demodulation errors are tolerated (adjacent entires in the magnitude
|
* Up to two demodulation errors are tolerated (adjacent entires in the magnitude
|
||||||
vector with the same eight). Normally only messages without errors are
|
vector with the same eight). Normally only messages without errors are
|
||||||
checked.
|
checked.
|
||||||
|
|
60
dump1090.c
60
dump1090.c
|
@ -1361,38 +1361,36 @@ void detectModeS(uint16_t *m, uint32_t mlen) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Modes.aggressive) {
|
/* The samples between the two spikes must be < than the average
|
||||||
/* The samples between the two spikes must be < than the average
|
* of the high spikes level. We don't test bits too near to
|
||||||
* of the high spikes level. We don't test bits too near to
|
* the high levels as signals can be out of phase so part of the
|
||||||
* the high levels as signals can be out of phase so part of the
|
* energy can be in the near samples. */
|
||||||
* energy can be in the near samples. */
|
high = (m[j]+m[j+2]+m[j+7]+m[j+9])/6;
|
||||||
high = (m[j]+m[j+2]+m[j+7]+m[j+9])/6;
|
if (m[j+4] >= high ||
|
||||||
if (m[j+4] >= high ||
|
m[j+5] >= high)
|
||||||
m[j+5] >= high)
|
{
|
||||||
{
|
if (Modes.debug & MODES_DEBUG_NOPREAMBLE &&
|
||||||
if (Modes.debug & MODES_DEBUG_NOPREAMBLE &&
|
m[j] > MODES_DEBUG_NOPREAMBLE_LEVEL)
|
||||||
m[j] > MODES_DEBUG_NOPREAMBLE_LEVEL)
|
dumpRawMessage(
|
||||||
dumpRawMessage(
|
"Too high level in samples between 3 and 6",
|
||||||
"Too high level in samples between 3 and 6",
|
msg, m, j);
|
||||||
msg, m, j);
|
continue;
|
||||||
continue;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Similarly samples in the range 11-14 must be low, as it is the
|
/* Similarly samples in the range 11-14 must be low, as it is the
|
||||||
* space between the preamble and real data. Again we don't test
|
* space between the preamble and real data. Again we don't test
|
||||||
* bits too near to high levels, see above. */
|
* bits too near to high levels, see above. */
|
||||||
if (m[j+11] >= high ||
|
if (m[j+11] >= high ||
|
||||||
m[j+12] >= high ||
|
m[j+12] >= high ||
|
||||||
m[j+13] >= high ||
|
m[j+13] >= high ||
|
||||||
m[j+14] >= high)
|
m[j+14] >= high)
|
||||||
{
|
{
|
||||||
if (Modes.debug & MODES_DEBUG_NOPREAMBLE &&
|
if (Modes.debug & MODES_DEBUG_NOPREAMBLE &&
|
||||||
m[j] > MODES_DEBUG_NOPREAMBLE_LEVEL)
|
m[j] > MODES_DEBUG_NOPREAMBLE_LEVEL)
|
||||||
dumpRawMessage(
|
dumpRawMessage(
|
||||||
"Too high level in samples between 10 and 15",
|
"Too high level in samples between 10 and 15",
|
||||||
msg, m, j);
|
msg, m, j);
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Modes.stat_valid_preamble++;
|
Modes.stat_valid_preamble++;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue