Noise floor measurement is too expensive to be worth it, disable it.
This commit is contained in:
parent
dc8891e0ba
commit
4fb607a826
16
demod_2400.c
16
demod_2400.c
|
@ -19,6 +19,12 @@
|
||||||
|
|
||||||
#include "dump1090.h"
|
#include "dump1090.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Measuring the noise power is actually surprisingly expensive on an ARM -
|
||||||
|
// it increases the CPU use of the demodulator by 1/3. So it's off by default.
|
||||||
|
// You can turn it back on here:
|
||||||
|
#undef MEASURE_NOISE
|
||||||
|
|
||||||
// 2.4MHz sampling rate version
|
// 2.4MHz sampling rate version
|
||||||
//
|
//
|
||||||
// When sampling at 2.4MHz we have exactly 6 samples per 5 symbols.
|
// When sampling at 2.4MHz we have exactly 6 samples per 5 symbols.
|
||||||
|
@ -153,14 +159,18 @@ void demodulate2400(uint16_t *m, uint32_t mlen) {
|
||||||
struct modesMessage mm;
|
struct modesMessage mm;
|
||||||
unsigned char msg1[MODES_LONG_MSG_BYTES], msg2[MODES_LONG_MSG_BYTES], *msg;
|
unsigned char msg1[MODES_LONG_MSG_BYTES], msg2[MODES_LONG_MSG_BYTES], *msg;
|
||||||
uint32_t j;
|
uint32_t j;
|
||||||
|
#ifdef MEASURE_NOISE
|
||||||
uint32_t last_message_end = 0;
|
uint32_t last_message_end = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned char *bestmsg;
|
unsigned char *bestmsg;
|
||||||
int bestscore, bestphase;
|
int bestscore, bestphase;
|
||||||
|
|
||||||
|
#ifdef MEASURE_NOISE
|
||||||
// noise floor:
|
// noise floor:
|
||||||
uint32_t noise_power_count = 0;
|
uint32_t noise_power_count = 0;
|
||||||
uint64_t noise_power_sum = 0;
|
uint64_t noise_power_sum = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
memset(&mm, 0, sizeof(mm));
|
memset(&mm, 0, sizeof(mm));
|
||||||
msg = msg1;
|
msg = msg1;
|
||||||
|
@ -172,6 +182,7 @@ void demodulate2400(uint16_t *m, uint32_t mlen) {
|
||||||
int initial_phase, first_phase, last_phase, try_phase;
|
int initial_phase, first_phase, last_phase, try_phase;
|
||||||
int msglen;
|
int msglen;
|
||||||
|
|
||||||
|
#ifdef MEASURE_NOISE
|
||||||
// update noise for all samples that aren't part of a message
|
// update noise for all samples that aren't part of a message
|
||||||
// (we don't know if m[j] is or not, yet, so work one sample
|
// (we don't know if m[j] is or not, yet, so work one sample
|
||||||
// in arrears)
|
// in arrears)
|
||||||
|
@ -182,6 +193,7 @@ void demodulate2400(uint16_t *m, uint32_t mlen) {
|
||||||
noise_power_sum += s * s;
|
noise_power_sum += s * s;
|
||||||
noise_power_count++;
|
noise_power_count++;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Look for a message starting at around sample 0 with phase offset 3..7
|
// Look for a message starting at around sample 0 with phase offset 3..7
|
||||||
|
|
||||||
|
@ -462,14 +474,18 @@ void demodulate2400(uint16_t *m, uint32_t mlen) {
|
||||||
// where the preamble of the second message clobbered the last
|
// where the preamble of the second message clobbered the last
|
||||||
// few bits of the first message, but the message bits didn't
|
// few bits of the first message, but the message bits didn't
|
||||||
// overlap)
|
// overlap)
|
||||||
|
#ifdef MEASURE_NOISE
|
||||||
last_message_end = j + (8 + msglen)*12/5;
|
last_message_end = j + (8 + msglen)*12/5;
|
||||||
|
#endif
|
||||||
j += (8 + msglen - 8)*12/5 - 1;
|
j += (8 + msglen - 8)*12/5 - 1;
|
||||||
|
|
||||||
// Pass data to the next layer
|
// Pass data to the next layer
|
||||||
useModesMessage(&mm);
|
useModesMessage(&mm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MEASURE_NOISE
|
||||||
Modes.stats_current.noise_power_sum += (noise_power_sum / MAX_POWER / noise_power_count);
|
Modes.stats_current.noise_power_sum += (noise_power_sum / MAX_POWER / noise_power_count);
|
||||||
Modes.stats_current.noise_power_count ++;
|
Modes.stats_current.noise_power_count ++;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue