From 36eefa46e7cce3183096f65e87906d39a72d4cfb Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 1 Jun 2016 15:20:23 -0700 Subject: [PATCH] Improve OOK phase advance algorithm. Now independent of samples/symbol, adjusts up to 1/8 of a cycle per symbol. --- firmware/baseband/ook.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/firmware/baseband/ook.hpp b/firmware/baseband/ook.hpp index 273339229..2453f2f4b 100644 --- a/firmware/baseband/ook.hpp +++ b/firmware/baseband/ook.hpp @@ -70,6 +70,7 @@ public: constexpr OOKClockRecovery( const float samples_per_symbol ) : symbol_phase_inc_nominal { static_cast(std::round((1ULL << 32) / samples_per_symbol)) }, + symbol_phase_inc_k { symbol_phase_inc_nominal * (2.0f / 8.0f) / samples_per_symbol }, phase_detector { samples_per_symbol }, phase_accumulator { symbol_phase_inc_nominal } { @@ -79,13 +80,14 @@ public: void operator()(const uint32_t slicer_history, SymbolHandler symbol_handler) { if( phase_accumulator() ) { const auto detector_result = phase_detector(slicer_history); - phase_accumulator.set_inc(symbol_phase_inc_nominal + detector_result.error * (symbol_phase_inc_nominal >> 3)); + phase_accumulator.set_inc(symbol_phase_inc_nominal + detector_result.error * symbol_phase_inc_k); symbol_handler(detector_result.symbol); } } private: const uint32_t symbol_phase_inc_nominal; + const uint32_t symbol_phase_inc_k; PhaseDetectorEarlyLateGate phase_detector; PhaseAccumulator phase_accumulator; };