diff --git a/IO.cpp b/IO.cpp index 47dd8c5..7508bf5 100644 --- a/IO.cpp +++ b/IO.cpp @@ -334,10 +334,10 @@ void CIO::process() } if (m_p25Enable) { - q15_t C4FSKVals[RX_BLOCK_SIZE]; - ::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, C4FSKVals, RX_BLOCK_SIZE); + q15_t P25Vals[RX_BLOCK_SIZE]; + ::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, P25Vals, RX_BLOCK_SIZE); - p25RX.samples(C4FSKVals, rssi, RX_BLOCK_SIZE); + p25RX.samples(P25Vals, rssi, RX_BLOCK_SIZE); } if (m_nxdnEnable) { diff --git a/NXDNRX.cpp b/NXDNRX.cpp index eab67dd..e9bd41b 100644 --- a/NXDNRX.cpp +++ b/NXDNRX.cpp @@ -23,9 +23,10 @@ const q15_t SCALING_FACTOR = 18750; // Q15(0.55) -const uint8_t MAX_FSW_BIT_ERRS = 1U; +const uint8_t MAX_FSW_BIT_START_ERRS = 1U; +const uint8_t MAX_FSW_BIT_RUN_ERRS = 3U; -const uint8_t MAX_FSW_SYMBOLS_ERRS = 1U; +const uint8_t MAX_FSW_SYMBOLS_ERRS = 2U; const uint8_t BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; @@ -255,11 +256,17 @@ bool CNXDNRX::correlateFSW() uint8_t sync[NXDN_FSW_BYTES_LENGTH]; samplesToBits(startPtr, NXDN_FSW_LENGTH_SYMBOLS, sync, 0U, m_centreVal, m_thresholdVal); - uint8_t errs = 0U; + uint8_t maxErrs; + if (m_state == NXDNRXS_NONE) + maxErrs = MAX_FSW_BIT_START_ERRS; + else + maxErrs = MAX_FSW_BIT_RUN_ERRS; + + uint8_t errs = 0U; for (uint8_t i = 0U; i < NXDN_FSW_BYTES_LENGTH; i++) errs += countBits8((sync[i] & NXDN_FSW_BYTES_MASK[i]) ^ NXDN_FSW_BYTES[i]); - if (errs <= MAX_FSW_BIT_ERRS) { + if (errs <= maxErrs) { m_maxCorr = corr; m_lostCount = MAX_FSW_FRAMES; m_fswPtr = m_dataPtr;