mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-10-31 15:07:12 -04:00
M17: Correlator code cleanup
This commit is contained in:
parent
1601fa43ca
commit
22539b331f
@ -20,10 +20,9 @@ namespace modemm17 {
|
|||||||
|
|
||||||
struct MODEMM17_API Correlator
|
struct MODEMM17_API Correlator
|
||||||
{
|
{
|
||||||
static constexpr size_t SYMBOLS = 8;
|
static const size_t SYMBOLS = 8;
|
||||||
static constexpr size_t SAMPLES_PER_SYMBOL = 10;
|
static const size_t SAMPLES_PER_SYMBOL = 10;
|
||||||
|
|
||||||
using value_type = float;
|
|
||||||
using buffer_t = std::array<float, SYMBOLS * SAMPLES_PER_SYMBOL>;
|
using buffer_t = std::array<float, SYMBOLS * SAMPLES_PER_SYMBOL>;
|
||||||
using sync_t = std::array<int8_t, SYMBOLS>;
|
using sync_t = std::array<int8_t, SYMBOLS>;
|
||||||
using sample_filter_t = BaseIirFilter<3>;
|
using sample_filter_t = BaseIirFilter<3>;
|
||||||
@ -115,15 +114,10 @@ struct MODEMM17_API Correlator
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Correlator>
|
|
||||||
struct SyncWord
|
struct SyncWord
|
||||||
{
|
{
|
||||||
static constexpr size_t SYMBOLS = Correlator::SYMBOLS;
|
using buffer_t = std::array<int8_t, Correlator::SYMBOLS>;
|
||||||
static constexpr size_t SAMPLES_PER_SYMBOL = Correlator::SAMPLES_PER_SYMBOL;
|
using sample_buffer_t = std::array<float, Correlator::SAMPLES_PER_SYMBOL>;
|
||||||
using value_type = typename Correlator::value_type;
|
|
||||||
|
|
||||||
using buffer_t = std::array<int8_t, SYMBOLS>;
|
|
||||||
using sample_buffer_t = std::array<value_type, SAMPLES_PER_SYMBOL>;
|
|
||||||
|
|
||||||
buffer_t sync_word_;
|
buffer_t sync_word_;
|
||||||
sample_buffer_t samples_;
|
sample_buffer_t samples_;
|
||||||
@ -131,23 +125,23 @@ struct SyncWord
|
|||||||
size_t timing_index_ = 0;
|
size_t timing_index_ = 0;
|
||||||
bool triggered_ = false;
|
bool triggered_ = false;
|
||||||
int8_t updated_ = 0;
|
int8_t updated_ = 0;
|
||||||
value_type magnitude_1_ = 1.;
|
float magnitude_1_ = 1.0f;
|
||||||
value_type magnitude_2_ = -1.;
|
float magnitude_2_ = -1.0f;
|
||||||
|
|
||||||
SyncWord(
|
SyncWord(
|
||||||
buffer_t&& sync_word,
|
buffer_t&& sync_word,
|
||||||
value_type magnitude_1,
|
float magnitude_1,
|
||||||
value_type magnitude_2 = std::numeric_limits<value_type>::lowest()
|
float magnitude_2 = std::numeric_limits<float>::lowest()
|
||||||
) :
|
) :
|
||||||
sync_word_(std::move(sync_word)),
|
sync_word_(std::move(sync_word)),
|
||||||
magnitude_1_(magnitude_1),
|
magnitude_1_(magnitude_1),
|
||||||
magnitude_2_(magnitude_2)
|
magnitude_2_(magnitude_2)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
value_type triggered(Correlator& correlator)
|
float triggered(Correlator& correlator)
|
||||||
{
|
{
|
||||||
value_type limit_1 = correlator.limit() * magnitude_1_;
|
float limit_1 = correlator.limit() * magnitude_1_;
|
||||||
value_type limit_2 = correlator.limit() * magnitude_2_;
|
float limit_2 = correlator.limit() * magnitude_2_;
|
||||||
auto value = correlator.correlate(sync_word_);
|
auto value = correlator.correlate(sync_word_);
|
||||||
|
|
||||||
return (value > limit_1 || value < limit_2) ? value : 0.0;
|
return (value > limit_1 || value < limit_2) ? value : 0.0;
|
||||||
@ -157,7 +151,7 @@ struct SyncWord
|
|||||||
{
|
{
|
||||||
auto value = triggered(correlator);
|
auto value = triggered(correlator);
|
||||||
|
|
||||||
value_type peak_value = 0;
|
float peak_value = 0.0f;
|
||||||
|
|
||||||
if (value != 0)
|
if (value != 0)
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@ struct MODEMM17_API M17Demodulator
|
|||||||
static const uint8_t MAX_MISSING_SYNC = 8;
|
static const uint8_t MAX_MISSING_SYNC = 8;
|
||||||
|
|
||||||
using collelator_t = Correlator;
|
using collelator_t = Correlator;
|
||||||
using sync_word_t = SyncWord<collelator_t>;
|
using sync_word_t = SyncWord;
|
||||||
using callback_t = M17FrameDecoder::callback_t;
|
using callback_t = M17FrameDecoder::callback_t;
|
||||||
using diagnostic_callback_t = std::function<void(bool, float, float, float, int, int, float, int, int, int, int)>;
|
using diagnostic_callback_t = std::function<void(bool, float, float, float, int, int, float, int, int, int, int)>;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user