GNU Radio Manual and C++ API Reference 3.10.5.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>
16
17namespace gr {
18namespace 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 */
44class DIGITAL_API ofdm_chanest_vcvc : virtual public block
45{
46public:
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