diff options
Diffstat (limited to 'gr-digital/lib')
-rw-r--r-- | gr-digital/lib/CMakeLists.txt | 2 | ||||
-rw-r--r-- | gr-digital/lib/simple_correlator_impl.cc | 204 | ||||
-rw-r--r-- | gr-digital/lib/simple_correlator_impl.h | 84 | ||||
-rw-r--r-- | gr-digital/lib/simple_framer_impl.cc | 92 | ||||
-rw-r--r-- | gr-digital/lib/simple_framer_impl.h | 41 |
5 files changed, 0 insertions, 423 deletions
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt index 6b449ad6e7..b3d81ce506 100644 --- a/gr-digital/lib/CMakeLists.txt +++ b/gr-digital/lib/CMakeLists.txt @@ -82,8 +82,6 @@ add_library(gnuradio-digital probe_density_b_impl.cc probe_mpsk_snr_est_c_impl.cc scrambler_bb_impl.cc - simple_correlator_impl.cc - simple_framer_impl.cc interpolating_resampler.cc symbol_sync_cc_impl.cc symbol_sync_ff_impl.cc diff --git a/gr-digital/lib/simple_correlator_impl.cc b/gr-digital/lib/simple_correlator_impl.cc deleted file mode 100644 index d062f24726..0000000000 --- a/gr-digital/lib/simple_correlator_impl.cc +++ /dev/null @@ -1,204 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2010,2013 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "simple_correlator_impl.h" -#include <gnuradio/blocks/count_bits.h> -#include <gnuradio/digital/simple_framer_sync.h> -#include <gnuradio/io_signature.h> -#include <cstring> -#include <stdexcept> - -namespace gr { -namespace digital { - -static const int THRESHOLD = 3; - -simple_correlator::sptr simple_correlator::make(int payload_bytesize) -{ - return gnuradio::make_block_sptr<simple_correlator_impl>(payload_bytesize); -} - -simple_correlator_impl::simple_correlator_impl(int payload_bytesize) - : block("simple_correlator", - io_signature::make(1, 1, sizeof(float)), - io_signature::make(1, 1, sizeof(unsigned char))), - d_payload_bytesize(payload_bytesize), - d_bblen((payload_bytesize + GRSF_PAYLOAD_OVERHEAD) * GRSF_BITS_PER_BYTE), - d_bitbuf(d_bblen), - d_pktbuf(d_bblen / GRSF_BITS_PER_BYTE) -{ - for (int i = 0; i < AVG_PERIOD; i++) { - d_avgbuf[i] = 0.0; - } - - enter_looking(); -} - -simple_correlator_impl::~simple_correlator_impl() {} - -void simple_correlator_impl::enter_looking() -{ - fflush(stdout); - // fprintf(stderr, ">>> enter_looking\n"); - d_state = ST_LOOKING; - for (int i = 0; i < OVERSAMPLE; i++) - d_shift_reg[i] = 0; - d_osi = 0; - - d_avbi = 0; - d_avg = d_avg * 0.5; - d_accum = 0; - for (int i = 0; i < AVG_PERIOD; i++) - d_avgbuf[i] = 0.0; -} - -void simple_correlator_impl::enter_under_threshold() -{ - fflush(stdout); - // fprintf(stderr, ">>> enter_under_threshold\n"); - d_state = ST_UNDER_THRESHOLD; - d_transition_osi = d_osi; -} - -void simple_correlator_impl::enter_locked() -{ - d_state = ST_LOCKED; - int delta = sub_index(d_osi, d_transition_osi); - d_center_osi = add_index(d_transition_osi, delta / 2); - // d_center_osi = add_index(d_center_osi, 3); // FIXME - d_bbi = 0; - fflush(stdout); - // fprintf(stderr, ">>> enter_locked d_center_osi = %d\n", d_center_osi); - - d_avg = std::max(-1.0, std::min(1.0, d_accum * (1.0 / AVG_PERIOD))); - // fprintf(stderr, ">>> enter_locked d_avg = %g\n", d_avg); -} - -static void packit(unsigned char* pktbuf, const unsigned char* bitbuf, int bitcount) -{ - for (int i = 0; i < bitcount; i += 8) { - int t = bitbuf[i + 0] & 0x1; - t = (t << 1) | (bitbuf[i + 1] & 0x1); - t = (t << 1) | (bitbuf[i + 2] & 0x1); - t = (t << 1) | (bitbuf[i + 3] & 0x1); - t = (t << 1) | (bitbuf[i + 4] & 0x1); - t = (t << 1) | (bitbuf[i + 5] & 0x1); - t = (t << 1) | (bitbuf[i + 6] & 0x1); - t = (t << 1) | (bitbuf[i + 7] & 0x1); - *pktbuf++ = t; - } -} - -void simple_correlator_impl::update_avg(float x) -{ - d_accum -= d_avgbuf[d_avbi]; - d_avgbuf[d_avbi] = x; - d_accum += x; - d_avbi = (d_avbi + 1) & (AVG_PERIOD - 1); -} - -int simple_correlator_impl::general_work(int noutput_items, - gr_vector_int& ninput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) -{ - const float* in = (const float*)input_items[0]; - unsigned char* out = (unsigned char*)output_items[0]; - - int n = 0; - int nin = ninput_items[0]; - int decision; - int hamming_dist; - -#ifdef DEBUG_SIMPLE_CORRELATOR - struct debug_data { - float raw_data; - bool sampled; - bool enter_locked; - } debug_data; -#endif - - while (n < nin) { - -#ifdef DEBUG_SIMPLE_CORRELATOR - debug_data.raw_data = in[n]; - debug_data.sampled = false; - debug_data.enter_locked = false; -#endif - - switch (d_state) { - case ST_LOCKED: - if (d_osi == d_center_osi) { - -#ifdef DEBUG_SIMPLE_CORRELATOR - debug_data.sampled = true; -#endif - decision = slice(in[n]); - - d_bitbuf[d_bbi] = decision; - d_bbi++; - if (d_bbi >= d_bblen) { - // printf("got whole packet\n"); - packit(d_pktbuf.data(), d_bitbuf.data(), d_bbi); - // printf("seqno %3d\n", d_pktbuf[0]); - memcpy(out, &d_pktbuf[GRSF_PAYLOAD_OVERHEAD], d_payload_bytesize); - enter_looking(); - consume_each(n + 1); - return d_payload_bytesize; - } - } - break; - - case ST_LOOKING: - case ST_UNDER_THRESHOLD: - update_avg(in[n]); - decision = slice(in[n]); - d_shift_reg[d_osi] = (d_shift_reg[d_osi] << 1) | decision; - - hamming_dist = gr::blocks::count_bits64(d_shift_reg[d_osi] ^ GRSF_SYNC); - // printf("%2d %d\n", hamming_dist, d_osi); - - if (d_state == ST_LOOKING && hamming_dist <= THRESHOLD) { - // We're seeing a good PN code, remember location - enter_under_threshold(); - } else if (d_state == ST_UNDER_THRESHOLD && hamming_dist > THRESHOLD) { - // no longer seeing good PN code, compute center of goodness - enter_locked(); -#ifdef DEBUG_SIMPLE_CORRELATOR - debug_data.enter_locked = true; -#endif - } - break; - default: - GR_LOG_ERROR(d_logger, "Unknown simple correlator state encountered"); - throw std::runtime_error("unknown simple correlator state"); - } - -#ifdef DEBUG_SIMPLE_CORRELATOR - GR_LOG_TRACE(d_debug_logger, - (boost::format("%e %c%c") % debug_data.raw_data % - (debug_data.sampled ? 'S' : ' ') % - (debug_data.enter_locked ? 'L' : ' '))); -#endif - - d_osi = add_index(d_osi, 1); - n++; - } - - consume_each(n); - return 0; -} - -} /* namespace digital */ -} /* namespace gr */ diff --git a/gr-digital/lib/simple_correlator_impl.h b/gr-digital/lib/simple_correlator_impl.h deleted file mode 100644 index 3a5514dcc9..0000000000 --- a/gr-digital/lib/simple_correlator_impl.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_GR_SIMPLE_CORRELATOR_IMPL_H -#define INCLUDED_GR_SIMPLE_CORRELATOR_IMPL_H - -#include <gnuradio/digital/simple_correlator.h> - -// To enable tracing to the debug logger, un-comment the following line -//#define DEBUG_SIMPLE_CORRELATOR - -namespace gr { -namespace digital { - -class simple_correlator_impl : public simple_correlator -{ -private: - static constexpr int OVERSAMPLE = 8; - enum state_t { ST_LOOKING, ST_UNDER_THRESHOLD, ST_LOCKED }; - - int d_payload_bytesize; - state_t d_state = ST_LOOKING; - unsigned int d_osi = 0; // over sample index [0,OVERSAMPLE-1] - unsigned int d_transition_osi = 0; // first index where Hamming dist < thresh - unsigned int d_center_osi = 0; // center of bit - unsigned long long int d_shift_reg[OVERSAMPLE]; - int d_bblen; // length of bitbuf - std::vector<unsigned char> d_bitbuf; // demodulated bits - std::vector<unsigned char> d_pktbuf; // temp packet buf - int d_bbi = 0; // bitbuf index - - static const int AVG_PERIOD = 512; // must be power of 2 (for freq offset correction) - int d_avbi = 0; - float d_avgbuf[AVG_PERIOD]; - float d_avg = 0.0; - float d_accum = 0.0; - - inline int slice(float x) { return x >= d_avg ? 1 : 0; } - - void update_avg(float x); - - void enter_locked(); - void enter_under_threshold(); - void enter_looking(); - - static int add_index(int a, int b) - { - int t = a + b; - if (t >= OVERSAMPLE) - t -= OVERSAMPLE; - assert(t >= 0 && t < OVERSAMPLE); - return t; - } - - static int sub_index(int a, int b) - { - int t = a - b; - if (t < 0) - t += OVERSAMPLE; - assert(t >= 0 && t < OVERSAMPLE); - return t; - } - -public: - simple_correlator_impl(int payload_bytesize); - ~simple_correlator_impl() override; - - int general_work(int noutput_items, - gr_vector_int& ninput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) override; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_GR_SIMPLE_CORRELATOR_IMPL_H */ diff --git a/gr-digital/lib/simple_framer_impl.cc b/gr-digital/lib/simple_framer_impl.cc deleted file mode 100644 index 13eb29c78c..0000000000 --- a/gr-digital/lib/simple_framer_impl.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2010,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "simple_framer_impl.h" -#include <gnuradio/digital/simple_framer_sync.h> -#include <gnuradio/io_signature.h> -#include <cassert> -#include <string> - -namespace gr { -namespace digital { - -simple_framer::sptr simple_framer::make(int payload_bytesize) -{ - return gnuradio::make_block_sptr<simple_framer_impl>(payload_bytesize); -} - -simple_framer_impl::simple_framer_impl(int payload_bytesize) - : block("simple_framer", - io_signature::make(1, 1, sizeof(unsigned char)), - io_signature::make(1, 1, sizeof(unsigned char))), - d_seqno(0), - d_input_block_size(payload_bytesize), - d_output_block_size(payload_bytesize + GRSF_OVERHEAD) -{ - set_output_multiple(d_output_block_size); -} - -simple_framer_impl::~simple_framer_impl() {} - -void simple_framer_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) -{ - assert(noutput_items % d_output_block_size == 0); - - int nblocks = noutput_items / d_output_block_size; - int input_required = nblocks * d_input_block_size; - - unsigned ninputs = ninput_items_required.size(); - for (unsigned int i = 0; i < ninputs; i++) - ninput_items_required[i] = input_required; -} - -int simple_framer_impl::general_work(int noutput_items, - gr_vector_int& ninput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) -{ - const unsigned char* in = (const unsigned char*)input_items[0]; - unsigned char* out = (unsigned char*)output_items[0]; - - int n = 0; - int nblocks = 0; - - memset(out, 0x55, noutput_items); - - while (n < noutput_items) { - out[0] = (GRSF_SYNC >> 56) & 0xff; - out[1] = (GRSF_SYNC >> 48) & 0xff; - out[2] = (GRSF_SYNC >> 40) & 0xff; - out[3] = (GRSF_SYNC >> 32) & 0xff; - out[4] = (GRSF_SYNC >> 24) & 0xff; - out[5] = (GRSF_SYNC >> 16) & 0xff; - out[6] = (GRSF_SYNC >> 8) & 0xff; - out[7] = (GRSF_SYNC >> 0) & 0xff; - out[8] = d_seqno++; - - memcpy(&out[9], in, d_input_block_size); - in += d_input_block_size; - out += d_output_block_size; - n += d_output_block_size; - nblocks++; - } - - assert(n == noutput_items); - - consume_each(nblocks * d_input_block_size); - return n; -} - -} /* namespace digital */ -} /* namespace gr */ diff --git a/gr-digital/lib/simple_framer_impl.h b/gr-digital/lib/simple_framer_impl.h deleted file mode 100644 index 5c4b9da676..0000000000 --- a/gr-digital/lib/simple_framer_impl.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_GR_SIMPLE_FRAMER_IMPL_H -#define INCLUDED_GR_SIMPLE_FRAMER_IMPL_H - -#include <gnuradio/digital/simple_framer.h> - -namespace gr { -namespace digital { - -class simple_framer_impl : public simple_framer -{ -private: - int d_seqno; - int d_input_block_size; // bytes - int d_output_block_size; // bytes - -public: - simple_framer_impl(int payload_bytesize); - ~simple_framer_impl() override; - - void forecast(int noutput_items, gr_vector_int& ninput_items_required) override; - - int general_work(int noutput_items, - gr_vector_int& ninput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) override; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_GR_SIMPLE_FRAMER_IMPL_H */ |