GNU Radio Manual and C++ API Reference 3.7.14.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>
28
29namespace gr {
30namespace 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 */
57class DIGITAL_API ofdm_chanest_vcvc : virtual public block
58{
59public:
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 */
The abstract base class for all 'terminal' processing blocks.
Definition: block.h:66
Estimate channel and coarse frequency offset for OFDM from preambles.
Definition: ofdm_chanest_vcvc.h:58
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)
boost::shared_ptr< ofdm_chanest_vcvc > sptr
Definition: ofdm_chanest_vcvc.h:60
#define DIGITAL_API
Definition: gr-digital/include/gnuradio/digital/api.h:30
Include this header to use the message passing features.
Definition: basic_block.h:45