Optimizing RSSI averaging

This commit is contained in:
Andy CA6JAU 2016-12-29 00:51:14 -03:00
parent 2ff955631f
commit cc1b6d1367
2 changed files with 9 additions and 11 deletions

View File

@ -132,11 +132,6 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
samplesToBits(ptr, DMR_FRAME_LENGTH_SYMBOLS, frame, 8U, centre, threshold); 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) { if (m_control == CONTROL_DATA) {
// Data sync // Data sync
uint8_t colorCode; uint8_t colorCode;
@ -198,6 +193,8 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
#if defined(SEND_RSSI_DATA) #if defined(SEND_RSSI_DATA)
// Send RSSI data approximately every second // Send RSSI data approximately every second
if (m_rssiCount == 2U) { 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[34U] = (rssi_avg >> 8) & 0xFFU;
frame[35U] = (rssi_avg >> 0) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU;
serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 3U); 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) #if defined(SEND_RSSI_DATA)
// Send RSSI data approximately every second // Send RSSI data approximately every second
if (m_rssiCount == 2U) { 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[34U] = (rssi_avg >> 8) & 0xFFU;
frame[35U] = (rssi_avg >> 0) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU;
serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 3U); serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 3U);

View File

@ -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; uint16_t ptr = m_endPtr - DMR_FRAME_LENGTH_SAMPLES + DMR_RADIO_SYMBOL_LENGTH + 1U;
samplesToBits(ptr, DMR_FRAME_LENGTH_SYMBOLS, frame, 8U, centre, threshold); 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) { if (m_control == CONTROL_DATA) {
// Data sync // Data sync
uint8_t colorCode; uint8_t colorCode;
@ -203,6 +198,8 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
#if defined(SEND_RSSI_DATA) #if defined(SEND_RSSI_DATA)
// Send RSSI data approximately every second // Send RSSI data approximately every second
if (m_rssiCount == 2U) { 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[34U] = (rssi_avg >> 8) & 0xFFU;
frame[35U] = (rssi_avg >> 0) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU;
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 3U); 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) #if defined(SEND_RSSI_DATA)
// Send RSSI data approximately every second // Send RSSI data approximately every second
if (m_rssiCount == 2U) { 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[34U] = (rssi_avg >> 8) & 0xFFU;
frame[35U] = (rssi_avg >> 0) & 0xFFU; frame[35U] = (rssi_avg >> 0) & 0xFFU;
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 3U); serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 3U);