GNU Radio Manual and C++ API Reference  3.10.9.1
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  * SPDX-License-Identifier: GPL-3.0-or-later
8  *
9  */
10 
11 #ifndef INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
12 #define INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
13 
14 #include <gnuradio/block.h>
15 #include <gnuradio/digital/api.h>
16 
17 namespace gr {
18 namespace digital {
19 
20 /*! Estimate channel and coarse frequency offset for OFDM from preambles
21  * \ingroup ofdm_blk
22  * \ingroup synchronizers_blk
23  *
24  * Input: OFDM symbols (in frequency domain). The first one (or two) symbols are expected
25  * to be synchronisation symbols, which are used to estimate the coarse freq offset
26  * and the initial equalizer taps (these symbols are removed from the stream).
27  * The following \p n_data_symbols are passed through unmodified (the actual
28  * equalisation must be done elsewhere). Output: The data symbols, without the
29  * synchronisation symbols. The first data symbol passed through has two tags:
30  * 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of
31  * carriers, and 'ofdm_sync_eq_taps' (complex vector). Any tags attached to the
32  * synchronisation symbols are attached to the first data symbol. All other tags are
33  * propagated as expected.
34  *
35  * Note: The vector on ofdm_sync_eq_taps is already frequency-corrected, whereas
36  * the rest is not.
37  *
38  * This block assumes the frequency offset is even (i.e. an integer multiple of 2).
39  *
40  * [1] Schmidl, T.M. and Cox, D.C., "Robust frequency and timing synchronization
41  * for OFDM", Communications, IEEE Transactions on, 1997.
42  * [2] K.D. Kammeyer, "Nachrichtenuebertragung," Chapter. 16.3.2.
43  */
44 class DIGITAL_API ofdm_chanest_vcvc : virtual public block
45 {
46 public:
47  typedef std::shared_ptr<ofdm_chanest_vcvc> sptr;
48 
49  /*!
50  * \param sync_symbol1 First synchronisation symbol in the frequency domain.
51  * Its length must be the FFT length. For Schmidl & Cox
52  * synchronisation, every second sub-carrier has to be zero.
53  * \param sync_symbol2 Second synchronisation symbol in the frequency domain.
54  * Must be equal to the FFT length, or zero length if
55  * only one synchronisation symbol is used. Using this
56  * symbol is how synchronisation is described in [1].
57  * Leaving this empty forces us to interpolate the
58  * equalizer taps.
59  * If you are using an unusual sub-carrier configuration
60  * (e.g. because of OFDMA), this sync symbol is used to
61  * identify the active sub-carriers. If you only have
62  * one synchronisation symbol, set the active sub-carriers
63  * to a non-zero value in here, and set \p force_one_sync_symbol
64  * parameter to true.
65  * \param n_data_symbols The number of data symbols following each set of
66  * synchronisation symbols. Must be at least 1.
67  * \param eq_noise_red_len If non-zero, noise reduction for the equalizer
68  * taps is done according to [2]. In this case, it
69  * is the channel influence time in number of samples.
70  * A good value is usually the length of the cyclic prefix.
71  * \param max_carr_offset Limit the number of sub-carriers the frequency
72  * offset can maximally be. Leave this zero to try
73  * all possibilities.
74  * \param force_one_sync_symbol See \p sync_symbol2.
75  */
76  static sptr make(const std::vector<gr_complex>& sync_symbol1,
77  const std::vector<gr_complex>& sync_symbol2,
78  int n_data_symbols,
79  int eq_noise_red_len = 0,
80  int max_carr_offset = -1,
81  bool force_one_sync_symbol = false);
82 };
83 
84 } // namespace digital
85 } // namespace gr
86 
87 #endif /* INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H */
The abstract base class for all 'terminal' processing blocks.
Definition: gnuradio-runtime/include/gnuradio/block.h:63
Definition: ofdm_chanest_vcvc.h:45
static sptr make(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)
std::shared_ptr< ofdm_chanest_vcvc > sptr
Definition: ofdm_chanest_vcvc.h:47
#define DIGITAL_API
Definition: gr-digital/include/gnuradio/digital/api.h:18
GNU Radio logging wrapper.
Definition: basic_block.h:29