* dynamic noise floor sampling

This commit is contained in:
Scott Powell 2025-05-25 21:44:15 +10:00
parent f2243b78ae
commit 0e35ae5ec6
4 changed files with 33 additions and 5 deletions

View file

@ -35,7 +35,7 @@ void RadioLibWrapper::begin() {
setFlag(); // LoRa packet is already received
}
_noise_floor = -140;
_noise_floor = 0;
// start average out some samples
_num_floor_samples = 0;
@ -47,13 +47,23 @@ void RadioLibWrapper::idle() {
state = STATE_IDLE; // need another startReceive()
}
void RadioLibWrapper::triggerNoiseFloorCalibrate() {
if (_num_floor_samples >= NUM_NOISE_FLOOR_SAMPLES) { // ignore trigger if currently sampling
_num_floor_samples = 0;
_floor_sample_sum = 0;
}
}
void RadioLibWrapper::loop() {
if (state == STATE_RX && _num_floor_samples < NUM_NOISE_FLOOR_SAMPLES) {
if (!isReceivingPacket()) {
_num_floor_samples++;
_floor_sample_sum += getCurrentRSSI();
int rssi = getCurrentRSSI();
if (rssi < _noise_floor + INTERFERENCE_THRESHOLD_DB) { // only consider samples below current floor+THRESHOLD
_num_floor_samples++;
_floor_sample_sum += rssi;
}
}
} else if (_floor_sample_sum != 0) {
} else if (_num_floor_samples >= NUM_NOISE_FLOOR_SAMPLES && _floor_sample_sum != 0) {
_noise_floor = _floor_sample_sum / NUM_NOISE_FLOOR_SAMPLES;
_floor_sample_sum = 0;