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 */
block.h
DIGITAL_API
#define DIGITAL_API
Definition:
gr-digital/include/gnuradio/digital/api.h:30
gr::block
The abstract base class for all 'terminal' processing blocks.
Definition:
block.h:71
api.h
gr
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition:
basic_block.h:43
gr::digital::ofdm_chanest_vcvc::sptr
boost::shared_ptr< ofdm_chanest_vcvc > sptr
Definition:
ofdm_chanest_vcvc.h:60
gr::digital::ofdm_chanest_vcvc
Estimate channel and coarse frequency offset for OFDM from preambles.
Definition:
ofdm_chanest_vcvc.h:57
gr-digital
include
gnuradio
digital
ofdm_chanest_vcvc.h
Generated by
1.8.16