From cc1b6d136742e5ed402f6b012cccac5103c32886 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Thu, 29 Dec 2016 00:51:14 -0300 Subject: [PATCH] Optimizing RSSI averaging --- DMRDMORX.cpp | 11 +++++------ DMRSlotRX.cpp | 9 ++++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/DMRDMORX.cpp b/DMRDMORX.cpp index a435e94..506e3f6 100644 --- a/DMRDMORX.cpp +++ b/DMRDMORX.cpp @@ -131,12 +131,7 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi) ptr -= DMO_BUFFER_LENGTH_SAMPLES; samplesToBits(ptr, DMR_FRAME_LENGTH_SYMBOLS, frame, 8U, centre, threshold); - -#if defined(SEND_RSSI_DATA) - // Calculate RSSI average over a burst period. We don't take into account 2.5 ms at the beginning and 2.5 ms at the end - rssi_avg = avgRSSI(m_startPtr + DMR_SYNC_LENGTH_SAMPLES / 2U, DMR_FRAME_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES); -#endif - + if (m_control == CONTROL_DATA) { // Data sync uint8_t colorCode; @@ -198,6 +193,8 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi) #if defined(SEND_RSSI_DATA) // Send RSSI data approximately every second if (m_rssiCount == 2U) { + // Calculate RSSI average over a burst period. We don't take into account 2.5 ms at the beginning and 2.5 ms at the end + rssi_avg = avgRSSI(m_startPtr + DMR_SYNC_LENGTH_SAMPLES / 2U, DMR_FRAME_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES); frame[34U] = (rssi_avg >> 8) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU; serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 3U); @@ -233,6 +230,8 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi) #if defined(SEND_RSSI_DATA) // Send RSSI data approximately every second if (m_rssiCount == 2U) { + // Calculate RSSI average over a burst period. We don't take into account 2.5 ms at the beginning and 2.5 ms at the end + rssi_avg = avgRSSI(m_startPtr + DMR_SYNC_LENGTH_SAMPLES / 2U, DMR_FRAME_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES); frame[34U] = (rssi_avg >> 8) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU; serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 3U); diff --git a/DMRSlotRX.cpp b/DMRSlotRX.cpp index 454ccea..91f6b9f 100644 --- a/DMRSlotRX.cpp +++ b/DMRSlotRX.cpp @@ -135,11 +135,6 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi) uint16_t ptr = m_endPtr - DMR_FRAME_LENGTH_SAMPLES + DMR_RADIO_SYMBOL_LENGTH + 1U; samplesToBits(ptr, DMR_FRAME_LENGTH_SYMBOLS, frame, 8U, centre, threshold); -#if defined(SEND_RSSI_DATA) - // Calculate RSSI average over a burst period. We don't take into account 2.5 ms at the beginning and 2.5 ms at the end - rssi_avg = avgRSSI(m_startPtr + DMR_SYNC_LENGTH_SAMPLES / 2U, DMR_FRAME_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES); -#endif - if (m_control == CONTROL_DATA) { // Data sync uint8_t colorCode; @@ -203,6 +198,8 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi) #if defined(SEND_RSSI_DATA) // Send RSSI data approximately every second if (m_rssiCount == 2U) { + // Calculate RSSI average over a burst period. We don't take into account 2.5 ms at the beginning and 2.5 ms at the end + rssi_avg = avgRSSI(m_startPtr + DMR_SYNC_LENGTH_SAMPLES / 2U, DMR_FRAME_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES); frame[34U] = (rssi_avg >> 8) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU; serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 3U); @@ -239,6 +236,8 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi) #if defined(SEND_RSSI_DATA) // Send RSSI data approximately every second if (m_rssiCount == 2U) { + // Calculate RSSI average over a burst period. We don't take into account 2.5 ms at the beginning and 2.5 ms at the end + rssi_avg = avgRSSI(m_startPtr + DMR_SYNC_LENGTH_SAMPLES / 2U, DMR_FRAME_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES); frame[34U] = (rssi_avg >> 8) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU; serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 3U);