GNU Radio Manual and C++ API Reference  3.8.1.0
The Free & Open Software Radio Ecosystem
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/block.h>
27 #include <gnuradio/digital/api.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
41  * equalisation must be done elsewhere). Output: The data symbols, without the
42  * synchronisation symbols. The first data symbol passed through has two tags:
43  * 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of
44  * carriers, and 'ofdm_sync_eq_taps' (complex vector). Any tags attached to the
45  * synchronisation symbols are attached to the first data symbol. All other tags are
46  * propagated as expected.
47  *
48  * Note: The vector on ofdm_sync_eq_taps is already frequency-corrected, whereas the rest
49  * 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
54  * OFDM", Communications, IEEE Transactions on, 1997. [2] K.D. Kammeyer,
55  * "Nachrichtenuebertragung," Chapter. 16.3.2.
56  */
57 class DIGITAL_API ofdm_chanest_vcvc : virtual public block
58 {
59 public:
60  typedef boost::shared_ptr<ofdm_chanest_vcvc> sptr;
61 
62  /*!
63  * \param sync_symbol1 First synchronisation symbol in the frequency domain. Its
64  * length must be the FFT length. For Schmidl & Cox synchronisation, every second
65  * sub-carrier has to be zero. \param sync_symbol2 Second synchronisation symbol in
66  * the frequency domain. Must be equal to the FFT length, or zero length if only one
67  * synchronisation symbol is used. Using this symbol is how synchronisation is
68  * described in [1]. Leaving this empty forces us to interpolate the equalizer taps.
69  * If you are using an unusual sub-carrier configuration (e.g.
70  * because of OFDMA), this sync symbol is used to identify the active sub-carriers. If
71  * you only have one synchronisation symbol, set the active sub-carriers to a non-zero
72  * value in here, and also set \p force_one_sync_symbol parameter
73  * to true. \param n_data_symbols The number of data symbols following each set of
74  * synchronisation symbols. Must be at least 1. \param eq_noise_red_len If non-zero,
75  * noise reduction for the equalizer taps is done according to [2]. In this case, it
76  * is the channel influence time in number of samples. A good value is usually the
77  * length of the cyclic prefix. \param max_carr_offset Limit the number of
78  * sub-carriers the frequency offset can maximally be. Leave this zero to try all
79  * possibilities. \param force_one_sync_symbol See \p sync_symbol2.
80  */
81  static sptr make(const std::vector<gr_complex>& sync_symbol1,
82  const std::vector<gr_complex>& sync_symbol2,
83  int n_data_symbols,
84  int eq_noise_red_len = 0,
85  int max_carr_offset = -1,
86  bool force_one_sync_symbol = false);
87 };
88 
89 } // namespace digital
90 } // namespace gr
91 
92 #endif /* INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H */
#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
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:43
The abstract base class for all &#39;terminal&#39; processing blocks.A signal processing flow is constructed ...
Definition: block.h:71
Estimate channel and coarse frequency offset for OFDM from preamblesInput: OFDM symbols (in frequency...
Definition: ofdm_chanest_vcvc.h:57