diff --git a/openrtx/include/protocols/M17/M17Demodulator.h b/openrtx/include/protocols/M17/M17Demodulator.h index 7789a306..d6e75ecf 100644 --- a/openrtx/include/protocols/M17/M17Demodulator.h +++ b/openrtx/include/protocols/M17/M17Demodulator.h @@ -36,7 +36,8 @@ namespace M17 { -typedef struct { +typedef struct +{ int32_t index; bool lsf; } sync_t; @@ -113,7 +114,7 @@ private: /** * M17 syncwords; */ - int8_t lsf_syncword[M17_SYNCWORD_SYMBOLS] = { +3, +3, +3, +3, -3, -3, +3, -3 }; + int8_t lsf_syncword[M17_SYNCWORD_SYMBOLS] = { +3, +3, +3, +3, -3, -3, +3, -3 }; int8_t stream_syncword[M17_SYNCWORD_SYMBOLS] = { -3, -3, -3, -3, +3, +3, -3, +3 }; using dataBuffer_t = std::array< int16_t, M17_FRAME_SAMPLES_24K >; diff --git a/openrtx/include/rtx/OpMode_M17.h b/openrtx/include/rtx/OpMode_M17.h index 108c4a77..5694b520 100644 --- a/openrtx/include/rtx/OpMode_M17.h +++ b/openrtx/include/rtx/OpMode_M17.h @@ -22,6 +22,7 @@ #define OPMODE_M17_H #include +#include #include #include #include "OpMode.h" @@ -105,6 +106,7 @@ private: bool enterRx; ///< Flag for RX management. M17::M17Modulator modulator; ///< M17 modulator. + M17::M17Demodulator demodulator; ///< M17 demodulator. M17::M17Transmitter m17Tx; ///< M17 transmission manager. }; diff --git a/openrtx/src/protocols/M17/M17Demodulator.cpp b/openrtx/src/protocols/M17/M17Demodulator.cpp index 39e69541..d494b6e6 100644 --- a/openrtx/src/protocols/M17/M17Demodulator.cpp +++ b/openrtx/src/protocols/M17/M17Demodulator.cpp @@ -24,12 +24,6 @@ #include #include -#if defined(PLATFORM_MD3x0) || defined(PLATFORM_MDUV3x0) -#include -#elif defined(PLATFORM_LINUX) -#include -#endif - namespace M17 { @@ -82,7 +76,8 @@ void M17Demodulator::stopBasebandSampling() inputStream_stop(basebandId); } -void M17Demodulator::resetCorrelationStats() { +void M17Demodulator::resetCorrelationStats() +{ conv_ema = 0.0f; conv_emvar = 20000000000.0f; } @@ -94,9 +89,9 @@ void M17Demodulator::resetCorrelationStats() { void M17Demodulator::updateCorrelationStats(int32_t value) { float delta = (float) value - conv_ema; - float incr = conv_stats_alpha * delta; - conv_ema += incr; - conv_emvar = (1.0f - conv_stats_alpha) * (conv_emvar + delta * incr); + float incr = conv_stats_alpha * delta; + conv_ema += incr; + conv_emvar = (1.0f - conv_stats_alpha) * (conv_emvar + delta * incr); } float M17Demodulator::getCorrelationStddev() @@ -104,21 +99,31 @@ float M17Demodulator::getCorrelationStddev() return sqrt(conv_emvar); } -void M17Demodulator::resetQuantizationStats() { +void M17Demodulator::resetQuantizationStats() +{ qnt_max = 0.0f; } void M17Demodulator::updateQuantizationStats(uint32_t offset) { auto value = baseband.data[offset]; - if (value > qnt_max) { + if (value > qnt_max) + { qnt_max = value; - } else + } + else + { qnt_max *= qnt_maxmin_alpha; - if (value < qnt_min) { + } + + if (value < qnt_min) + { qnt_min = value; - } else + } + else + { qnt_min *= qnt_maxmin_alpha; + } } float M17Demodulator::getQuantizationMax() diff --git a/openrtx/src/rtx/OpMode_M17.cpp b/openrtx/src/rtx/OpMode_M17.cpp index a787c6a1..aabf3722 100644 --- a/openrtx/src/rtx/OpMode_M17.cpp +++ b/openrtx/src/rtx/OpMode_M17.cpp @@ -125,6 +125,7 @@ void OpMode_M17::enable() pthread_create(&codecThread, &codecAttr, threadFunc, NULL); modulator.init(); + demodulator.init(); enterRx = true; } @@ -138,6 +139,7 @@ void OpMode_M17::disable() enterRx = false; modulator.terminate(); + demodulator.terminate(); } void OpMode_M17::update(rtxStatus_t *const status, const bool newCfg) @@ -148,6 +150,7 @@ void OpMode_M17::update(rtxStatus_t *const status, const bool newCfg) if(status->opStatus == RX) { // TODO: Implement M17 Rx + demodulator.update(); sleepFor(0u, 30u); } else if((status->opStatus == OFF) && enterRx)