GNU Radio 3.7.2 C++ API
ofdm_chanest_vcvc.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2013 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  *
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Radio; see the file COPYING. If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
24 #define INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
25 
26 #include <gnuradio/digital/api.h>
27 #include <gnuradio/block.h>
28 
29 namespace gr {
30  namespace digital {
31 
32  /*!
33  * \brief Estimate channel and coarse frequency offset for OFDM from preambles
34  * \ingroup ofdm_blk
35  * \ingroup syncronizers_blk
36  *
37  * Input: OFDM symbols (in frequency domain). The first one (or two) symbols are expected
38  * to be synchronisation symbols, which are used to estimate the coarse freq offset
39  * and the initial equalizer taps (these symbols are removed from the stream).
40  * The following \p n_data_symbols are passed through unmodified (the actual equalisation
41  * must be done elsewhere).
42  * Output: The data symbols, without the synchronisation symbols.
43  * The first data symbol passed through has two tags:
44  * 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of carriers,
45  * and 'ofdm_sync_eq_taps' (complex vector).
46  * Any tags attached to the synchronisation symbols are attached to the first data
47  * symbol. All other tags are propagated as expected.
48  *
49  * Note: The vector on ofdm_sync_eq_taps is already frequency-corrected, whereas the rest is not.
50  *
51  * This block assumes the frequency offset is even (i.e. an integer multiple of 2).
52  *
53  * [1] Schmidl, T.M. and Cox, D.C., "Robust frequency and timing synchronization for OFDM",
54  * Communications, IEEE Transactions on, 1997.
55  * [2] K.D. Kammeyer, "Nachrichtenuebertragung," Chapter. 16.3.2.
56  */
57  class DIGITAL_API ofdm_chanest_vcvc : virtual public block
58  {
59  public:
61 
62  /*!
63  * \param sync_symbol1 First synchronisation symbol in the frequency domain. Its length must be
64  * the FFT length. For Schmidl & Cox synchronisation, every second sub-carrier
65  * has to be zero.
66  * \param sync_symbol2 Second synchronisation symbol in the frequency domain. Must be equal to
67  * the FFT length, or zero length if only one synchronisation symbol is used.
68  * Using this symbol is how synchronisation is described in [1]. Leaving this
69  * empty forces us to interpolate the equalizer taps.
70  * If you are using an unusual sub-carrier configuration (e.g. because of OFDMA),
71  * this sync symbol is used to identify the active sub-carriers. If you only
72  * have one synchronisation symbol, set the active sub-carriers to a non-zero
73  * value in here, and also set \p force_one_sync_symbol parameter to true.
74  * \param n_data_symbols The number of data symbols following each set of synchronisation symbols.
75  * Must be at least 1.
76  * \param eq_noise_red_len If non-zero, noise reduction for the equalizer taps is done according
77  * to [2]. In this case, it is the channel influence time in number of
78  * samples. A good value is usually the length of the cyclic prefix.
79  * \param max_carr_offset Limit the number of sub-carriers the frequency offset can maximally be.
80  * Leave this zero to try all possibilities.
81  * \param force_one_sync_symbol See \p sync_symbol2.
82  */
83  static sptr make(
84  const std::vector<gr_complex> &sync_symbol1,
85  const std::vector<gr_complex> &sync_symbol2,
86  int n_data_symbols,
87  int eq_noise_red_len=0,
88  int max_carr_offset=-1,
89  bool force_one_sync_symbol=false
90  );
91  };
92 
93  } // namespace digital
94 } // namespace gr
95 
96 #endif /* INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H */
97 
#define DIGITAL_API
Definition: gr-digital/include/gnuradio/digital/api.h:30
boost::shared_ptr< ofdm_chanest_vcvc > sptr
Definition: ofdm_chanest_vcvc.h:60
shared_ptr documentation stub
Definition: shared_ptr_docstub.h:15
The abstract base class for all 'terminal' processing blocks.A signal processing flow is constructed ...
Definition: block.h:60
Estimate channel and coarse frequency offset for OFDM from preamblesInput: OFDM symbols (in frequency...
Definition: ofdm_chanest_vcvc.h:57