/* -*- c++ -*- */ /* * Copyright 2014 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_DTV_ATSC_EQUALIZER_IMPL_H #define INCLUDED_DTV_ATSC_EQUALIZER_IMPL_H #include "atsc_syminfo_impl.h" #include <gnuradio/dtv/atsc_consts.h> #include <gnuradio/dtv/atsc_equalizer.h> namespace gr { namespace dtv { class atsc_equalizer_impl : public atsc_equalizer { private: static constexpr int NTAPS = 64; static constexpr int NPRETAPS = (int)(NTAPS * 0.8); // probably should be either .2 or .8 // the length of the field sync pattern that we know unequivocally static constexpr int KNOWN_FIELD_SYNC_LENGTH = 4 + 511 + 3 * 63; float training_sequence1[KNOWN_FIELD_SYNC_LENGTH]; float training_sequence2[KNOWN_FIELD_SYNC_LENGTH]; void filterN(const float* input_samples, float* output_samples, int nsamples); void adaptN(const float* input_samples, const float* training_pattern, float* output_samples, int nsamples); std::vector<float> d_taps; float data_mem[ATSC_DATA_SEGMENT_LENGTH + NTAPS]; // Buffer for previous data packet float data_mem2[ATSC_DATA_SEGMENT_LENGTH]; unsigned short d_flags; short d_segno; bool d_buff_not_filled = true; public: atsc_equalizer_impl(); ~atsc_equalizer_impl() override; void setup_rpc() override; std::vector<float> taps() const override; std::vector<float> data() const 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 dtv */ } /* namespace gr */ #endif /* INCLUDED_DTV_ATSC_EQUALIZER_IMPL_H */