summaryrefslogtreecommitdiff
path: root/gr-digital/include/digital_ofdm_chanest_vcvc.h
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/include/digital_ofdm_chanest_vcvc.h')
-rw-r--r--gr-digital/include/digital_ofdm_chanest_vcvc.h133
1 files changed, 0 insertions, 133 deletions
diff --git a/gr-digital/include/digital_ofdm_chanest_vcvc.h b/gr-digital/include/digital_ofdm_chanest_vcvc.h
deleted file mode 100644
index da03f96720..0000000000
--- a/gr-digital/include/digital_ofdm_chanest_vcvc.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- c++ -*- */
-/* Copyright 2012 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
-#define INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
-
-#include <digital/api.h>
-#include <gr_block.h>
-
-class digital_ofdm_chanest_vcvc;
-
-typedef boost::shared_ptr<digital_ofdm_chanest_vcvc> digital_ofdm_chanest_vcvc_sptr;
-
-/*
- * \param sync_symbol1 First synchronisation symbol in the frequency domain. Its length must be
- * the FFT length. For Schmidl & Cox synchronisation, every second sub-carrier
- * has to be zero.
- * \param sync_symbol2 Second synchronisation symbol in the frequency domain. Must be equal to
- * the FFT length, or zero length if only one synchronisation symbol is used.
- * Using this symbol is how synchronisation is described in [1]. Leaving this
- * empty forces us to interpolate the equalizer taps.
- * If you are using an unusual sub-carrier configuration (e.g. because of OFDMA),
- * this sync symbol is used to identify the active sub-carriers. If you only
- * have one synchronisation symbol, set the active sub-carriers to a non-zero
- * value in here, and also set \p force_one_sync_symbol parameter to true.
- * \param n_data_symbols The number of data symbols following each set of synchronisation symbols.
- * Must be at least 1.
- * \param eq_noise_red_len If non-zero, noise reduction for the equalizer taps is done according
- * to [2]. In this case, it is the channel influence time in number of
- * samples. A good value is usually the length of the cyclic prefix.
- * \param max_carr_offset Limit the number of sub-carriers the frequency offset can maximally be.
- * Leave this zero to try all possibilities.
- * \param force_one_sync_symbol See \p sync_symbol2.
- */
-DIGITAL_API digital_ofdm_chanest_vcvc_sptr
-digital_make_ofdm_chanest_vcvc (
- const std::vector<gr_complex> &sync_symbol1,
- const std::vector<gr_complex> &sync_symbol2,
- int n_data_symbols,
- int eq_noise_red_len=0,
- int max_carr_offset=-1,
- bool force_one_sync_symbol=false);
-
-/*!
- * \brief Estimate channel and coarse frequency offset for OFDM from preambles
- * \ingroup ofdm_blk
- * \ingroup sync_blk
- *
- * Input: OFDM symbols (in frequency domain). The first one (or two) symbols are expected
- * to be synchronisation symbols, which are used to estimate the coarse freq offset
- * and the initial equalizer taps (these symbols are removed from the stream).
- * The following \p n_data_symbols are passed through unmodified (the actual equalisation
- * must be done elsewhere).
- * Output: The data symbols, without the synchronisation symbols.
- * The first data symbol passed through has two tags:
- * 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of carriers,
- * and 'ofdm_sync_eq_taps' (complex vector).
- * Any tags attached to the synchronisation symbols are attached to the first data
- * symbol. All other tags are propagated normally.
- *
- * This block assumes the frequency offset is even (i.e. an integer multiple of 2).
- *
- * [1] Schmidl, T.M. and Cox, D.C., "Robust frequency and timing synchronization for OFDM",
- * Communications, IEEE Transactions on, 1997.
- * [2] K.D. Kammeyer, "Nachrichtenuebertragung," Chapter. 16.3.2.
- */
-class DIGITAL_API digital_ofdm_chanest_vcvc : public gr_block
-{
- private:
- friend DIGITAL_API digital_ofdm_chanest_vcvc_sptr digital_make_ofdm_chanest_vcvc (const std::vector<gr_complex> &sync_symbol1, const std::vector<gr_complex> &sync_symbol2, int n_data_symbols, int eq_noise_red_len, int max_carr_offset, bool force_one_sync_symbol);
-
- int d_fft_len; //! FFT length
- int d_n_data_syms; //! Number of data symbols following the sync symbol(s)
- int d_n_sync_syms; //! Number of sync symbols (1 or 2)
- //! 0 if no noise reduction is done for the initial channel state estimation. Otherwise, the maximum length of the channel delay in samples.
- int d_eq_noise_red_len;
- //! Is sync_symbol1 if d_n_sync_syms == 1, otherwise sync_symbol2. Used as a reference symbol to estimate the channel.
- std::vector<gr_complex> d_ref_sym;
- //! If d_n_sync_syms == 2 this is used as a differential correlation vector (called 'v' in [1]).
- std::vector<gr_complex> d_corr_v;
- //! If d_n_sync_syms == 1 we use this instead of d_corr_v to estimate the coarse freq. offset
- std::vector<float> d_known_symbol_diffs;
- //! If d_n_sync_syms == 1 we use this instead of d_corr_v to estimate the coarse freq. offset (temp. variable)
- std::vector<float> d_new_symbol_diffs;
- //! The index of the first carrier with data (index 0 is not DC here, but the lowest frequency)
- int d_first_active_carrier;
- //! The index of the last carrier with data
- int d_last_active_carrier;
- //! If true, the channel estimation must be interpolated
- bool d_interpolate;
- //! Maximum carrier offset (negative value!)
- int d_max_neg_carr_offset;
- //! Maximum carrier offset (positive value!)
- int d_max_pos_carr_offset;
-
-
- digital_ofdm_chanest_vcvc(const std::vector<gr_complex> &sync_symbol1, const std::vector<gr_complex> &sync_symbol2, int n_data_symbols, int eq_noise_red_len, int max_carr_offset, bool force_one_sync_symbol);
-
- //! Calculate the coarse frequency offset in number of carriers
- int get_carr_offset(const gr_complex *sync_sym1, const gr_complex *sync_sym2);
- //! Estimate the channel (phase and amplitude offset per carrier)
- void get_chan_taps(const gr_complex *sync_sym1, const gr_complex *sync_sym2, int carr_offset, std::vector<gr_complex> &taps);
-
- public:
- ~digital_ofdm_chanest_vcvc();
-
- void forecast (int noutput_items, gr_vector_int &ninput_items_required);
- int general_work (int noutput_items,
- gr_vector_int &ninput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H */
-